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

深圳最简单的网站建设家居网站建设全网营销

深圳最简单的网站建设,家居网站建设全网营销,wordpress图片懒加载,嵌入式系统开发GPU骨骼动画视频介绍#xff1a; GPU顶点动画和GPU骨骼动画实现原理及优缺点对比 性能优化 GPU动画是实现万人同屏的前置条件#xff0c;在之前的文章中已介绍过GPU顶点动画的实现方法#xff1a;【Unity】渲染性能开挂GPU Animation, 动画渲染合批GPU Instance_skinmeshren…GPU骨骼动画视频介绍 GPU顶点动画和GPU骨骼动画实现原理及优缺点对比 性能优化 GPU动画是实现万人同屏的前置条件在之前的文章中已介绍过GPU顶点动画的实现方法【Unity】渲染性能开挂GPU Animation, 动画渲染合批GPU Instance_skinmeshrender合批-CSDN博客 GPU顶点动画的优缺点 GPU顶点动画是将每一帧动画的Mesh顶点/法线存入贴图在Shader中直接读取顶点/法线使用。 优点由于没有过多的计算因此性能较高 缺点如果一个模型有多个SkinnedMeshRenderer需要先合并Mesh 生成的动画/法线贴图较大不支持切换挂载武器 GPU骨骼动画的优缺点 GPU骨骼动画是将每一帧动画的所有骨骼的矩阵信息存入贴图每一个顶点至多受4根骨骼影响在Shader中用这4根骨骼的矩阵和4根骨骼对应的蒙皮权重对顶点位置和法线进行变换得到受骨骼影响后的顶点/法线值。 优点动画贴图很小无需合并Mesh支持挂载武器切换 缺点需要一定计算量因此性能比顶点动画略低 GPU骨骼动画实现 一读取骨骼数据生成动画贴图Mesh 1. 获取蒙皮动画的骨骼信息 可通过SkinnedMeshRenderer的rootBone查找到根骨骼或者直接使用bones字段该字段为SkinnedMeshRenderer关联的所有骨骼的Transform数组 2. 从动画曲线获取每个动画帧记录的骨骼Transform数值 以获取动画每帧的骨骼位置为例 private Vector3 GetBonePositionAtTime(string bonePath, AnimationClip clip, float animTime) {var localPosXCurve EditorCurveBinding.FloatCurve(bonePath, typeof(Transform), m_LocalPosition.x);var localPosYCurve EditorCurveBinding.FloatCurve(bonePath, typeof(Transform), m_LocalPosition.y);var localPosZCurve EditorCurveBinding.FloatCurve(bonePath, typeof(Transform), m_LocalPosition.z);Vector3 pos Vector3.zero;pos.x AnimationUtility.GetEditorCurve(clip, localPosXCurve).Evaluate(animTime);pos.y AnimationUtility.GetEditorCurve(clip, localPosYCurve).Evaluate(animTime);pos.z AnimationUtility.GetEditorCurve(clip, localPosZCurve).Evaluate(animTime);return pos; } 3. 将骨骼矩阵写入动画贴图 把矩阵的前3行数值以骨骼个数为偏移量分别写入动画贴图 for (int boneIdx 0; boneIdx bones.Length; boneIdx){var bone bones[boneIdx];bool noBone bone.GetComponentMeshRenderer() ! null;if (!noBone bone.TryGetComponentSkinnedMeshRenderer(out var sMeshRender) sMeshRender.rootBone null){noBone true;}var boneMatrix bone.localToWorldMatrix;if (!noBone){boneMatrix * bonesW2LMatrices[boneIdx];}animBoneTex.SetPixel(boneIdx, curFrameIndex, boneMatrix.GetRow(0));animBoneTex.SetPixel(bonesCount boneIdx, curFrameIndex, boneMatrix.GetRow(1));animBoneTex.SetPixel(bonesCount * 2 boneIdx, curFrameIndex, boneMatrix.GetRow(2));} 4. 将每个动画的开始帧/结束帧、动画时常、动画是否循环播放的信息写入动画贴图的最后一列像素  生成的骨骼动画贴图 5. 生成Mesh网格 有了骨骼信息的动画贴图还需要知道每个顶点受哪些骨骼影响才能在Shader中取到对应的骨骼信息对顶点和法线进行变换 为了节省资源和读取方便我们可以直接把顶点关联的4根骨骼以及每根骨骼的权重分别塞到Mesh的UV2和UV3两个通道。 二、GPU骨骼动画Shader实现 1. 从动画贴图中解析当前动画的起始/结束帧根据是否Loop来计算出当前动画帧 2. 以当前帧为动画贴图采样的V坐标采样获取所有骨骼矩阵每行数值构建骨骼矩阵并计算顶点/法线 3.  通过自定义函数得到转换后的顶点坐标和法线并应用到GPU骨骼动画shader: 这样就完成了GPU骨骼动画功能切换动画时传入动画Index和当前时间Time.time动画片段将自动从起始帧开始播放并且完美支持动画是否循环。对于在骨骼上挂载的武器无论是MeshRenderer还是SkinnedMeshRenderer都完美支持因为挂载武器的节点Transform本身也作为骨骼写入到了动画贴图Shader中会自动通过骨骼的Local2WorldMatrix对顶点进行变换自然而然武器就会跟着骨骼动。
http://www.w-s-a.com/news/261618/

相关文章:

  • 如何取消网站备案佛山网站优化公司
  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云
  • 大连零基础网站建设教学电话有哪些比较好的做ppt好的网站
  • 哪个网站做logo设计我的建筑网
  • php电子商务网站开发沂源手机网站建设公司
  • html和php做网站哪个好3gcms企业手机网站整站源码asp
  • 网站建设网页设计案例云南建设厅网站删除
  • 杏坛网站制作太原做网站要多少钱呢
  • 做新闻类网站还有市场吗东莞黄页网广告
  • 地方网站做外卖专业做互联网招聘的网站有哪些
  • 网站推广公司兴田德润紧急网页升级紧急通知
  • 厦门做网站哪家强企业网站网页设计的步骤
  • 普拓网站建设济南行业网站建设
  • 燕郊 网站开发网站里的地图定位怎么做
  • 门户网站建设招标互联网创业项目概述
  • 用什么做网站比较好市场调研公司是做什么的
  • 电商网站充值消费系统绍兴网站优化
  • 深圳网站建设公司联虚拟币交易网站开发
  • 专业网站设计建设公司抖音代运营公司排名前十强
  • 做网站架构肃北蒙古族自治县建设局网站
  • 推广网站怎么建经济研究院网站建设方案
  • 网站建设商家淘宝客自建网站做还是用微信qq做
  • django做网站效率高吗涉县移动网站建设报价
  • 做外贸网站注册什么邮箱能够做渗透的网站
  • 购物网站 怎么做织梦网站会员功能
  • 北京市网站开发公司郑州联通网站备案