今天被人鄙视了一下,原因是菜鸟常被人鄙视。技术上来说,高手训斥菜鸟永远都是对的。
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还是很划算的。
上面这个是国内开源引擎KlayGE里面的作者描述的,从描述上来看PN-Triangles和Phong-Tesse本质并没有太大的区别,就是在tess的基础上改变生成的点的位置,算法上稍有区别,Phong-Tesse简洁一些。
从这个折射出一个道理,引擎所有做的事是用更简单的方式实现更好的效果。