Shader 学习笔记 20151201

Segment 1 阅读

  • 看了cook book的第六大章

Segment 2 理解

  • 感觉解决这个问题就好了,渲染序列和Ztest Zwrite
  • 渲染序列是一个tag,表示渲染的先后顺序。特别注意的是:这个tag表示渲染顺序!!!事实上,在Unity里面,Geo层是优化过的(它不是按照距离camera的距离渲染的),其它层都是按照距离camera的距离,从远到近的渲染。有些人会问如果一个obj是斜着的,那么距离从哪里算?很粗暴,按中心点算
  • 固体、透明体;ZWrite on/off;渲染顺序真值表。
    结论是,固体开启ZWrite,渲染顺序随便搞。而透明体不交叉时,还有的搞,交叉了要死。
    这里写图片描述

  • 于是想到,是否交叉的透明体可以用Ztest去逐点比较depth,然后计算呢?其实这有点复杂。如果你现在srcObj在destiObj后面(也就是新render的点离camera比较近)就好搞,这可以归结为正常渲染顺序一类。但是如果srcObj在destiObj前面,就难了,这时候如果硬要做的话我们不仅需要srcObj的color和depth,还需要srcObj的透明度(这个透明度最难搞,因为如果你是3、4层以上透明物体叠起来的话,需要用算法先求出前几层叠过之后的透明度,这个硬件上目前就不支持,除非硬件专门做了,才好弄)。另外乱序之后还有一个最刺激的情况,根本无法操作了,见下图这里写图片描述
    在这个图里,先渲染1、再渲染2、最后渲染3、对于GPU这种流水线buffer方式的硬件来说,根本搞不了。因为在你渲染3的时候,必须完整的知道1和2的完整参数,而这个对于硬件来说不可能开这么多的空间给你存这些个东西。

猜你喜欢

转载自blog.csdn.net/mconreally/article/details/50129721