Giter VIP home page Giter VIP logo

com.asurafanclub.drawinstancedsystem's Introduction

Draw Instanced System (URP)

Graphics.DrawMeshInstancedProcedural 的包装器,旨在使用实例化绘制时减少提交数据给 GPU 的频率。

此版本适配 URP,内部的绘制方法适应新版本引擎替换为 Graphics.RenderMeshPrimitives,绘制效率一致。

测试用例绘制的物体约 72M 个顶点,提交 2500 个调用批次,帧时间约 12ms

工作流程

绘制实例调度器Com.Rendering.InstancedMeshRenderDispatcher)挂在空节点上并保存为预制体,每个调度器保存一对材质球和网格作为绘制实例的依据,以名称索引。运行期通过名称查找绘制特定种类实例。

绘制实例调度器不会自动加载,需要在初始化阶段主动实例化。

要绘制实例的物体上挂载 绘制实例符号Com.Rendering.InstancedMeshRenderToken),这里建议也做成预制体。绘制实例符号保存定向到的调度器、每批次实例的颜色、包围盒(本地空间)和每实例偏移量等信息。需要在业务逻辑脚本中引用这个组件详细设置。

任何绘制实例符号被实例化之前需要保证其索引的调度器已经被正确加载。

内存

核心组件使用 Job System 完成计算工作,这会占据非托管内存,运行期可以在合适的时机调用 InstancedMeshRenderDispatcher.TrimExcess() 释放多余的非托管内存。

内部调度器会在内容无变化(没有增删对象)后的一段时间内尝试让出内存(预设周期 150s)。

着色器

包内建的着色器基于 URP 的光照着色器(UniversalRenderPipeline/Lit)修改,将其 GPU Instancing 的部分修改为适配 DrawMeshInstancedProcedural 的形式,并添加缓冲区:

  • _BaseColorsStructuredBuffer<half4>,rgba 颜色缓冲区,在片元着色器按实例化索引 unity_InstanceID 读取颜色。
  • _LocalToWorldBufferStructuredBuffer<float4x4>,世界空间变换矩阵缓冲区,按实例化索引 unity_InstanceID 读取缓冲区内容为每个实例写入 UNITY_MATRIX_M
  • _WorldToLocalBufferStructuredBuffer<float4x4>,世界空间变换逆矩阵缓冲区,按实例化索引 unity_InstanceID 读取缓冲区内容为每个实例写入 UNITY_MATRIX_I_M

使用这些缓冲区且兼容 URP 的着色器可以在此体系下正常工作。

com.asurafanclub.drawinstancedsystem's People

Contributors

asura336 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.