使用normal map的目的
使用normal map的主要目的是使得low-poly的模型看起来如同high-poly的模型那样精致,比如一个1500个三角形面片的模型在细节上看起来跟一个拥有200万个三角形面片的模型一样精细。基本想法是将high-poly模型的细节拿来放到一张normal map中,将该normal map应用到low-poly模型,这样low-poly模型将会看起来跟high-poly模型那样精致。
下面开始讲如何利用normal map 制作精美骰子
一、配置场景环境
1. 场景单位,Customize > Units Setup..., 选择Generic Units;
2. 渲染驱动器,Customize > Preferences..., Viewports tab > Display Drivers, 确保驱动器是Direct3D 9.0。如果不是,则可以从Choose Driver选择它。
二、创建两个Box, 一个为low-poly,另一个为high-poly
1. 创建一个50*50*50的box,命名为lowPolyDice;
2. 将lowPolyDice复制一份,命名为highPolyDice;
注:highPolyDice由lowPolyDice复制而来这一步非常重要,这意味着它们的结构及空间位置都是一样的,这在后面生成normal map非常重要。若它们俩的位置不一致,则生成的normal map会有错误。
三、在具体做骰子之前需要知道的事情
1. 生成normal map有两种方法:
制作lowPolyDice和highPolyDice,然后在3ds max中生成normal map;
只制作lowPolyDice,使用Photoshop生成normal map,事先需要安装NVIDIA Normal Map Filter; 具体安装与使用见http://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop;
2. 选择何种方法来生成normal map的技巧
如果模型的边缘非常光滑,则使用high-poly模型来生成normal map;
如果模型上有文字,或者非常精细的细节,则选择在photoshop中生成normal map;
3. 本文利用混合法来生成normal map
对于骰子光滑的边缘以及面上的洞,在highPolyDice上造型;
对于bevel的文字,则使用Photoshop;
四、创建highPolyDice
1. chamfer edges and connect
0) 在编辑highPolyDice时,可以先隐藏lowPolyDice。但是注意不要改变它们的位置关系;
1) 将上述已创建好的highPolyDice转化为editable poly;
2) 激活按边选择,用ctrl+A全选它所有的边,对所有边进行chamfer,值为2;
3) 选中8个角落处的所有边8*3 = 24条,并connect,如Fig. 1。这一操作的目的是当使用修改器MeshSmooth时,能使它仍然保持成立方体;
Fig. 1
2. 加强edge部分
1) 仍然激活按边选择,以一个顶点作为基点,选中highPolyDice的一条边,用Ring选择所有与该边平行的边,并以2段数Connect它们,如Fig.2中右下角小图;
2) 以Loop选择方式,选择第一步所生成的边,分别将它们向两边缘平移。为方便计算平移的量,将highPolyDice移至中心点,我这里的平移量为14,具体操作的时候,这个数值可以调整;
3) 对于与基点相连的另外两条边,重复作第一步与第二步,结果如Fig.2;
Fig. 2
3. 重复2的操作,但这次不需要平移行生成的边,这样保证将每个面分成等面积的块,如Fig.3。
Fig. 3
4. 打洞,进行如下操作:
1) 激活按多边形选择,选择所有需要打洞的块,如Fig.4右下角小图;注意,在选择六点时,由于它的三个块是连续的,在进行下面操作可能会得到错误的结果,所以对于六点我们可以先选择分隔开的四点,对它操作完后,再进行另外两点同样的操作。
2) 进行Inset,值为2;
3) 进行Bevel,高为-2,outline amount为-1,最后结果如Fig.4;
Fig. 4
5. 完成highPolyDice
1) 退出按边选择模式,给模型添加修改器MeshSmooth, 迭代次数为3,如Fig.5;
Fig. 5
五、在生成normal map之前,对lowPolyDice进行unwrap,以确保它的多边形没有使用同一个UV空间
1. 修改lowPolyDice纹理坐标
0) 隐藏highPolyDice,显示lowPolyDice;
1) 给lowPolyDice添加修改器unwrap,并打开UV编辑器;
2) 激活按多边形选择,菜单Mapping > Flatten Mapping...,按其默认设置并确定,生成的纹理图片如Fig.6左上角小图;
3) 将最上面的方格移动到如Fig.6红色块显示位置;
Fig. 6
六、生成normal map
0. 确保同时显示highPolyDice和lowPolyDice,此时两者的几何空间应该是重叠的,如Fig.7中右下角视图中绿色部分显示的是highPolyDice;
1. 选中lowPolyDice,点击Rendering > Render To Texture..., 或者按快捷键 0打开对话框;
2. Enable Projection Mapping (2),并点击Pick,选择highPolyDice,此时工程会自动给lowPolyDice加Projection修改器;
3. 点击Options... (3)打开Projection Options对话框,勾选Use Cage;若以antiliasing方式渲染纹理图片,则点击Set up...打开Render Setup对话框,勾选Antialiasing,并且在Global Supersampling 下勾选Enable Global Supersampler, 选择Max 2.5 Star;若不想以antiliasing方式渲染纹理图片,则勾选Disable all Samplers;
4. 点击Add... (5),选择normal map;
5. 在File Name and Type (6)可以选择normal map输出的路径;
6. 其它设置如Fig.7所示;按Render渲染出来.tga文件自动保存到设置好的路径中;生成好后,normal map显示在viewport中,正确的normal map 如Fig.7右下角图;
Fig. 7
七、将生成的normal map在photoshop中打卡,保存.psd格式,并应用到lowPolyDice
1. 在photoshop中添加文字并合并到normal map中
1) 将normal map在photoshop中打开,新建一个图层,输入如图示文字;
2) 将文字层转化为normal map,利用NVIDIA Normal Map Filter,Filters > NVIDIA Tools > NormalMapFilter...;
3) 将文字层与normal map图层合并为一个图层,并保存;
2. 创建standard material,并将normal map设成bump map
1) standard material > Maps > Bump..., 选择Normal Bump, 在normal map的normals 选项,选择上述保存的图片;
2.将生成好的材质应用到lowPolyDice, 渲染后的效果如Fig.8
Fig. 8
八、通过normal map生成specular map 和 diffuse map
1. 通过normal map生成specular map
1) 对normal map 先后进行去色(Desaturate),反向;
2) 调节色阶(Level);
3) 其他地方选择并填充为白色,结果如页首效果图;
4) 将specular map应用到材质specular level对应的map中;
2. 通过normal map生成diffuse map
1) 用魔术棒,调节颜色容差值,选择圈圈以外的地方并用红色填充;
2) 选择红色区域并反选,填充为白色;
3) 将它应用到diffuse map中,结果如页首效果图;
参考教程:
http://www.game-artist.net/forums/spotlight-articles/43-tutorial-introduction-normal-mapping.html