日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

U3D 文档 GPU INSTANCING

發布時間:2025/3/18 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。