目前的换装方案主要有:
实现参考
SkinMeshRender改变模型Transform无效是因为模型上的顶点位置已经是实时通过骨骼位置和权重实时计算出来的。所以对Unity中带有skinMeshRenderer组件的GameObject进行移动,旋转等操作,并不会影响模型的最终渲染。
参考的核心代码
该代码没有对mesh进行优化,可以对skinmeshrender进行合并来优化,减少recall,优化采用CombineInstance对mesh进行合并
代码根据性别加载主骨架,再根据角色装扮信息读取各部件资源中的所有蒙皮信息生成新的Mesh,将Mesh与子物体中所有的bones,materials赋予父物体的SkinnedMeshRenderer中。
官方的换装粒子,不修改代码不能再unity5中运行。换装原理是更改蒙皮和合并mesh。换装时有内存泄露。原因是并没有从内存中清除(AssetBundle),不断的更换就会在内存中不断的累加。
UMA分为改变Wardrobe(换装),Color(皮肤颜色),DNA(设置骨骼(T-pose)矩阵) 换装的核心原理为更改蒙皮+合并mesh。 SkinnedMeshCombiner.cs–>CombineMeshes 会合并骨骼和顶点MergeSortedTransforms(按照hash的大小排序骨骼)把所有的顶点合并成一个mesh
制作的所有衣服基于同一套完整骨骼,导出的时候导出衣服和衣服所受影响的那些骨骼,动画可以不需要。
有二种方式。一是用Blendshape(融合变形),通常用于面部动画,直接修改顶点。二就是用骨骼驱动,采用修改骨骼矩阵的方式影响SkinMesh。二种方式最终的目的都是修改顶点。
How the software does this blending, as explained by some of the other answers written here, is achieved by the delta or the differences in shape between the target expressions and the base shape. Maya keeps track of how much each vertex is displaced in relation to the original Base shape. Thus when the animator blends or morphs the expression in, Maya translates those vertices towards the final positions as described by that particular BlendShape.
Since Maya compares the base shape and the BlendShape objects vertex for vertex, we should always maintain consistency in vertex count, vertex order or topology across all BlendShapes.
UMA的骨骼男女角色层次结构一样为
人物骨骼一共158块骨骼
UMADynamicCharacterAvatar
-Root
--Global
---Position
----Hips
-----LowerBack
------LowerBackAdjust
-------LowerBackBelly
------Spine
-------Spine1
--------Neck
---------Head
----------RightEar
-----------RightEarAdjust
----------RightEye
-----------RightLowerLid
------------RightLowerLidAdjust
-----------RightEyeAdjust
-----------RightUpperLid
------------RightUpperLidAdjust
-----------RightEyeGlobe
----------RightLipsSuperiorMiddle
-----------RightLipsSuperiorMiddleAdjust
----------LeftLipsSuperiorMiddle
-----------LeftLipsSuperiorMiddleAdjust
----------RightEyebrowLow
-----------RightEyebrowLowAdjust
----------NoseBase
-----------NoseBaseAdjust
----------RightLowCheek
-----------RightLowCheekAdjust
----------LipsSuperior
-----------LipsSuperiorAdjust
----------RightNose
-----------RightNoseAdjust
----------HeadAdjust
----------LeftEyebrowMiddle
-----------LeftEyebrowMiddleAdjust
----------LeftEar
-----------LeftEarAdjust
----------LeftEye
-----------LeftEyeAdjust
-----------LeftEyeGlobe
-----------LeftUpperLid
------------LeftUpperLidAdjust
-----------LeftLowerLid
------------LeftLowerLidAdjust
----------LeftNose
-----------LeftNoseAdjust
----------NoseTop
-----------NoseTopAdjust
----------RightCheek
-----------RightCheekAdjust
----------NoseMiddle
-----------NoseMiddleAdjust
----------UpperLips
-----------UpperLipsAdjust
----------LeftEyebrowUp
-----------LeftEyebrowUpAdjust
----------RightEyebrowUp
-----------RightEyebrowUpAdjust
----------LeftCheek
-----------LeftCheekAdjust
----------Mandible
-----------LeftLipsInferior
------------LeftLipsInferiorAdjust
-----------RightLowMaxilar
------------RightLowMaxilarAdjust
-----------RightLips
------------RightLipsAdjust
-----------LipsInferior
------------LipsInferiorAdjust
-----------MandibleAdjust
-----------RightLipsInferior
------------RightLipsInferiorAdjust
-----------Tongue01
------------Tongue02
-----------LeftLips
------------LeftLipsAdjust
-----------LeftLowMaxilar
------------LeftLowMaxilarAdjust
----------RightEyebrowMiddle
-----------RightEyebrowMiddleAdjust
----------LeftLowCheek
-----------LeftLowCheekAdjust
----------LeftEyebrowLow
-----------LeftEyebrowLowAdjust
---------NeckAdjust
--------RightOuterBreast
---------RightInnerBreast
--------RightShoulder
---------RightTrapezius
---------RightArm
----------RightArmAdjust
----------RightForeArm
-----------RightForeArmAdjust
-----------RightForeArmTwist
------------RightForeArmTwistAdjust
-----------RightHand
------------RightHandFinger03_01
-------------RightHandFinger03_02
--------------RightHandFinger03_03
------------RightHandFinger05_01
-------------RightHandFinger05_02
--------------RightHandFinger05_03
------------RightHandFinger04_01
-------------RightHandFinger04_02
--------------RightHandFinger04_03
------------RightHandFinger02_01
-------------RightHandFinger02_02
--------------RightHandFinger02_03
------------RightHandFinger01_01
-------------RightHandFinger01_02
--------------RightHandFinger01_03
---------RightShoulderAdjust
--------LeftOuterBreast
---------LeftInnerBreast
--------Spine1Adjust
--------LeftShoulder
---------LeftShoulderAdjust
---------LeftTrapezius
---------LeftArm
----------LeftForeArm
-----------LeftHand
------------LeftHandFinger04_01
-------------LeftHandFinger04_02
--------------LeftHandFinger04_03
------------LeftHandFinger01_01
-------------LeftHandFinger01_02
--------------LeftHandFinger01_03
------------LeftHandFinger02_01
-------------LeftHandFinger02_02
--------------LeftHandFinger02_03
------------LeftHandFinger03_01
-------------LeftHandFinger03_02
--------------LeftHandFinger03_03
------------LeftHandFinger05_01
-------------LeftHandFinger05_02
--------------LeftHandFinger05_03
-----------LeftForeArmTwist
------------LeftForeArmTwistAdjust
-----------LeftForeArmAdjust
----------LeftArmAdjust
-------SpineAdjust
-----LeftUpLeg
------LeftLeg
-------LeftLegAdjust
-------LeftFoot
--------LeftToeBase
------LeftUpLegAdjust
------LeftGluteus
-----RightUpLeg
------RightGluteus
------RightLeg
-------RightFoot
--------RightToeBase
-------RightLegAdjust
------RightUpLegAdjust
用于修改DNA的骨骼有一共74块,其中Adjust骨骼大部分为单位矩阵,skinMesh大部分绑定在这些可修改的骨骼上,在名为***adjust骨骼上没有动画数据,UMA2动画采用avatar人形骨骼系统进行重定向。
用于调整的骨骼有:
HeadAdjust
NeckAdjust
LeftOuterBreast
RightOuterBreast
LeftEye
RightEye
LeftEyeAdjust
RightEyeAdjust
Spine1Adjust
SpineAdjust
LowerBackBelly
LowerBackAdjust
LeftTrapezius
RightTrapezius
LeftArmAdjust
RightArmAdjust
LeftForeArmAdjust
RightForeArmAdjust
LeftForeArmTwistAdjust
RightForeArmTwistAdjust
LeftShoulderAdjust
RightShoulderAdjust
LeftUpLegAdjust
RightUpLegAdjust
LeftLegAdjust
RightLegAdjust
LeftGluteus
RightGluteus
LeftEarAdjust
RightEarAdjust
NoseBaseAdjust
NoseMiddleAdjust
LeftNoseAdjust
RightNoseAdjust
UpperLipsAdjust
MandibleAdjust
LeftLowMaxilarAdjust
RightLowMaxilarAdjust
LeftCheekAdjust
RightCheekAdjust
LeftLowCheekAdjust
RightLowCheekAdjust
NoseTopAdjust
LeftEyebrowLowAdjust
RightEyebrowLowAdjust
LeftEyebrowMiddleAdjust
RightEyebrowMiddleAdjust
LeftEyebrowUpAdjust
RightEyebrowUpAdjust
LipsSuperiorAdjust
LipsInferiorAdjust
LeftLipsSuperiorMiddleAdjust
RightLipsSuperiorMiddleAdjust
LeftLipsInferiorAdjust
RightLipsInferiorAdjust
LeftLipsAdjust
RightLipsAdjust
Global
Position
LowerBack
Head
LeftArm
RightArm
LeftForeArm
RightForeArm
LeftHand
RightHand
LeftFoot
RightFoot
LeftUpLeg
RightUpLeg
LeftShoulder
RightShoulder
Mandible
优点:可以控制的非常细微捏脸变化。
缺点:Blendshape在捏脸制作上工作量非常大,我想把一个结构捏的多么细微就要制作多少张脸,这个细微度和工作量是成正比的。这样会导致后期修改不方便,更重要的是性能消耗非常大。另外跟我们第三方动画软件不兼容。
优点:制作量比较少,性能消耗相对少些,和现有动画系统兼容,另外捏脸骨骼和动画骨骼是同一套骨骼,就通过MorphemeConnect动画软件跟面部骨骼做了融合。当你捏出来任何形状的脸都可以套用同一个动画,这样也减少很大的工作量。
缺点:权重分配受限较多,捏练的细致程度有限。
脸型(或体型)调整原理就是:
本质上修改的是骨骼的Local Transform(Translation, Rotation, Scale)
一次只修改Local Transform的某个分量(或多个):Tx/Ty/Tz/Rx/Ry/Rz/Sx/Sy/Sz
使用滑杆在预设的调节范围之间进行插值
插值不一定是线性的, 可能是有多个关键帧
每个调节项可能对应不只一根骨骼
参考制作:
https://docs.unrealengine.com/latest/CHN/Engine/Content/FBX/MorphTargets/index.html
http://jjyy.guru/unity-animation
文章浏览阅读1w次,点赞4次,收藏38次。Python读取Excel使用openpyxl库来控制excel文件(即.xlsx为后缀的文件)。这里介绍一下excel数据的结构。打开excel文件后生成一个workbook(工作簿)每个工作簿中包含多张表单worksheet正在操作的表单被称为活跃表单active sheet对于某一特定行和列的小格子称为单元格cell安装使用pip安装,pip install openpyxl简单的步骤import openpyxl # 导入openpyxl模块wb = openpyxl.loa_python打开或创建.xlsx文件,并获取活动表单
文章浏览阅读1.5k次。进阶篇—Soft Actor-Critic (SAC)SAC是一个off-policy + actor critic + maximum entropy的RL算法。比DDPG,SVG等方法稳定并且效果更好。代码参见我的GitHub前言1、on-policy 与 off-policy:on-policy:“边交互边学习” ,每一次参数更新时,都需要与环境交互,因而当遇到复杂任务时,需要的更新步骤更多,增大了复杂度off-policy :“重用过去的经验”,典型的就是经验池策略的方法,比如DQN,DD_soft actor critic 为什么需要两个网络
文章浏览阅读203次。看过一次spring公开课,记录一下bean的循环引用问题。问题:public class IndexService{ @Autowired IndexDao indexDao;}public class IndexDao{ @Autowired IndexService indexService;}以上的实例中IndexService依赖..._spring bean循环引用
文章浏览阅读3.1k次。Docker结合Jenkins部署vue项目接上篇Vue项目没什么好说的,在本地一般使用vue ui启动vue管理的前端,然后在里面进行启动Vue官方说可以不通过ngin来部署,但是如果上生产环境,建议还是要走nginx安装nginx这里安装过程不再赘述,如果不清楚可以参考下面这篇文章https://blog.csdn.net/qq_42815754/article/details/8..._docker jenkins vue-cli
文章浏览阅读1.1k次,点赞2次,收藏15次。Redis—redis结合lnmp架构做mysql的缓存服务器文章目录一 、redis结合lnmp架构做mysql的缓存服务器实现读写分离(一)在server1中配置nginx(二)在server2中配置redis(三)在server3上安装mysql(四)建立php和redis,mysql的连接(五)浏览器访问测试一 、redis结合lnmp架构做mysql的缓存服务器实现读写分离读写分离..._redis+mysql读写分离流程
文章浏览阅读1.1k次。zabbix-agent被动模式变为主动模式配置server2:[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf 98 Server=172.25.83.1139 ServerActive=172.25.83.1 #主动模式下,需要配置的。123 # StartAgents=3浏览器:配置——>模板——>Te..._zabbixmoban改为主动模式
文章浏览阅读1.7w次,点赞22次,收藏11次。此类型错误,需要更改为其temp中name数组的长度,在scanf_s中需要添加,在scanf中不需要。_0x00007fffbd9cac87 (ucrtbased.dll)处(位于 mysql c++连接.exe 中)引发的异常: 0
文章浏览阅读181次。本文转载自 InfoQ 网站作者:唐刘策划:赵钰莹原文链接:https://www.infoq.cn/article/bxGvrb_CxAZD6Wv3fUj8作为一个分布式数据库,TiDB 面临的严重挑战在于如何让用户相信存储在 TiDB 里面的数据是安全的,不会出现丢失,损坏等情况..._唐刘 tidb
文章浏览阅读536次。仿微信页面平移跳转,android中的Activity跳转动画_android13车载系统使用activity跳转动画
文章浏览阅读7.9k次,点赞2次,收藏8次。问题: 客户或供应商因多种业务,需要多个统御科目1、特殊总账 SGL一个客户或供应商或资产默认只有一个统驭科目,F-02记账的时候,若不选特别总账标示,则记账在主记录中的统驭科目中,一般为应收应付。若关于此客户、供应商、资产等有非应收应付业务发生时,比如预收、预付、信用证、保证金等,此时记账虽然记账在客户供应商上,但不需要记账在往来科目上,此时就需要选择特别总账_sap特别总账科目调账
文章浏览阅读355次。在上一篇中提到过ViewPager通常和Fragment一起使用来达到View的切换效果。为此google也提供了两个与Fragment的适配器。分别为 FragmentPagerAdapter与FragmentStatePagerAdapter。前者会缓存三个Fragment。后者在我们切换不同的Fragment的时候,我们会把前面的Fragment销毁。但会把我们的我们Fragment的Bund_fragment viewpage2获取子fragment
文章浏览阅读1.1w次,点赞4次,收藏3次。萌新记录一下安装pytest后在pycharm中运行出现的错误,及解决方法问题本人萌新一个,一开始还以为自己pytest和pycharm安装的盘不一样导致的,全部卸了重安,网上的解决方案也试了全部没用,最后找了朋友帮忙。其实只是命名有问题,pytest的文件名称必须为test_.py或_test.py我之前的名称中有空格所以出现问题,修改之后就没有问题了感谢朋友,记录这个小问题..._pycharm控制台执行“pytest” 报错:assert mod not in mods