3D模型和3D模型动画

举报
AIBooster 发表于 2019/11/06 09:19:34 2019/11/06
【摘要】 在Unity3D中,MeshRenderer 与 SkinnedMeshRenderer 分别用于渲染 3D模型 和 3D模型动画。普通网格(MeshRenderer)渲染的是模型,由3D模型数据组成,蒙皮网格(SkinnedMeshRenderer)渲染的也是模型,也是由3D模型数据组成。不过蒙皮网格被创造出来主要是为了动作动画服务的,所以蒙皮网格除了3D模型数据外还有骨骼数据以及顶点权重...

在Unity3D中,MeshRenderer 与 SkinnedMeshRenderer 分别用于渲染 3D模型 和 3D模型动画。

普通网格(MeshRenderer)渲染的是模型,由3D模型数据组成,蒙皮网格(SkinnedMeshRenderer)渲染的也是模型,也是由3D模型数据组成。不过蒙皮网格被创造出来主要是为了动作动画服务的,所以蒙皮网格除了3D模型数据外还有骨骼数据以及顶点权重数据。

如果蒙皮网格(SkinnedMeshRenderer)上没放置任何骨骼数据,那么它和普通网格的作用没有任何区别,都只能渲染静止不动的3D模型。

3D模型要做动作,首先是模型上的点/线/面要动起来,只有点/线/面动起来了,在每帧渲染的时候才能在每帧渲染时有不同的3D模型形状。

/线/面动起来有两种方法:(1) 用算法来改变顶点位置,叫顶点动画; (2) 用骨骼机制去影响顶点,叫骨骼动画。这两种方法都是通过每一帧改变模型上的各个顶点位置,从而让模型变形形成动画的效果,每一帧模型的形状不一样,播放时形成动画,只是方法不同。

顶点动画:

模型上成千上万的顶点,如果每个都要手动来调整,每一帧都要手动调整一次,这种量级的劳动力,人类无法承受,所以在最初,还没有骨骼动画这个概念的时候,只能用程序写一个顶点走向算法去改变每个顶点的位置,或者用着色器(Shader)在顶点函数中去改变顶点位置成为动画效果,这种动画效果现在很多游戏中都还在使用,这种方法已经成为节省骨骼动画开销的必要手段,比如草、树在风中的左右摆动,丝带或国旗在空中自然飘动等。

骨骼动画:

由简单的几个骨骼点组成,一般骨骼动画的骨骼数量都不会超过50个,是人类能够承受的操控范围之内。

首先,骨骼动画由骨骼点组成,每个骨骼动画可以由许多个骨骼,现代手机游戏中每个人物的骨骼动画的数量一般都会在30个左右,PC单机游戏中会更多点到达40-50个左右。骨骼数量越多,表现出来的动画越细腻越有质感,但同时也消耗掉更多的CPU计算。

其次,一个骨骼可以有很多个子骨骼,每个子骨骼都与父节点拥有相同的功能,只是当父节点移动、旋转、缩放时子节点也随着父节点的一起移动、旋转、缩放,他们的相对位置、相对角度、相对比例不变。父子节点有着相对位置的关系。

在SkinnedMeshRenderer中就由bones来记录所有骨骼点,骨骼点的表现在SkinnedMeshRenderer中就是 Transform 数组,因此 bones 这个变量就是 Transform[] 类型。

另外,一个骨骼点可以影响周围一定范围内的所有顶点。每个单一顶点也可以受到多个骨骼的影响。在Unity3D中的Quality setting图形质量设置中,我们可以看到关于Blend Weights的设置,就是关于一个顶点能被多少骨骼影响的参数设置,可选1Bone、2Bones、4Bones,被影响的骨骼数越多,CPU消耗在骨骼计算蒙皮的时间越长,消耗量越大。同时,模型中每个顶点都维护有影响其本身的最多4个骨骼的权重值,在Unity3D中这4个骨骼权重被记录在了BoneWeight这个类中。每个Mesh类都有一个boneWeights变量来记录所有顶点的骨骼权重值,BoneWeight中boneIndex0、boneIndex1、boneIndex2、boneIndex3分别代表被影响的骨骼索引值,而weight0、weight1、weight2、weight3则是分别代表被影响的权重值,权重最大为1,最小为0,所有权重分量之和为1。

 

转自 <http://www.luzexi.com/2019/04/27/Unity3D%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B%E4%B9%8B%E8%BF%9B%E9%98%B6%E4%B8%BB%E7%A8%8B-3D%E6%A8%A1%E5%9E%8B%E4%B8%8E%E5%8A%A8%E7%94%BB5.html>


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。