剔除
HZB
优点:Drawcall少,GPU运算
缺点:过于保守,依赖回读
Hardware Occlusion Query
优点:像素级查询
缺点:大量Drawcall
Software Occlusion
优点:像素级结果
缺点:CPU运算
Visibility Buffer
个人想出的猜想性方案,基于HZB改进。HZB的主要问题在于使用CS做保守判断
该方案方法如下:
- 借助图形管线的光栅化只在可见像素上写入PrimitiveId
- 回读到CPU后解析可见的PrimitiveId
- 根据提交HZB的Primitive列表与可见的Primitive列表,算出不可见的Primitive列表
利用光栅化就又带入了Hardware Occlusion Query同样的问题,Drawcall过多,对于非Instanced的Primitive可进行合批
- 合批图元的Bound的八个顶点数据记录于同一条Buffer
- 以图元数作为Instance数,标准正方体作为图元发起实例化渲染
- VertexBuffer中根据InstanceId以及VertexId存取真实的顶点数据
- PrimitiveId作为Instanced Buffer传入
- VS中根据InstanceId取出PrimitiveId传入PS并写出
借助图形管线的光栅化流程,便可只有可见像素写出PrimitiveId,发起的Drawcall数量为HISM数+ISM数+1
整体Drawcall数可控,CPU增加些许解析数据开销,优点在于得到更为精细的剔除结果
Comments