Home > 程序/算法 > 法线图可以镜像映射吗?

法线图可以镜像映射吗?

February 21st, 2008 Leave a comment Go to comments

早先美术问过我法线图是否可以象diffuse纹理一样应用镜像映射,所谓镜像映射是指对称的模型只画一半的纹理,一半模型正常映射另一半翻转映射。

当时我想了五秒钟回答说不可以,因为很容易想到虽然图像被翻转了,但是像素颜色所代表的法线方向并没有相应翻转,所以凹凸会变反。

但是昨天美术做了个实验却发现采用了镜像映射以后光照的结果看起来却是对的……

回家自己画了图才发现原来想错了。原理很简单,镜像映射的部分UV轴(之一,取决于哪个轴的镜像)也被翻转了。如下图,法线图上偏红的表示法线向U方向偏移(对应纹理空间就是向“右”偏移);做了U轴镜像后,实际上红色就变成表示向左偏移了(仍然是向U轴偏移)。

21_010440_mirror

结果很完美,纹理的轮廓和代表的凹凸方向都被翻转了。程序员感觉很爽,美术也很高兴,几乎多出一倍的地方可以画更多的细节。

当然,这只适用于tangspace的法线映射。如果是object space甚至world space的法线映射就不能这么干了。

btw,tangent空间的手系和顶点坐标的手系没有必然联系,只是习惯上取相同的,而镜像后的tangent空间手系也会相应改变。

连带想到的另一个问题,以前听说过tangent space的三个轴(姑且这么称之)normal,tangent,binormal只需要计算其中两个,另一个用叉乘得到的方法是错的。
因为tangent变换并不是正交变换,大部分情况下顶点normal和三角形表面是不垂直的,tangent和binormal也未互相必垂直。不考虑镜像映射的话还只是误差,镜像映射之后干脆连方向都反了。

Categories: 程序/算法 Tags: ,
  1. No comments yet.
  1. No trackbacks yet.

 

Spam Protection by WP-SpamFree