国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
双城市| 紫云| 来宾市| 长武县| 肇东市| 克山县| 桐城市| 达日县| 于都县| 临高县| 武宣县| 许昌市| 中阳县| 浙江省| 和静县| 常宁市| 垦利县| 饶阳县| 梓潼县| 珲春市| 秦安县| 黎川县| 古浪县| 吉木萨尔县| 雷州市| 和林格尔县| 灵台县| 疏勒县| 浦城县| 荃湾区| 涟水县| 大新县| 平舆县| 民勤县| 师宗县| 黔南| 绥江县| 玛纳斯县| 开鲁县| 哈尔滨市| 新密市|