图形学习--理解stencil test、depth test

共同点:它们的目的都是为了丢弃片元!!!

1. **模板测试(stencil testing)**:FS处理完一个片元之后,通过模板测试决定是否要丢弃它,可简单理解stencil就是个mask掩码,1表示通过,0表示丢弃;此过程发生在渲染流水线的合并阶段中,具体在片元着色器之后,深度测试之前;

2. **深度测试(depth testing)**:深度测试可以从一个特定角度达到最近物体的排序的效果,与之相关的深度缓冲(Depth 			 Buffer)里的值始终保存离摄像机最近物体的深度值(透明物体除外),这样就可以从前往后绘制物体了,避免了很多的overdraw,大大提高了渲染性能

3. **为什么模板测试和深度测试要在FS之后做呢?(如果在这之前做不是可以大大减少FS的计算开销吗)**
这是因为在片段着色器之前没有办法确定深度或模板缓冲区的具体数值,片段着色器有可能会修改depth或者stencil对应的数值(如glFragDepth);
当然,特定情况下(未开启alpha test、fragment depth output等)也可以提前根据polygon做depth、stencil test,这叫做early-z、early stencil;

来源:
https://indienova.com/u/1149119967/blogread/25692
https://www.zhihu.com/question/40576087

你可能感兴趣的:(图形学习--理解stencil test、depth test)