剔除

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增加些许解析数据开销,优点在于得到更为精细的剔除结果

shading model 自定义Hexo博客显示

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×