地形法线贴图的优化

法线可以保存在切空间和世界空间两种方式.

保存在切线空间的好处是渲染对象无论怎么旋转,都可以得到正确的法线信息, 通常的法线也都保存在切空间.
它的缺点是,在渲染时需要进行空间变换,有额外的开销, 比如将法线从切线空间变换到世界空间, 从而根据世界空间的光照方向,做N dot L, 或者把世界空间的光照方向变换到切线空间,在切空间计算光照.
另外一个缺点就是需要保存顶点的切线信息,来完成切空间的计算. 

世界空间的法线贴图,则可以直接采样出来使用,不需要变换.缺点自然很明显,如果渲染对象有旋转,那么采样出来的法线已经跟原位置不匹配了.
对于地形来说,通常都是不需要旋转的,所以,法线贴图使用世界空间的话,可能就可以了,这样避免了shader计算.

以Ogre的地形为例,它的法线贴图虽然是切空间的,但是,他的顶点格式里面并没有切线数据,切线空间是直接通过世界坐标轴计算得来的.原因很简单,因为地形的顶点分部,通常都是沿着某两个坐标轴展开的,切线是确定的,不需要保存.当然前提是地形没有任何旋转.

posted on 2011-05-15 09:57 crazii 阅读(218) 评论(0) 编辑 收藏