U3D 文档 GPU INSTANCING
https://docs.unity3d.com/Manual/GPUInstancing.html
?
歸納總結:
一,快速使用U3D 的GPU 實例化功能
1,選擇一個shader,勾選 enable gpu instancing,這個shader將用于你的將要使用gpu instancing的物體
2,U3D自動對使用了這個shader的物體做gpu instancing
比如渲染一堆網格相同,位置不同的物體
這時候做不到讓每個物體有不同顏色,或不同的縮放,不同的旋轉
?
到此,最簡單的gpu instancing功能就實現了,如果想要更多效果和控制,那么接下來看二,三兩步
?
二,添加個性化
修改shader和應用程序,可以讓實例化的每個物體擁有不同的顏色,或不同縮放,或不旋轉
1,修改shader,
1.1 若是surface shader,只需三行宏定義,如下,指定顏色屬性為每個實例都不相同
UNITY_INSTANCING_BUFFER_START(Props)UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color)UNITY_INSTANCING_BUFFER_END(Props)?
?
1.2若是vertex/fragment shader,則需要在不同地方寫很多條宏定義
?2,修改腳本,在應用程序腳本中為每個物體的materialPropertyblock設置不同的參數,如顏色等,U3D會自動收集這些個性化數據,最后在繪制時一次性提交給GPU(即在drawmesh或drawInstancedMesh時),如下:
MaterialPropertyBlock props = new MaterialPropertyBlock(); MeshRenderer renderer;foreach (GameObject obj in objects) {float r = Random.Range(0.0f, 1.0f);float g = Random.Range(0.0f, 1.0f);float b = Random.Range(0.0f, 1.0f);props.SetColor("_Color", new Color(r, g, b));renderer = obj.GetComponent<MeshRenderer>();renderer.SetPropertyBlock(props); }?
?
如果還不滿意,那么可以進行第三步
三,進階
自己調用繪制API: Graphics.DrawMeshInstanced,替換U3D的默認調用Graphics.DrawMesh
?
總結
以上是生活随笔為你收集整理的U3D 文档 GPU INSTANCING的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNITY statistic中的 Se
- 下一篇: C++右值引用的参考