多谢华山兄和Secondage兄的解释,终于明白了DOOM3中HeightMap的真正用处。
原来HeightMap并不是用作ParallaxMapping的(实际上HeightMap中保存的也并非真正的高度信息),而是用于生成NormalMap的。
DOOM3中的BumpMap一共有两种,一种是PolyBump,它是由_local纹理得到的,保存的是模型粗略的凸凹信息;另一种是DetailBump,它是由HeightMap得到的,保存的是模型的凸凹信息细节。通过这两种方式共同作用才能够得到真正的效果。
JC具体是如何对两种NormalMap进行操作的还不太清楚,不过华山猜想是将DetailBumpNormal做一个Scale,然后与PolyBumpNormal相加。至于Scale的参数,他估计是从*.mtr中得到的。
我试了一下,效果还可以,多了很多细节。
btw:试着用NormalMap的Alpha通道传入Height信息后做了一下ParallaxMapping,效果很差。