mcwind's blog

游戏开发 Unity3d catia二次开发,协同设计流程,多学科设计仿真
posts - 37, comments - 6, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

三维游戏引擎——Unity 角色模型优化要点续:换肤和导入

Posted on 2011-02-21 01:44 mcwind 阅读(...) 评论(...) 编辑 收藏

在上一篇Unity角色模型优化要点中,我主要是翻译了官方的原文,并加了少量自己的注释。随后,经过这几天对角色换肤的测试,总结出一些建模和导入的要点,供大家参考。

所谓角色换肤也就是游戏中常见的角色自定制功能:玩家开始游戏前,一般需要创建一个游戏角色,选择性别、容貌、发型等等。进入游戏后,就可以操作自己创建的角色做出行走、跳跃、攻击等动作。很多游戏还允许玩家在中途变换发型甚至改变体态(例如升级后肌肉变得发达)等等。下图就是WOW中角色选择的画面示例。

image

从游戏开发者的角度来看,由于可定制元素排列组合的结果非常多,不可能事先将所有结果都一个一个建出来并施加动作。所以必须采取分部位建模,然后通过编程控制,在游戏中将用户选择的各部位重新组合成完整角色。这个制作流程大致包括下列几步:

步骤 执行人员(建议)
1.规划换肤区域 策划
2.制作标准模型 美工
3.制作动作 动作
4.制作可替换部位的模型 美工
5.导出标准模型和动作 程序
6.导出可替换部位的模型 程序
7.在Unity中导入上述模型 程序
8.编写控制代码 程序

1.规划换肤区域

这主要是一项策划工作。负责策划的朋友应该事先规划好角色的哪些身体部位可以替换,并作出原图,方便美工和动作进行设计。需要注意一点就是,对于可能经常离开人体的对象,例如盔甲、武器等,不应包括在内。

2.制作标准模型

标准模型就是包含了角色网格、骨骼和动作的模型。策划设计的角色可能有多种组合方案,但美工可以随便选取其中一种来做标准模型。标准模型的用途有两个,首先是美工可以基于它制作余下的各种可选部位的模型;其次在游戏中程序也是通过替换标准模型中的某一部分来完成换装的。在3DS Max中制作标准模型要点是:

  • 必须包含全套骨骼和一张带蒙皮的网格。只有包含骨骼和蒙皮的模型导入Unity后才能作为后续编程的基础。注意网格必须有且仅有一张,但其形状可以随便。因为最后我们用到的只是骨骼,这张蒙皮的作用仅仅是导入时触发Unity的一个自动功能而已(美工不必关心,我就不展开说了)。它最后会在换肤时被替换掉的。
  • 必须为每块骨骼用英文取一个好识别的名字(拼音也行)。因为后续程序要用到这些名字,太怪异程序员兄弟难理解,中文或太长也不利于程序处理。
  • 材质和动作可有可无,按美工自己的喜好来就行。反正材质导入Unity后还得重新设,动作全部做在一个文件里或者分开文件单独做Unity都能正确识别;
  • 角色最好站立在原点,这样便于导入Unity后定位;
  • 文件最好干净点,不要包含不必要的几何或其他元素。
  • Max里角色身高方向一般是Z向,而Unity里面是Y向。所以为了导入Unity后好用,可以在Max里就把角色建成身高沿Y向,面朝Z向。不过这样美工可能觉得别扭,不做强求,Unity导入后加个旋转也能解决。
  • 单位的问题。Max里按1单位=1米或者1单位=1厘米都可以,导入Unity的时候可以选缩放比例的。

3.制作动作

动作师应该基于标准模型的骨骼来制作角色的全套动作。把所有动作做在一个文件里或者分开做在多个文件里都可以。Unity导入的时候处理下就行了,详见7节。

特别说明一下,有些文章说制作动作时不能使用IK。其实是可以的,对此官方也有说明。只要导出前处理下就行。详见5节。

4.制作可替换部位的模型

美工应该基于标准模型的骨骼来制作角色的各个可替换部位,并将该部位的蒙皮做好。每个部位只能包含一张网格和一个材质。看美工的喜好,既可以把所有部位都做在一个文件里,也可以分开做。反正导出的时候人工控制好一个一个分开就行了。至于接缝什么的美工应该懂得怎么处理好。

5.导出标准模型和动作

Unity接收FBX格式的文件。如果程序懂一点max的话,我建议导出工作都让程序来做,省得导不合适的话反复传文件,当然美工来导也是可以的。

标准模型需要导出的是蒙皮和骨骼,如果包含动画的话也可以导出动画。我在3DS Max8中的导出FBX设置如下图

image

 

注意:如果骨骼动作使用了IK,导出前需要做一下处理,否则导入Unity后动不了。选择所有骨骼和IK,然后在“运动”面板中选“轨迹”,在下面点“塌陷”按钮,就可以创建基于关键帧的动作。然后再把所有IK节点删除,检查下动作正常,就可以继续导出了。

如果动作时单独做在其他文件里的,那么打开该文件,仅导出动画和骨骼,按如下设置导出。

image

注意导出的FBX文件名必须参考标准模型按规则来取。假设标准模型导出FBX文件取名叫AAA.fbx ,那么动作导出的FBX取名就必须以AAA@开头,例如AAA@jump.fbx, AAA@kick.fbx等等。

6.导出可替换部位的模型

可替换部位的模型主要导出网格蒙皮和材质。导的时候注意一个fbx应该只包含一个部位。导出设置如下图

image

7.在Unity中导入上述模型

标准模型、动作和各部位的FBX都导好后,就可以将它们放置到Unity游戏工程目录的Assets目录下了。Unity会自动检查文件并导入它们。该环节主要注意2点

  • 不要把所有fbx都放在Assets根目录下。应该建立一些便于管理的子目录来存放。
  • 如果一个fbx包含多个动作的,记得在Unity项目视图中选择该fbx文件对应的节点,在面板中设置各段动作的起始帧、结束帧位置,让Unity将动作分段提取出来。

8.编写控制代码

参见我以前的文章Unity中网格合并示例研究