草庐IT

UE中动画的Retarget基本操作

cgsgood 2023-03-28 原文

UE4中有一个Retarget Manager,在UE5中不存在了,操作方式有些改变
此处记录一下UE5 Retarget的操作步骤

1. Animation Retarget目的

复用不同骨架上的动画文件

基本思路:

  • 把Source Skeleton的动画文件,利用关键骨骼bone的映射,映射到Target Skeleton上。
  • 映射完后,Target Skeleton就可以播放Source Skeleton上的动画文件(如Animation Sequence、Montage)

主要流程如下:

A=>start: 准备好2套骨骼
op_a=>operation: 新增2套IK Rig(对应2套骨骼)
op_b=>operation: 配置IK Rig映射的骨骼
op_c=>operation: 选择要导出的source动画
op_d=>operation: 在target skeleton中播放动画
e=>end: 完结

A->op_a->op_b->op_c->op_d->e

2. 创建和配置IK Rig骨骼映射文件

2.1 建立IK Rig文件

Content Broswer空白处右键建立IK Rig。

建立2个,一个Source Skeleton,一个Target Skeleton

选择IK Rig对应的Skeleton

配置映射的关系:映射名 开始骨骼 结束骨骼

Chain Name Start Bone End Bone
head neck_01 head
arm_l clavicle_l hand_l
arm_r clavicle_r hand_r
leg_l thigh_l foot_l
leg_r thigh_r foot_r
spine spine_01 spine_03

在IK Rig中,设置从pelvis开始重定向(从root开始重定向的话,可能会产生高度不一样的问题)

2.2 建立IK Retargeter文件

  • Step 2.2.1 在Content Broswer空白处右键建立IK Retargeter(选择Source Skeleton)

  • Step 2.2.2 选一下Target IKRig Asset(刚刚配置的IK Rig)

  • Step 2.2.3 打开刚刚创建的IK ReTargeter

    • 在【Chain Mapping】点一下Auto-Map Chains,绑定映射对应关系
    • 在【Asset Browser】中,选择动画,点Export Selected Animations即可
  • Step 2.2.4 打开在Target Skeleton,可以在里面播放刚刚Export的动画了。

上述步骤,针对没有Root Motion的动画,可以完美匹配。
如果涉及Root Motion,需要额外再设置一下。

3. Retarget Root Motion

3.1 首先,确保完成了2. 创建和配置IK Rig骨骼映射文件

3.2 source IK Rig和target IK Rig的重定向的骨骼,从root开始

3.3 source IK Rig和target IK Rig的再添加2组chain:root和pelvis

Chain Name Start Bone End Bone
root root root
root root root

3.4 IK_Retargeter文件中,把选中root和pelvis chain中的 [FK Adjustments | Translation Mode]改成"Globally Scaled"

3.5 重新导出一遍,就可以看到动画带有Root Motion了

4. 参考资料

https://www.youtube.com/watch?v=5Or8yQ_QecQ
https://dev.epicgames.com/community/learning/tutorials/l0mK/unreal-engine-root-motion-animation-retargeting-manny-to-metahuman
https://www.youtube.com/watch?v=f_qhtpIsapo

友情链接:

blog: https://www.cgsgood.tech/ue_retarget
语雀: https://www.yuque.com/cgsgood/dshx0b/hgzp2d
博客园: https://www.cnblogs.com/cgsgood/articles/16857410.html

有关UE中动画的Retarget基本操作的更多相关文章

  1. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  6. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  7. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  8. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  9. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  10. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

随机推荐