Wow的渲染引擎是同时支持固定渲染管线渲染和Shader渲染管线渲染的.
bls文件是wow的shader文件,分析它的实现可以学习引擎是怎样渲染的,以及如何做一个兼容固定管线和Shader管线的引擎.
bls里存储的是OpenGL low-level shading language的指令,terrain1.bls,terrain2.bls,terrain3.bls,terrain4.bls分别对应渲染一块具有1/2/3/4层的纹理地形.terrain1_s.bls,terrain2_s.bls,terrain3_s.bls,terrain4_s.bls分别对应渲染带高光反射的地形,其对应使用的是带有_s的地形纹理.
虽然shader可以按任何算法和顺序来混合使用各层纹理,但Wow的shader的使用仍受限于与固定管线的兼容,使用ARBfp1.0标准,仍然是按标准纹理层次先后叠加.从使用的纹理可以看出,
layer0Texture,layer1Texture,..,,blendTexture,其中blendTexture的每一个分量都是一个Alpha图,
地形块为3层纹理时,第一层直接渲染不需要Alpha图,第2,3层各需要一张Alpha图,即共需2张Alpha图,这2张Alpha图存储在BlendTexture的x,w分量上.
使用4层纹理时,使用BlendTexture的x/y/w作3张Alpha图.
由于最多有4层地形纹理,BlendTexture的z就剩下来作为阴影图使用,完成了整个地形块的Shader.