Skip to content

4 Character Physic Making 制作一个角色!

OneYoungMean edited this page Aug 2, 2020 · 13 revisions

4-Character Physic Making

在开始之前...

在经历了一大堆稀奇古怪概念的洗礼之后,我们终于来到了第四章了.
相比于DynamicBone,AutomaticDnamicBone的确是功能庞大且复杂. 不过,一切都是值得的,因为你很快就能见识到,在ADB的工作流当中,处理一个模型的流程比起前者实在是快太多.
为了方便诸位的学习,在场景4当中,我准备了两个用于训练的模型,并在旁边附上了参考答案.
这是最后的一篇教程与测试,我希望你们能抽出最后一点耐心,将它听完...

案例1-MikuV4XV3

'如果你需要在商业项目使用该模型,请联系https://www.deviantart.com/digitrevx'

1.找到你的目标骨骼的关键词

我们把注意力放到场景自带的miku模型上,这是一个很标准的模型,它的头发和裙子都很容易找到.
假设你并不知道头发以及裙子的名字,除了仔细翻子骨骼以外,一个很聪明的做法是翻一番角色的Avatar,通常这些额外的骨骼都会以灰色表示出来.
这里简单演示一下找到它们,并获得关键词hair,bang,以及skirt,下一步,我们将会告诉你怎么利用这些关键词.


2.生成节点数据并进行检查

检查目标需要添加物理效果的骨骼,通常这类骨骼名字都会包含一个固定的关键词,比如hair,skirt,你需要把关键词写入到 识别关键词 中,然后点击 生成节点数据 .
在生成完节点数据之后,节点会以黑色的形式绘制在sence当中,杆件也会绘制并以不同的颜色区分.
你需要检查以下生成的数据是否有遗漏和正确,在下一个模型当中我们会介绍到如何处理这类问题.


3.调整效果关联关键词文件(ADBGlobalSetting) 中的关键词以及对应的效果设置文件(ADBSetting)

在图中,我们可以看到,角色的 效果关联关键词文件(ADBGlobalSetting) 是确缺失的,如果你还不知道它是做什么的,请容许我介绍一下:
ADBglobalSetting文件负责将你的关键词与对应的 效果设置文件(ADBSetting) 文件联系起来,可以让你不同的关键词产生不同的效果.
我们与需要生成一份新的文件(建议非同类模型不要重复),然后选择自己想要的效果,并将不同种类骨骼代表的关键词填到相应的下方.
比如,隶属于头发的骨骼的关键词,你可以选择任意hair的效果(虽然可能并不满意,但是你可以换)并将关键词填到下面,你可以让多个关键词对应同一种效果.

  • 你可以默认不填,系统会自动读取默认的设置.
  • 即便你不添加关键词,使得其不与任何一个setting文件联系,系统也会生成一份默认的setting来关联,坏处就是多半会显得很滑稽.

4.生成骨骼数据

我们再回到设置面板,打开 所有节点坐标 ,可以看到不同的Setting文件与不同的节点对应情况.
此时,我们将ADBglobalSetting拖到设定中,然后再一次重新生成节点数据,可以看到,所有节点的列表中,hair对应的Setting文件已经被更换成ADBglobalSetting中的设定了.
是查看是否有遗漏的节点/错误的节点,如果一切没有问题的话,关于节点的所有工作就已经完成了.

  • 所以你不必每次调整都手动生成数据,脚本会在开始时自动运行 生成节点数据 .
  • 请不要尝试修改 所有节点坐标 中的数据,这没有任何作用,请按照正确的流程进行.

5.生成碰撞体与调整碰撞体

如果你的角色是Humanoid (换句话说,可以被unity识别为人形),那么你可以尝试下生成碰撞体的功能,这个功能可以自动识别人体并按照比例生成合适的碰撞体.
它的原理很简单,就是通过识别角色的IK设定,将全身主要的骨骼按照一定的比例计算出合适大小,然后再根据现有的节点数据进行调整.

  • 你需要勾选上_自动生成全身碰撞体_,然后选择生成碰撞体.
  • 如果你更新了数据,请先使用生节点数据的功能,再去尝试生成碰撞体(不正确的配置会导致报错),因为碰撞体需要节点的数据来保证它不会太过于大.
  • 另外,默认是采用_固定节点_作为参考点,你也可以勾选_参考全部的节点_来生成碰撞体.
  • 即便如此,你仍然要稍微调整一下它大小,确保不会有穿模的问题发生,这里我象征性的调节了一下,同时我们还有另外一种更加智能的方式操作....

6.另外一种修改碰撞体的方法

在图中,我们可以注意到,在盆骨的胶囊体超出了裙子太多.
并不是程序出了什么问题,而是你需要用到 碰撞体属性 这一设定来让它能够被裙子所识别到.
找到图中的胶囊体(如果你不是很熟练的话,你可以挨个翻一下XD),可以看到,它的碰撞体属性为'下半身'.
我们回到主界面,打开裙子的设定文件,翻到最底下,可以看到一个'接收以下种类的碰撞体'的设定,将下半身勾选上.
再次回到主界面,点击'删除所有碰撞体'(记得勾选同时删除脚本), 然后重新再生成一次.可以看到,新生成的盆骨的胶囊体刚好在裙子的内部,没有超出.

  • 在运行的过程中,该 碰撞体属性 将同样发挥作用,采用该Setting文件的节点与杆件将不会与非相同属性的碰撞体发生碰撞.
  • 除了自动生成的全身碰撞体以外,所有的新创建的碰撞体属性都是'其他'.

7.运行

大功告成,现在你可以运行你的场景查看物理了!
如果你不喜欢太多的线,你可以把绘制线的选项关掉.
此外,在主界面最下方,我们可以看到一个 碰撞模式 的选项,确保它不要是'不发生碰撞'即可.
如果一切顺利的话,在运行中的sence界面,你仍然可以看到几条彩色的线,祝贺你,你的角色已经拥有物理效果了!尽情摇晃你的目标吧XD
当然,通常你还需要手动调整一下物理的参数,以便符合你角色的数据,它们被存储在ADBsetting当中.你可以选择:
1.更换GlobalSetting当中关键词对应的setting文件以调整效果,我在其存储的文件夹下制作了好几个不同风格的物理效果,你可以切换他们.
2.调整其对应setting文件的参数,你可以在之前的教程找到详细的说明.
如果你是在运行过程中调整,那么再调整完毕之后,你需要借助_重置所有节点数据_按钮来刷新它们.

案例2-R1N4

  • 模型作者Kafuji,感谢它的授权,以及在此处获取更多的模型
    这个模型相比于案例1会有点难,因为作者在制作它的时候命名的方式比较奇怪,通过这个我们会说一下如何应对识别不全的问题.

1.找到关键词


2.生成点数据

在接触到错误的生成模式之前,我们需要稍微了解一下白名单与黑名单的规则
回到正文,当你直接识别的那一刻,会发现以下错误.

  • 由于hairroot节点带有hair关键词,因此被识别出来并错误的成为了_固定节点_ ,原本应该识别成固定节点的节点成为了其子节点,简单而言就是层级识别错误.
  • 由于发饰原本的父节点hairroot,被关键词hair读取成_固定节点_,导致之后没有被识别进去.
  • 原本裙子的root点同样被识别出来并错误的成为了_固定节点_.
  • elbow 节点被关键词bow错误的识别出来.
    因此,我们需要挨个挨个修复它.
    根据上面的白名单与黑名单的规则,我们需要
  • 将hairroot点添加到节点黑名单;
  • 将裙子的root点添加到节点黑名单;
  • 将elbow节点添加入关键词黑名单;
    然后再重新生成,可以看到,问题已经修复完成.
    这的确有点儿难,但是在了解规则之后,大部分情况你可以慢慢摸索并逐个解决,这并非什么难事.
    抱歉,由于中间太长了,我跳了一部分过去,这让图片看上去有点儿奇怪,见谅

3.生成碰撞体与运行

跳过设置GlobalSetting与Setting的步骤,接下来我们需要提到一个特殊的选项-节点的碰撞半径.
在这个特殊的模型当中,头发的骨骼只有一根,但是真实的部分却有三根.
为了避免穿模的现象,你可以指定节点的半径大小,找到Setting文件的 节点碰撞体积半径曲线,设置成理想的值.
怎么设置描述起来有点抽象,最开始被识别到的节点取x=0的值,最后的节点去x=1的值,中间的节点按其的深度等距离取值.
当你设置完以后,别忘了将主界面的碰撞模式修改为仅节点碰撞或者全体碰撞来打开它.