Segment 0
- 杂谈。 今天俗务缠身,学习时间不多,颇多遗憾
Segment 1 阅读
- 看了cook book的法线贴图这一段
Segment 2 理解
- cook book这下子失手了。。。 只介绍了如何使用法线贴图,原理一概不讲。 上网一查,才有所收获。
所谓法线贴图就是先有两个体型差不多的物体(其中一个体型多边形少,一个体型多边形多),接下来就提取一下多边形多的那个模型的每一个点上面的法线,提取完之后把这些个法线存成一张法线贴图(法线贴图里的RGB分别存XYZ)。实际使用的时候用这个高精度的法线贴图里面的RGB值(就是法线值)替换掉我们实际模型每一点的法线值。法线替换之后再用另外一个texture贴一下表面材质。最后,当光照照射时,你会惊喜的发现,每个点对光的反射都不大一样了!看起来一个低多边形的模型居然有了丰富的细节!!!(可以想象低多边形模型是个光滑圆球,高多边形是个凸凸凹凹的球,首先两个模型之间的点是一一对应的,或者说点的投影是一一对应的。当我们把凸凹球的法线移植到光滑球上面之后,再用光去照它,自然就个光滑球不一样了,反而和凸凹球有点像!)
吊的很, 这个链接的文章必须看一下 《写给笨人的法线贴图原理》
(http://blog.csdn.net/damenhanter/article/details/22481563)
- Photoshop里面有一个玩法是直接搞一张锈迹斑斑的照片,通过算相邻点的颜色差,虚拟出一个法线值(我猜的,据说是sobel算法),然后每个点都这么搞一下之后就能整出一张法线贴图,再配合之前的锈迹斑斑照片,这两个texture就可以对一个平面渲染,把它渲染的好似真的有一块块凸起来的锈。
- 上面说的法线贴图都是说高模和低模长的一样的例子,还有一种是我的低模不一样了,它有一个尖尖的凸起,或者很窄很深的坑。这时候就需要用到tangent space做贴图变换了,原来的玩法贴不上去了。说是这么说,但是具体实现我还不是很了然,留待他日吧。
- 回顾一下, 此文章必读!
【Unity Shaders】法线纹理(Normal Mapping)的实现细节
http://blog.csdn.net/candycat1992/article/details/41605257