记录一下最近想搞的材质合并:
材质参数和贴图在常规的渲染流程里(非GpuDriven)的情况下,只要变一个参数或者贴图就会产生非常多的材质变体或者材质实例,而导致合批被打断。
一个优秀的材质合并可以让引擎的合并效率更高

流程:
先做一下材质分类,基本的分类标准就是:shader,管线状态(或者keyword),再针对分类后的材质组做合并。
参数合并
1.离线计算ConstantBuffer 的偏移量(合并之后的CBuffer的起始位置),这些偏移量同样是存在ConstantBuffer上或者直接放到宏定义上
2.离线计算材质参数,放到ByteAdressBuffer,一个shader一个
3.运行时去读上面的两个文件,通过ConstantBufferValue_Offset + sizeof(type)*matID 可以去拿到具体的某个值。
贴图合并
贴图合并就比较简单例如:Bindless,TextureArray,图集