最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity GPU Instancing

2022-12-16 18:45 作者:少女的美夢7  | 我要投稿

GPU Instancing開啟條件

  • 首先Shader必須兼容與Instancing。

  • 材質(zhì)開啟?Enable GPU Instancing

  • SRP Batcher的優(yōu)先級高于GPU Instancing,對于Game Objects,如果SRP Batcher能被使用(Shader兼容SRP Batcher,節(jié)點(diǎn)本身也兼容等),則就會使用SRP Batcher,即便材質(zhì)開啟了Enable GPU Instancing也沒用

  • 如果SPR Batcher的條件被破壞,例如使用了MaterialPropertyBlock,且開啟了Enable GPU Instancing,則GPU Instancing則會啟用

GPU Instancing的性能

  • GPU Instancing對于頂點(diǎn)數(shù)比較少的模型不一定能提高性能,因?yàn)轫旤c(diǎn)數(shù)少時(shí)GPU不能充分的分配資源去繪制多個(gè)實(shí)例,這個(gè)頂點(diǎn)數(shù)的閾值根據(jù)不同顯卡是不一樣的,但一般來說少于256個(gè)頂點(diǎn)是不合適的。

  • 如果有很多頂點(diǎn)少的物體需要繪制,可以將他們合并到一個(gè)mesh中進(jìn)行繪制

自定義Shader兼容GPU Instancing


  • 首先,定義PerMaterial Uniform block時(shí),要使用INSTANCING相關(guān)的宏UNITY_INSTANCING_BUFFER_START,UNITY_INSTANCING_BUFFER_END和UNITY_DEFINE_INSTANCED_PROP。這些宏的作用是將Uniform block定義成數(shù)組。需要注意的是,只有當(dāng)同一個(gè)材質(zhì)下面的不同Instance存在逐Instance不同的屬性時(shí),才需要將UnityPerMaterial的CBuffer改成使用這些宏,否則是不需要的,因?yàn)檫@些宏只是為了將屬性定義成數(shù)組,然后可以使用Instance索引去得到數(shù)組里面不同Instance各自的屬性。另外,由于CBuffer的名字不能沖突,所以也不能僅僅將不同的屬性單獨(dú)拿出來使用這些宏包裹,如果需要拿出來就得全部拿出來,也就是將SRPBatcher使用的CBuffer的宏替換成這些宏


  • VS和FS的輸入都要使用結(jié)構(gòu)體作為參數(shù),且結(jié)構(gòu)體中需要使用宏UNITY_VERTEX_INPUT_INSTANCE_ID定義逐物體的instance id


  • 在VS和FS中,都要使用宏UNITY_SETUP_INSTANCE_ID來設(shè)置instance id變量,這個(gè)宏的作用是使用一個(gè)base instance id和input中的instance id組合出一個(gè)instance id變量來作為數(shù)組索引獲取相應(yīng)的屬性值


  • 如果需要在FS中獲取屬性,則VS中需要使用宏UNITY_TRANSFER_INSTANCE_ID從input向output傳遞instance id。然后在FS中使用宏UNITY_ACCESS_INSTANCED_PROP獲取屬性。當(dāng)然如果是在VS中獲取所有屬性進(jìn)行計(jì)算,則不需要傳遞,直接在VS中使用宏UNITY_ACCESS_INSTANCED_PROP獲取屬性


  • 另外,必須要添加#pragma multi_compile_instancing


Unity GPU Instancing的評論 (共 條)

分享到微博請遵守國家法律
临夏市| 象州县| 唐海县| 芜湖市| 屏东县| 辉南县| 商城县| 巴彦淖尔市| 内江市| 邢台市| 华亭县| 格尔木市| 大新县| 茌平县| 科技| 鹿邑县| 霍山县| 扎鲁特旗| 陇西县| 布尔津县| 句容市| 乐陵市| 鄢陵县| 达孜县| 江川县| 延庆县| 喀什市| 绩溪县| 五寨县| 江安县| 清河县| 焦作市| 江华| 济南市| 兰州市| 淮北市| 绥宁县| 华容县| 沐川县| 卢龙县| 卫辉市|