从maya灯光贴图到unity
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350
lightmap灯光贴图,让场景更加真实。
我们有两个uv设置
• An Ambient Occlusion pass.环境Occlusion灯光
• A Ray Trace pass. 光线追踪灯光
好,开始。
在Unity中开始一个新的项目,a new Project。
包含标准包,Standard Assets Package;
同时,导入我们的资源包,LightMappingTutorial.unitypackage,我们在文件里提供了,unity里的资源可以以包的概念导入导出。
在文件包里打开TutorialStart场景;
现在的画面是没有等过效果的,视觉真实性不是很好,下面我们用lightmap来把场景调的更真实些。
整个场景是包含了三个面物体(meshes): “HouseMesh”, “TreeTrunks”, 和 “TreeBranches”.
房子,树干,树叶。
房子在maya中我们就用到一个材质球。
在maya里打开场景House.mb,如下图:
选择房子物体,打开材质编辑器,Window/UV Texture Editor...
下面我们使用Ambient Occlusion模拟全局灯光效果,准备生成第一个Lightmap。
•需要生成一个新的材质,打开Hypershade Window (Window/Rendering Editors/Hypershade...)
•生成一个新的Surface Shader (Create/Materials/Surface Shader)
•生成一个Mental Ray环境材质纹理:Mental Ray Ambient Occlusion Texture (Create/mental ray Textures/Mib_amb_occlusion).
双击“mib_amb_occlusion1”材质球,打开它的属性窗口Attribute Editor,给它重命名为:“AOTexture”。
• 把“surfaceShader1” 重命名为“AOShader”.
在材质编辑窗口,用鼠标中键把AOTexture 拖放到AOShader上面,再弹出的选择菜单中选Default方式,这就把AOTexture和AOShader以默认的方式连接起来。
这里我们就完成了对房子Ambient Occlusion设置所用到材质了。
• 双击AOTexture,编辑它的属性(改变2个设置):
第一个,采样值(the number of Samples),默认是16,为了达到更好的效果,提到64或128,根据个人的机器而定。
第二个是最大间距值(Max_distance),默认为0,但是远的地方的物体我们不需他们之间互相影响,我们把值设为Max Distance-----1.5,就可以。
设置完毕。
•鼠标中键把AOShader材质拖给房子,房子变黑。
•把渲染方式设置为Mental Ray,Window/Rendering Editors/Render
Settings...
• 测试渲染;
存在一些斑点splotchiness,取决于你的Samples值,但是后面跟的材质合成在一起的时候看不出来,基本上没问题。
• 好了,下面我们把它烘焙出来。
我们需要一个新的UV Set,进入maya的Modeling栏。
选择房子,进入Create UVs/Automatic Mapping (options)设置窗口。
设置如下:
• Set the number of Planes to 6
• Set Optimize to “Fewer Pieces”选,较少片段方式
• Set the Scale Mode to “Stretch to Square”保证正方体
• Set “Shell Stacking” to “Shape”. This ensures that Maya will map the UV shells into the tightest composition.让贴图更加紧凑,不留大空。
• Finally, check Create New UV Set and name it “lightmap”.生成新的UV Set ,并命名为lightmap。
• 设置好了,点击Project钮.
进入材质编辑器,我们可以看到有2个UV sets,他们是原来的“map1” 和 新的“lightmap”.
下面,我们开始烘焙这个Ambient Occlusion通道。
在“Channel Box/Layer Editor”栏,隐藏“TreeBranchesLayer”树叶层;
因为树叶用到了Alpha通道,在计算的时候是根据面来算,而不是根据通道来算,会出现不符合实际的阴影,所以,我们就隐藏了它。
选择房子,选择菜单Color/Batch Bake(mental ray) (options)设置
这里有很多参数设置
• Objects to Bake is “Selected”,要烘焙的物体时“Selected”选择的物体;
• Bake to Texture—make sure Bake Shadows is set.烘焙到材质,选择烘焙阴影;
• Camera is “perspective”.选择透视相机;
• 选择use bake scene override;
• Color mode is “Light and Color”.颜色模式:灯光和材质;
• 选择 Orthogonal Reflection(直角反射)(没有这个,AO计算会计算每个角生成不需要的材质);
• Normal Direction is “Surface Front”.法线方向为“面的前方”;
• 前缀名Prefix : “HouseAO”.
• 设置尺寸为2048 x 2048 ,图像格式为“TIFF”;
• 选上Bake To One Map;
• “Fill Texture Seams”相对于2048的图,设为10最合适;填充材质接口;
• The last setting is to check Override mesh UV set assignments and to name it “lightmap”.最后一个设置为,检查Override mesh UV 分配为 “lightmap”.
最后,整一个设置表为:
最后,转换、关闭,Convert and Close。
这个过程需要些时间。
结果显示一片乱,但是实际上这个AO已经通过UV:lightmap正确的烘焙出来了,只是选择视图显示是“map1”而已。后面我们接续工作。
把HouseDiffuse shader重新赋予给房子,恢复正常显示;
下面我设置另外一种方式:Ray Trace pass:
生成一个环境灯,Ambient Light,Create/Lights/Ambient Light (options).
设置如下
Intensity 0.15;
Ambient Shade 0;
这个灯光是用来调整阴影的对比度的,让影子不要太黑;
• 不生成阴影 Cast Shadows ,按Create生成.
• 下面,再生成一个方向灯,Directional Light.
在属性窗口,设置颜色为HSV (48.35, 0.185, 1.0),灯光有点偏黄;
在下面的Shadows栏,选择Use Ray Trace Shadows;
旋转灯光到一定的角度,模拟太阳照射;
如(-45, 45, 0);
下面的工作是进行Mental Ray设置;
打开渲染窗口,Render Settings Window (Window/Rendering Editors/Render Settings...).
把“mental ray” 的渲染质量Quality Presets 提高为“Production”(生产级别的).
到下面的Raytracing菜单,确定Ray Tracing 是备选的状态;
• 到下面的Shadows栏,改变Shadow Method 阴影方法为“Sorted”(分类阴影).
对于树叶的Alpha通道树叶很重要,否则渲染出多变形。
• 确定“TreeBranchesLayer”层打开,选择房子;
• 打开烘焙设置窗口,Color/Batch Bake (mental ray) (options).
做两个改变:
• 改变颜色模式Color Mode 为“Only Light”.
• 重命名Prefix为“HouseShadow”.
• 点击Convert and Close钮,开始烘焙;
进入HyperShade window,把刚才烘焙生成的材质命名为“FinalShader”。
下面我们就把2个通道生成的材质合成为1个材质;
我们用Photoshop进行合成,在这个目录下“Documents/maya/projects/default/renderData/
mentalray/lightMap”应该有我们刚生成的tif格式文件。
用Photoshop把他们合成到一块;
• 把“HouseAO.tif” 叠到“HouseShadow.tif”上,层的叠加方式用blending mode ------Multiply.(正片叠加方式)。
把文件保存到unity项目的资源(Asset)里,名为“LightMapTexture.psd”,注意,不要合层,方便日后调整。
回到Hypershade Window,材质窗口,生成一个新的Lambert材质,名为LightMap;
• Graph/Clear Graph,清理Hypershade Window的工作区域.
• 选择“LightMap” Material,执行Graph/Input Connections.
• 生成一个层材质Layered Texture通过default默认方式连接到“LightMap” Material.
这里讲究的是一个思路和方法,我们生成了一个Layered Texture,然后把刚才生成的房子的材质和新烘焙、合成出来的黑白图,让他们以一种Illuminate(照明)的方式融合起来,然后赋予房子,需要说明的是unity能自动人maya的文件,同时,也认maya的分层贴图,最后的连接为
清晰显示为
烘焙的黑白图连接到Layered Texture的inputs[0].color
彩色材质图连接到Layered Texture的inputs[1].color
Layered Texture的Blend Mode融合方式为:Illuminate
还有重要的一步是调整好对应的UV,选择房子,单击右键UV Sets/UV Linking...
设置好对应的UV
。
最后,把lightmap材质再赋一次给房子。
保存文件,最后到unity里,自动就能认maya的文件,把文件直接拖到视图就可以。
• 选中 “HouseMesh” 把材质类型改为“Lightmapped/Diffuse”.
• 把合成好的黑白材质“LightMapTexture.psd” 拖到“Lightmap (RGB)”位置.
好,显示效果很好,不错!
全文完。
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350