假影子是假三维的一种,有时候为了节省运算,让程序的效率提高,将静止物体的影子或者光斑直接赋予纹理之上,最著名的游戏里很多使用这种方便的方法,如下:
光影的即时运算将会占用大量的CPU效率和内存,有时候,有的影子或者光斑完全不会动,那么就没有必要用即时的方法来浪费宝贵的资源,方便得方法就是直接把影子或者光斑画在贴图纹理上,现在,我们用一个实际例子来如何便捷的制作这样的贴图。
一般来讲,在纹理上画影子或者光是一件麻烦的事情,因为你不可能在游戏中直接为他画上影子,有时候则需要反复对贴图进行修改,我敢打赌您一定不愿意做这样的费力工作。在此,我们将了解如何简单便捷的为场景中的静止物体“画”影子。
3DMax5以上的版本提供一个功能,可以直接将影子渲染到贴图的功能。通过本节的介绍,您不需要为静止的物体初始化影子和麻烦的灯光调整而发愁。
请参照附带的一些例子资源。
我们先来看看效果:我们所有的演示将由3DMax导出没有任何灯光及正常纹理的.x文件在d3d9的模型查看器里查看即时效果(用其他的工具也无所谓)。
您可以在例子资源中将.3ds导入3DMax进行研究,也可以在DirectX Utilities的MeshView工具打开.x文件进行测试。
这个是没有任何灯光,也没有任何影子,能够看出来,缺少影子的场景看起来很不协调。(mm0001.x就是这个文件。)
为了产生最终效果我们进入3Dmax为我们的场景打几盏灯,调整你想要的光源,并且让灯源能够照出影子。
然后,使用菜单项Rendering下的Render to Textrue选项,当然这个时候,请确认您的场景模型已经被选中,如果您的是一个大场景,那么笔者建议您将场景合并成为一个mesh后再使用该功能。
首先先不考虑其他设置,我们直接点击Add为其添加需要渲染得纹理,这时出现如下对话框,
选择DiffuseMap,其他的选项程序员可以研究,笔者不推荐美术人员在这个地方太过关注。
选择之后,主窗口就会出现相关的信息,例如纹理路径、名称、精度等可调整项,稍加修改即可为您导出适合您程序的纹理贴图,选择Render,将得到如下样子的贴图:
很明显,纹理上已经拥有了“影子”和“光斑”,得到纹理同时模型的身上就已经拥有了Automatic Flatten UVs修改器,实际上它和Unwrap UVW是一样的,从字面意义上可以看出,是由max自动为其修改的贴图坐标,您可以做一下其他尝试,便于了解。
于是我们使用这个贴图和贴图坐标生成新的模型(mm0002.x),下面是最终的效果 |