泡泡网服务器频道 PCPOP首页      /      正文

DX9压榨专家 半条命2神奇渲染引擎揭

   我们先在场景里每个多边形上贴上法线贴图看看,结果是这个样子的:

 

 图11 物体表面的法线贴图

    看上去很诡异……实际上,法线贴图不是这样简单的贴到物体表面上去的,因为它保存的不是颜色颜色信息,而是物体表面上很多的三维法线向量。

    在绘制一帧图像中的每个象素时,Source引擎都将从法线贴图里取出这个象素对应到物体多边形表面上那个点的法线向量,与多边形的局部空间的每个基向量做点乘(点积)操作,得到一个0到1之间的浮点数。由于法线向量和基向量都是单位向量(长度为1的向量),而两个单位向量方向越接近,点乘的结果就越大(最大到1),所以就可以通过这个浮点数来“过滤”从该光照贴图里读出的颜色。我们用下面的公式来表示一下可能会更清楚:

象素的最终的颜色 =
第一张光照贴图中取出的颜色 × 法线与第一个基向量点积的结果
   + 第二张光照贴图中取出的颜色 × 法线与第二个基向量点积的结果
          + 第三张光照贴图中取出的颜色 × 法线与第三个基向量点积的结果

    这样就保证了象素上的法线越接近于哪个基向量,对应的从哪张光照图取出这个象素的颜色占的比重就越大。

    通过这步关键的计算,就可以把凹凸贴图和光照贴图结合起来了。这时的场景看起来像下面的样子:

 图12 通过法线贴图过滤组合后的光照效果,表面凹凸细节的效果已很明显

    下面的一张是最开始的单一光照贴图效果,拿过来比较一下:

    而物体表面本身也是有材质贴图的:

 图13 物体本身的材质贴图,没有加入光照

    然后,再用有凹凸细节的光照效果和物体表面本身的材质贴图相混合,就得到了漫反射部分的完整图像:

 图14 材质贴图混合了光照后的结果。

    实际上,在混合时只要把算出的光照颜色和材质本身颜色的红绿蓝三个通道分别相乘就行了。

    我们可以再将上面这张图和最开始只使用传统的单一光能传递光照图获得的效果作一个比较:

 图15 只使用单一光照图,很多沟壑的凹凸细节都没有

    OK,漫反射部分的实现原理基本就是这样了。下面我们来总结一下这个流程。

 图16.a 截取一部分图像来说明这个流程

 图16.b

    从左到右:首先使用法线贴图在三张光照贴图中取颜色值,混合成带有凹凸细节的光照贴图,然后乘以物体本身的材质颜色贴图,得到右边最终的效果。<

0人已赞

关注我们

泡泡网

手机扫码关注