MaterialPropertyBlock

MaterialPropertyBlock mpb = new MaterialPropertyBlock();//最好全局唯一静态对象

Render(MeshRenderer、SpriteRenderer).GetPropertyBlock(mpb);

mpb.SetFloat(...)//类似material.SetFloat使用

Render(MeshRenderer、SpriteRenderer).SetPropertyBlock(mpb);

 这样更改材质属性不会产生新的材质实例,而是会产生一个新的存储区域在CPU,它配合GPU Instancing使用。

因为GPU Instancing要求同网格同材质,而且不支持SRPBatch(凡是使用MPB的则不可能生效SRPBatch,理由是SRPBatch必须所有改动属性都在GPU的CBuffer中,不然会打破Batch)

posted @ 2024-01-05 18:36  mc宇少  阅读(138)  评论(0编辑  收藏  举报