当前位置: 首页 > wzjs >正文

网站建设公司伟置设计灵感

网站建设公司伟置,设计灵感,揭阳市php网站开发找工作,口碑好的家装前十强我是一名资深的游戏客户端,没事的时候我就想手搓轮子 本文目标 搓一个骨骼动画的核心实现,促进理解骨骼动画本质 骨骼动画简介 官方解释上网搜或者问豆包 快速理解 想知道骨骼动画怎么个事要先知道模型是怎么个事 简单来说:模型 顶点数…

我是一名资深的游戏客户端,没事的时候我就想手搓轮子

本文目标

搓一个骨骼动画的核心实现,促进理解骨骼动画本质

骨骼动画简介

官方解释上网搜或者问豆包

快速理解

想知道骨骼动画怎么个事要先知道模型是怎么个事
简单来说:模型 = 顶点数据 + 三角形 + 材质
骨骼动画 = 模型 + 骨骼权重数据
骨骼权重数据是编辑器下由美术编辑出来的数据,指明某个顶点受到几根骨骼影响,每个骨骼权重是什么
在unity里,骨骼就是transform

思路

  • 在unity里自己实现一个组件,自己做骨骼对顶点的影响,完成蒙皮
  • 骨骼的transform驱动还靠unity的Animation,在自己的组件里获取骨骼transform就够了
  • 参照SkinnedMeshRenderer设计自己的组件
  • 骨骼动画核心公式,求顶点位置:skinnedVertex = 加权求和(骨骼local2world矩阵 * 顶点初始位置矩阵 * vertex * weight)
  • 只要能拿到顶点,骨骼transform,顶点初始位置矩阵,权重数据,就可以求出来模型某个顶点在动画中某一帧的位置

准备数据

  • 模型,fbx模型文件的mesh
  • 获取骨骼
深度遍历根骨骼的子节点是不行的,里面有用不上的transform不是骨骼,得解析fbx模型文件
FBX模型文件里有骨骼数据形如:Deformer: "SubDeformer::Cluster DummyMesh B-hips", "Cluster"
解析fbx费事,不是核心代码,用SkinnedMeshRenderer的接口bones获取
  • 权重数据,用Mesh的boneWeights接口,一个顶点最多受到4个骨骼影响,基本够用
  • 顶点初始位置矩阵,用Mesh的bindposes接口获得

开搓

using UnityEngine;namespace HotPlayer.Demos
{[ExecuteInEditMode]public class HotSkinnedMeshRenderer : MonoBehaviour{public Mesh mesh;public Material material;public bool castShadow = true;public bool receiveShadow = true;public bool useLightProbes = true;private Mesh skinnedMesh;private Vector3[] vertices;private BoneWeight[] boneWeights;private Transform[] bones;void Start(){skinnedMesh = Instantiate(mesh);skinnedMesh.name = mesh.name + "_Skinned";boneWeights = skinnedMesh.boneWeights;vertices = skinnedMesh.vertices;bones = gameObject.GetComponent<SkinnedMeshRenderer>().bones;}private void OnDestroy(){if (skinnedMesh != null){if (Application.isPlaying){Destroy(skinnedMesh);}else{DestroyImmediate(skinnedMesh);}}}private void UpdateVertices(){for (var i = 0; i < boneWeights.Length; i++){BoneWeight boneWeight = boneWeights[i];Vector3 vertex = mesh.vertices[i];Vector3 skinnedVertex = Vector3.zero;var index = boneWeight.boneIndex0;Transform bone;if (index > 0){bone = bones[index];var boneMatrix = bone.localToWorldMatrix * mesh.bindposes[index];skinnedVertex += boneMatrix.MultiplyPoint3x4(vertex) * boneWeight.weight0;}index = boneWeight.boneIndex1;if (index > 0){bone = bones[index];var boneMatrix = bone.localToWorldMatrix * mesh.bindposes[index];skinnedVertex += boneMatrix.MultiplyPoint3x4(vertex) * boneWeight.weight1;}index = boneWeight.boneIndex2;if (index > 0){bone = bones[index];var boneMatrix = bone.localToWorldMatrix * mesh.bindposes[index];skinnedVertex += boneMatrix.MultiplyPoint3x4(vertex) * boneWeight.weight2;}index = boneWeight.boneIndex3;if (index > 0){bone = bones[index];var boneMatrix = bone.localToWorldMatrix * mesh.bindposes[index];skinnedVertex += boneMatrix.MultiplyPoint3x4(vertex) * boneWeight.weight3;}vertices[i] = skinnedVertex;}skinnedMesh.vertices = vertices;skinnedMesh.RecalculateBounds();skinnedMesh.RecalculateNormals();}void Update(){#if UNITY_EDITORif (Application.isPlaying)DrawSkinMesh();elseGraphics.DrawMesh(mesh, transform.localToWorldMatrix, material, 0, null, 0, null, castShadow, receiveShadow, useLightProbes);
#elseDrawSkinMesh();
#endif}private void DrawSkinMesh(){UpdateVertices();Graphics.DrawMesh(skinnedMesh, transform.localToWorldMatrix, material, 0, null, 0, null, castShadow, receiveShadow, useLightProbes);}}
}

结语

点赞超64就再搓一个GPU版骨骼蒙皮动画

所以说学习好啊,得学啊,因为真男人必会手搓轮子


文章转载自:

http://8RaH5792.rfLjb.cn
http://sB5dBWhW.rfLjb.cn
http://lGOI3KwB.rfLjb.cn
http://tFX4Amim.rfLjb.cn
http://odKNXrgh.rfLjb.cn
http://Dhk4uFs8.rfLjb.cn
http://NwHgfiIC.rfLjb.cn
http://rGCYE7Ij.rfLjb.cn
http://y9s5ozKe.rfLjb.cn
http://raHRmr0Q.rfLjb.cn
http://qFRt4AT1.rfLjb.cn
http://5uD1k17H.rfLjb.cn
http://wdNUUg9q.rfLjb.cn
http://ZlYJT3Rz.rfLjb.cn
http://67tJAyyZ.rfLjb.cn
http://w1rcccs3.rfLjb.cn
http://cPHukfZk.rfLjb.cn
http://txq1fTne.rfLjb.cn
http://Z02QupOR.rfLjb.cn
http://F6bHzGYI.rfLjb.cn
http://eKgTDCfD.rfLjb.cn
http://GsfqMWYT.rfLjb.cn
http://Hf93QaLD.rfLjb.cn
http://NEnySS8H.rfLjb.cn
http://owRJKgKp.rfLjb.cn
http://QN3F05Uy.rfLjb.cn
http://ddv4rURq.rfLjb.cn
http://kXCJfyNs.rfLjb.cn
http://uNUVMsw6.rfLjb.cn
http://jUdM0hgp.rfLjb.cn
http://www.dtcms.com/wzjs/719505.html

相关文章:

  • 宿州高端网站建设公司哪家好网络营销产生的基础包括
  • 做网站放广告收益使用python做网站
  • 网站开发的教学视频教程如何提高网站的转化率
  • 纪检网站建设安卓优化大师hd
  • 网站备案和域名备案区别seo0577
  • 鑫牛元网站建设wordpress登录短信验证码
  • 如何做网站后台怎么做网站备份
  • 花乡做网站公司wordpress文章部分展示
  • 只做网站的模仿大型门户网站做ppt
  • 网站怎么在成都备案商城系统平台有哪些
  • 建一个自己的网站有什么用网站用php做的吗
  • 重庆知名商城网站建设公司室内设计师联盟官网入口
  • 网站根目录网站宣传推广平台
  • 英文网站的外部链接 建设马来西亚做公路投标网站
  • 寻找外贸客户的网站网站建设技术人员要会什么
  • 庆阳网站设计公司龙之向导免费网站
  • 音乐类网站建设选题背景php网站的优势
  • 那个网站销售好旅游电子商务与网站建设
  • 做建材商城网站北京手机网站制作
  • 做全国性的app网站推广多少阿里云网站备份
  • 东莞建设网站官网住房和城乡资料手机建站官网
  • 天津网络优化网站建设上海网页制作模板
  • 电商网站开发北京天津建网站
  • 开发区全力做好网站建设vps做网站
  • 星锐网站建设网页的功能有哪些方面
  • 安庆网站制作做教育行业网站
  • cms做网站不用后端优化是什么意思
  • 宿州网站制作网站设计制作一条龙
  • 阿里云建设网站费用ui和网页设计
  • 顺德网站建设jinqiye品牌加盟网