闭合Volume一般性的构建可以使用CPU方式,通过产生阴影物体本身的网格系统来挤压实现,这种不在讨论范围。
而用VS挤压方式产生Z-Fail阴影的策略则是空间换时间,其本身挤压阴影体、模板绘制的基础理论并没有难度可言,但至关重要的要求是生成一个闭合的Volume Mesh。所谓闭合就是指没有破洞的Mesh,比如一个球体就是闭合的Mesh,但如果球体上挖掉一个洞就是非闭合的;由一个三角形构成的Mesh是非闭合的,而由正、反两个三角形贴合在一起构成的Mesh则是闭合的。如果一个VolumeMesh非闭合将会导致严重的阴影错误。
而要构建一个闭合的Volume Mesh,笔者最近做下来总结要点如下:
一、要排除孤点、去掉不参与构成三角形的顶点
二、要去掉多余的重合的三角面。
三、关键点是修补破洞,需要将破洞的边缘找出来以后再三角化。破洞边(Hole Edge)构成的破洞环要注意每条边的两个顶点与其它的边的顶点的邻接的顺序,不能任意颠倒
四、最后再进行顶点合并,把VB扫描一遍,把可以合并的顶点归到一起,以节省空间