转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=1449

花了10分钟把ModelViewer中的GPU模型平滑处理从PN-Triangles改进成Phong Tessellation。平滑的效果很好,速度也提高了将近一倍。打开和关闭平滑模式的对比如下:

关闭Phong Tessellation的原始模式

关闭Phong Tessellation的原始模式

打开Phong Tessellation的平滑模式

打开Phong Tessellation的平滑模式

注意头部的棱角,打开Phong Tessellation后变成圆的了。

PN-Triangles需要在每个三角形patch的内部计算7个点的position和3个点的normal,并通过它们来二次插值出所有细分出来的顶点的position和normal。而Phong Tessellation直接把细分出来的顶点投影回三个原始顶点,只需要线性插值就可以得出position和normal。不但节省了大量的运算,还减少了宝贵的I/O带宽(HS到DS需要传递的量从34个float减少到4个float)。Phong Tessellation的HS部分也变得跟普通的tessellation(姑且称之为Flat Tessellation)完全相同,只要DS里面加入三四行代码就可以把Flat Tessellation变成Phong Tessellation,比起PN-Triangles需要大量修改HS、Constants HS、DS,以及互相传递的结构体来说,Phong Tessellation还是很划算的。