Lights(灯光),Cameras(摄像机)和Visibility(可见性)导入
改进法线计算,增加Weighted Normal计算方法
增加Stingray PBS材质支持
预制体Prefab中嵌入式材质处理
自定义动画属性导入
Presets
Constraints
FBX Exporter工作流
ProBuilder相关介绍
Substance in unity
灯光摄像机和可见性导入
基础知识
1
Unity支持的DCC工具和格式
Unity支持的DCC工具和格式见下表。
软件名称
原生格式
Maya
.ma .mb
3ds Max
.max
Blender
.blend
Modo
.lxob
Sketchup
.skp
Cinema4D
.c4d
Lightwave
.lxo
Cheetah3D
.jas
2
Unity支持的交换格式
Unity支持的交换格式:FBX(默认支持,嵌入多种信息比如摄像机光照的导入,材质贴图导入,动画导入等),3ds,dae,obj,dxf。
最佳实践
1
单位大小和动画帧率设置
Maya通常是厘米cm,3ds Max通常是英尺inch,Unity则是米m。建议使用现实世界物体的尺寸,因为这会影响光照计算,物理效果模拟等与现实世界相关的功能。
在Maya中,点击菜单Windows > Settings/Preferences > Preferences窗口下的Settings中查看单位设置。
在Maya中,点击菜单File > Game Exporter,也可以找到单位unit的设置项目。
需要特别注意的是动画的帧率设置。Maya默认是24帧每秒,而Unity的帧率按照平台的不同而不同。例如:PC或者Mac上是能跑多少帧就跑多少帧,而移动平台因为考虑到电池因素一般默认30帧/秒。
如果设置了QualitySettings.vSyncCount,比如默认是60帧/秒,但是vSyncCount设置成了2,那么游戏的最终帧率则是30帧/秒。
2
模型网格拓扑结构
如果模型来自Mudbox或者Zbrush这样的雕刻软件或者是来自照片建模,要设置正确的面片数,尽可能的优化模型网格。
但是要避免过度优化,特别是要避免超级长的三角形面。
尽量通过法线贴图和纹理来表现细节,而不是通过大量的面片来表现。
正确的建模流程是从高模到低模,中间有不同层级的LOD。
3
纹理
制作原型的时候可以使用PSD格式来加快迭代,但是不要放在工程中,以免增加工程文件大小。
项目工程中可以使用PNG格式的纹理,因为PNG格式是无损格式,而且文件不会很大。
无需在导入工程之前就缩小纹理尺寸,因为Unity中可以压缩纹理。
尽可能的使用Texture Atlas,但是不同的Shader类型要用不同的纹理。
可以通过平铺纹理和使用分层的材质来节省一些纹理空间,为模型增加细节。
4
材质
建议选用Maya或者Max中的Stingray PBS材质,在Unity中对应的是Standard (Roughness setup)。
支持Unity和Maya或Max之间的无缝迭代。
5
文件格式
如果是制作原型阶段,可以使用Maya或Max的原生格式进行快速迭代(需要在同一台机器上安装Maya或Max)。
如果要支持多人协作,则可以选择交换格式比如FBX。
FBX也支持更多的功能比如摄像机和光照的导入等。
十大美术资产迭代改进
1
Lights(光照),Cameras(摄像机)和Visibility(可见性)导入
从DCC软件中导出FBX的时候可以选择包含光照,摄像机等信息。
导入Unity时可以选择把这些信息导入。
摄像机数据导入
FOV(支持动画)
Projection模式(Orthographic或者Perspective)(不支持动画)
Near/far plane distance(不支持动画)
光照数据导入
Intensity(支持动画)
Color(支持动画)
Range(不支持动画)
Cast Shadows(如果设置为Off在Unity中就勾选“No Shadows”;设置为On则在Unity中设置为“Soft Shadows”)
Spot Angle(仅对spot light有效,支持动画)
2
改进法线计算,增加Weighted Normal计算方法
导入模型时默认的法线导入方式是Import。你也可以改为Calculate,然后在Normals Mode模式选择框选择一个法线计算方式,让Unity为你重新计算一遍导入的法线信息。当然,这并不是说选择Calculate方式就比Import的好。
如果选择Calculate方式,Area Weighted模式会按照Polygon的大小来计算法线对Vertex Normal的影响,Polygon越大对Vertex Normal的影响越大。这适用于高精度面片数较多的模型。Angle Weighted模型可以降低三角面造成的瑕疵,比较适用于面片数较低的模型。当然,默认的计算模式是Area and Angle Weighted,它整合了两种模式的好处以获得最佳效果。
Unweighted (Legacy)
Unweighted
Area and Angle Weighted (默认模式)
3
增加Stingray PBS材质支持
现在如果在Maya或者3ds Max中为模型添加Stingray PBS材质,当导入Unity中时,会自动使用Standard(Roughness setup)进行匹配,包括你在DCC工具中设置好的Color Map,Normal Map,Roughness Map,Emissive Map等。
Maya 2018中的HyperShade窗口,创建一个Stingray PBS材质,连接到各个贴图,比如Color Map,Normal Map,Metallic Map和Roughness Map等。
将从Maya中导出的FBX文件导入Unity,在Project窗口选中模型,然后在Inspector中选择Materials设置界面,点击Extract Materials和Extract Textures按钮把材质和贴图取出。
接着就可以把取出的贴图与材质(已被自动设置为Standard(Roughness setup))的相关通道相关联。
4
预制体Prefab中嵌入式材质处理
从上述Stingray PBR流程中可以看出,从Unity 2017.2版本开始,当导入模型时,模型的材质和贴图信息会被包含在生成的Prefab里面,而不是像之前那样放在外部。这个新的导入行为更便于模型材质和贴图的管理。
Unity会先在现有工程中按照名称寻找同名的已经存在的材质和贴图进行关联,当然你也可以选择从新导入的模型中取出材质和贴图进行关联。
你可以通过Remapped Materials界面进行相关的行为设置。
5
自定义动画属性导入
具体使用方式,请查看文末的直播录播视频。
6
Alembic Package
Alembic会通过Unity 2018.1版本的Package Manager提供给大家。Alembic功能目前只支持通过编辑器模式导入Alembic格式的文件并创建用于渲染的内容,并不支持实时导入,因为Alembic格式的文件本身会比较大。
因为Alembic还在Preview阶段,你需要在你的Unity工程目录下的Packages/manifest.json文件中添加以下配置信息。
{
"dependencies": {
"com.unity.formats.alembic": "0.1.2-preview"
}
}
添加完成以后,重新打开Unity编辑器,Package Manager窗口中就会出现Alembic下载安装完成的信息。
注意:上述方法只适用于Unity 2018.1版本。如果希望在之前的Unity版本中导入Alembic插件,请到GitHub地址下载:https://github.com/unity3d-jp/AlembicImporter/releases
使用流程
在DCC工具中生成所需动画,导出Alembic格式的动画缓存文件(后缀名为 .abc)。
在已经安装了Alembic插件的Unity工程中导入abc文件,插件会自动处理导入的abc文件。可以通过此界面调整导入设置。
将abc文件拖入场景。你可以通过二种方式来做动画。
方法一:打开Timeline,创建一条Animation轨道,关联相关的abc文件,给Alembic Stream Player组件上的Time属性做关键帧动画。
方法二:在Timeline上点击Add按钮,创建一条Alembic Track,然后右键点击轨道本身,点击Add Alembic Shot创建一个Clip,选中它,接着在Inspector中的Alembic Shot Asset下的Stream Player上关联Hierarchy中的alembic预制体。
7
Presets
从Unity 2018.1版本开始,你可以为Unity中的大部分对象,组件,资源导入器(Asset importers)和Scriptable Object创建preset。Preset本质上就是针对某个类型对象的配置信息。可以作为Asset资源来保存,也便于通过版本控制系统进行保存更新。
现在我们拿光照组件来进行举例。
创建新的Preset
点击右上角的Preset图标打开Preset窗口。
通过这个窗口你可以点击“Save current to…”按钮保存当前组件的配置信息,比如光照的颜色,强度,有无阴影等,或者也可以加载当前已经存在的配置信息。
注意:如果Project窗口有保存过一些Presets,那么这个窗口只会显示和当前选中组件相关联的Preset。比如当前选择的是Transform组件,那么即使有光照的Preset存在,也不会显示。
使用Preset
我们可以通过上述打开Select Preset窗口选择合适的Preset应用到当前的组件上,也可以直接从Project窗口拖动Preset到Hierarchy或者Scene窗口,这会自动在场景中为你创建一个Preset指定类型的对象。
我们也可以直接将Preset拖动到你想应用的对象上,Preset会在此对象上直接创建一个新的相关组件,把Preset中的数值填入这个新的组件。当然,如果此对象已经存在相同的组件,系统会报错当前对象已经添加过相同的组件。
通过Preset Manager为不同类型的物体创建默认Preset
点击顶部菜单Edit > Project Settings > Preset Manager可以打开窗口添加默认Preset。
如下图所示,当前Project中已经创建了二个光照的Preset,你可以在Preset Manager窗口选择其中一个光照的Preset作为默认的光照配置。例如:我们使用PurpleWallSpotLight,那么以后创建的光照对象的默认值都会使用PurpleWallSpotLight这个Preset里的数值。
另外,当使用组件的Reset菜单(每个组件右上角小齿轮图标点击打开的第一个菜单)时,重置的数值会按照默认的Preset来恢复。
Preset API
开发者也可以使用Preset API来做自己的插件开发,用于保存自定义的组件配置信息。详情请参看文档:
https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Presets.Preset.html
8
Constraints(约束)
目前支持5种约束。
Position Constraint
Rotation Constraint
Scale Constraint
Parent Constraint
Aim Constraint
让我们与Maya中的Constraints菜单相比较。
Unity中实现的5种Constraints是DCC软件中最常用的几种。在日常开发中可被用于以下二种情况。
直接在Unity中使用,可以为不同的对象之间建立约束关系。也可以通过Timeline为指定约束的Weight做关键帧动画,满足动态地启用约束或者停止约束的需求。
在DCC软件中设置好Constraints,通过FBX中的选项导入Unity中。目前支持Maya和MotionBuilder。
注意:在同一个场景中的约束会被同时被评估执行。由于这个行为,如果我们做一个链式的约束,比如C被B位置约束(Position Constraint),B被A位置约束(Position Constraint),那么当移动A的时候,有可能C的位置信息要在下一帧才会更新。
9
FBX Exporter工作流
FBX Exporter工具支持Maya 2017或更高的版本,Maya LT 2017或更高的版本,以及3ds Max 2017以及更高的版本。
点击Edit > Project Settings > Fbx Export,打开Fbx Export Settings窗口。
在窗口中选择所需安装的DCC工具的插件(3ds Max 2018, Maya 2017或者Maya 2018)。
然后点击 Install Unity Integration按钮,在弹出框中选择Maya或者Max的安装路径根目录,完成安装。
注意:如果你在Windows机器上安装的时候碰到下图的出错信息,可以先关闭Unity,然后用管理员权限运行Unity,尝试再次点击“Install Unity Integration”按钮进行安装。
10
ProBuilder
ProBuilder加入Unity编辑器大家庭是一个对于整个Unity游戏开发流程具有非常重大的意义。
为什么这样说?因为游戏引擎是最终游戏拼装成可执行文件的地方,但是之前由于Unity不具备建模功能,所以即使要做一个简单的原型,也需要用到Maya或者3ds Max这样庞大的功能齐全的建模动画软件。不光是增加了游戏开发者,特别是游戏设计师的学习曲线和压力,也增加游戏设计本身的复杂度。试想一位游戏设计师,有非常棒的游戏设计理念和能力,但是缺乏足够的建模能力,这时候他只能依赖于美术来为他制作验证游戏设计所需的模型或者动画,这大大增加了沟通成本和设计速度。
有了ProBuilder这样的工具,因为它本身就是嵌入于Unity编辑器之中,只要你有基础的建模知识和Unity操作知识,就可以让游戏设计师用很短的学习时间掌握足够的技能,自己用Unity的工具来验证游戏设计和想法。这大大加快了游戏设计的速度。
另外,从游戏实现和美术素材制作迭代的角度来讲,我们完全可以用以下流程来加快迭代速度。
在Unity中用ProBuilder制作简单的模型完成场景的搭建。
通过FBX Exporter导出所制作的场景模型成FBX格式文件交给美术。
美术使用这些导出的场景模型,在指定的位置替换成精细模型,并添加纹理贴图和动画等。
在美术制作精细场景的时候,程序可以使用简单模型搭建的场景继续开发游戏玩法。
美术完成精细模型资产导入游戏完成最终游戏。
上述描述对于真实的游戏开发场景来讲,有好多不完整的地方,但是我想表达的要点是:ProBuilder这样的工具可以大大加快开发迭代周期,节省时间的同时大幅提高制作速度。