UE5布料缓存工作流程
39756 5
实名

通过了实名认证的内容创造者

发布于 2023-11-2 14:56:27

您需要 登录 才可以下载或查看,没有账号?注册

x

模拟好的Chaos布料可以缓存,具体方法参见下文。这是使用Take Recorder的一个实验性工作流程,未来还会更新,包括解决缓存过大的问题、完善多步骤过程以及修复相应的错误。
我们将使用Take Recorder模拟过程来缓存Chaos布料。首先,我们要创建一个关卡,将资产添加到关卡序列中,添加一个Chaos缓存管理器,它将与Take Recorder协同工作,然后生成缓存的模拟。
使用Take Recorder可以同步模拟缓存和添加到Sequencer中的动画。要录制缓存,可以将缓存管理器(见下文)设为录制,然后点击编辑器中的模拟/运行按钮。接着,你需要手动将缓存添加到Sequencer中,手动同步缓存和动画。使用Take Recorder可以避免手动调整。(参见下文关于密集模拟网格体的警告)
以下是我们将介绍的主要步骤:关卡设置Chaos缓存管理器创建关卡序列设置Take Recorder缓存模拟渲染布料缓存

加载Chaos缓存插件
首先,必须加载Chaos缓存插件,重启引擎。(虽然写的是Beta版本,但其实是一个实验性插件)

38f796c79217e89d0d1d067f3cfaba8e.png

关卡设置
创建一个新的关卡——将角色添加到关卡中。在本文展示的例子中,我们将使用在Chaos布料Echo斗篷教程中创建的“BP_Echo3rdPersonCape”。

a62e71cae3db5a4049843c5ea3a22f5f.png




在关卡中添加一个电影摄影机Actor。
不一定要这么做,但如果使用根运动,设置一台摄像机跟随动作会很有帮助,尤其是在逐个镜头运行的时候。还可以用于使用影片渲染队列进行渲染。



为斗篷添加风的效果。



编辑摄像机(和风)。别忘了调整光圈。调整风的强度/风速——旋转蓝色箭头改变方向。






Chaos缓存管理器
将Chaos缓存管理器添加到关卡中。Actor->Chaos->创建Chaos缓存管理器(在文件对话框中保存缓存)。只有选中角色蓝图,“Actor”下拉菜单中才会显示这个选项。









缓存集合通过Actor下拉菜单创建Chaos缓存管理器时,系统会提示你为新建的Chaos集合资产设置路径和名称。录制好之后,这个新资产将包含播放模拟需要的一切,但千万不能删除或移动录制组件引用的资产!Chaos集合内部引用了这些对象,如果找不到这些对象,它就没法工作。
缓存集合——刚刚在内容浏览器中创建的资产。如有需要,可以把它改成其他可录制的资产(假设你正在录制多个版本)。缓存模式——在缓存管理器中,缓存模式可以设为静态姿势、播放或录制。录制时,当然要把它设为录制。而在播放时要将它设为静态姿势。开始模式、开始时间——录制时保留默认值。观察的组件——这里的每个元素分别代表要记录到缓存中的每个组件。如果发生错误,请先检查这些数据是否准确,再执行其他操作。“IsSimulating(正在模拟)”标记应反映关卡中Actor的状态。在这里记录是因为在录制和播放缓存时,缓存管理器会在组件上操纵该状态。我们要知道静止状态是什么,以便在缓存管理器操作完之后将组件恢复成该状态。通常情况下,这个标记都处于启用状态。
观察的组件必须确保Chaos缓存管理器的“软组件引用”指向正在模拟的正确组件。5.2中的设置不正确。5.3已经改正,但是最好再检查一下。
创建关卡序列
由于我们将使用Take Recorder来生成布料缓存,事先创建一个关卡序列会很有帮助。如果你已经创建过关卡序列,可以直接跳转到设置Take Recorder部分。









创建一个空白的关卡序列。



保存新建的关卡和关卡序列。接下来,我们要在关卡序列中添加Actor。






在关卡序列中添加Actor关卡序列->+轨道->Actor到Sequencer将Actor添加到我们创建的关卡序列中添加摄像机添加角色添加动画(添加风)










添加Echo蓝图



选择+轨道 - 添加CharacterMesh0






添加动画



这个动画片段的时间很短,我们要延长动画,延长缓存时间。



延长动画片段。在这个例子中,动画将循环播放,从而增加缓存的帧数。



现在,我们已经添加好关卡序列需要的所有元素。保存关卡、关卡序列和Chaos缓存合集(如有需要)。
双击内容浏览器中的关卡序列,重新打开这个关卡序列(如果没有在另一个选项卡中打开)。
测试关卡序列 - 在编辑器中模拟和运行,观察风对斗篷的影响。(需要使用“模拟”来模拟风对布料的影响)
设置Take Recorder
打开Take Recorder。窗口->过场动画->Take Recorder参阅Take Recorder文档了解详情:https://docs.unrealengine.com/5.1/zh-CN/take-recorder-in-unreal-engine/



此时你可能会发现,之前创建和保存的关卡序列消失了。我们要通过Take Recorder界面重新加载之前保存的关卡序列。






使用第三个按钮来选择加载/设置之前保存的关卡序列。打开序列到录入




现在,我们已经通过Take Recorder加载之前保存的关卡序列。可能需要拖动时间轴上的滑块,重新评估编辑器。



将Chaos缓存管理器添加到Take Recorder中在Take Recorder中,将Chaos缓存管理器Actor添加到Take Recorder源中。
源->来自Actor->Chaos缓存管理器






我们只需要Chaos缓存轨道。不要勾选“开始时间(StartTime)”。



检查Take Recorder设置(齿轮图标蓝色高亮显示就能打开下列设置)。



设置录制时钟源“设置录制时钟源”是一项很重要的设置。如果按指定和固定帧率运行模拟(参见下文“关于缓存密集网格体的注意事项——项目设置和配置”),Tick、平台和相对时间码都可以提供适当的缓存生成长度来匹配动画播放。
“音频”和“自定义”尚未经过测试。“时间码”会改变关卡序列中的时间轴,因此不建议使用。“播放每一帧”是一项独特的设置,需要你手动缩放已完成的缓存轨道,以匹配Sequencer动画的长度,但是可能需要模拟不按固定速率播放的密集网格体。
以下内容截取自Take Recorder文档:Tick:使用默认的世界Tick差量来计时。响应世界和Actor暂停状态,但可能容易受到累加错误的影响。平台:使用平台时钟来计时。不响应世界和Actor暂停状态。音频:使用音频时钟来计时。不响应世界和Actor暂停状态。相对时间码:使用相对于时间码提供者的时间来计时。不响应世界和Actor暂停状态。时间码:使用当前的时间码提供者来计时。不响应世界和Actor暂停状态。播放每一帧:一种调试模式,在前进到下一帧之前,每一帧将保持Sequencer.SecondsPerFrame秒。不响应世界和Actor暂停状态以及时间膨胀。音频也不会同步。自定义:在外部创建和定义的自定义时钟源。
设置录制时钟源–Tick



可选:设置录制时钟源–播放每一帧



确保勾选“录制到可拥有”



在大纲中双击Chaos缓存管理器节点。“缓存模式”应设为录制(RECORD)



缓存模拟
目前,缓存过程分为两个步骤。我们要先强制编辑器进行模拟,再点击Take Recorder中的录制按钮,不过未来这两个步骤会合并。如果不在编辑器中点击模拟,就无法缓存像风这样的关卡效果。
缓存:先点击编辑器中的模拟按钮(激活风的效果)。



再点击Take Recorder中的录制按钮。



Chaos缓存管理器将在关卡序列中生成缓存。
缓存完成后,在编辑器中点击停止模拟按钮。你可以在关卡序列中看到缓存,如果布料缓存不大,你还可以在Sequencer中来回拖动时间轴上的滑块。缓存数据保存在Chaos布料集合文件(和Chaos布料管理器实例保存在一起)中。你要手动保存缓存文件。
静态姿势缓存完成后,缓存模式会自动变为“静态姿势”。虽然名称不是很直观,但它的意思是指缓存已被设为在Sequencer中播放。



绘制缩略图(可选)在摄像机Sequencer轨道中关闭(右键单击摄像机切换轨道),以节省性能开销。



Sequencer轨道时间尺度如上所述,如果模拟使用的录制时钟源是“播放每一帧”,则对齐轨道末尾和红色记录线。这可以是一个变化的值。在这个例子中,我们将偏移值设为6(右键单击缓存轨道->属性->时间尺度),同步缓存轨道和动画轨道的结尾。由于布料网格体模拟和处理器速度有所不同,可能需要设置不同的值。



重新模拟缓存
如果想重新模拟缓存,可以右键单击关卡序列中的Chaos缓存管理器轨道,此时会弹出一个上下文菜单。删除选项在中间位置。现有模拟可能无法正确重置,具体取决于删除缓存的时间帧。参见下文的“失真布料状态修复”。
通过删除缓存轨道而不是重新模拟,可以正确并强制将Chaos缓存管理器的“缓存模式”重置成录制(RECORD)。
重置后,你就可以重复上面的缓存模拟步骤,生成一个新的缓存。
渲染布料缓存
重要!!!目前,为了使用缓存渲染模拟,必须关闭Take Recorder。否则,MRQ或旧的影片创建者将会重新模拟并覆盖你的缓存。这是一个已知的问题。
在此之前,请先保存关卡、关卡序列和Chaos缓存集合。
然后在细节面板中,将Chaos缓存管理器设为“静态”。
最后,重新打开用于创建布料模拟缓存的关卡序列,然后运行MRQ或旧版渲染器。
使用影片渲染队列(MRQ)渲染首先要加载影片渲染队列插件。



MRQ的FFmpeg设置强烈建议你为影片渲染队列安装ffmpeg编码器。它可以自动利用渲染图像生成一段影片。https://dev.epicgames.com/community/learning/tutorials/BbYV/unreal-engine-how-to-use-ffmpeg-with-the-command-line-encoder-in-movie-render-que



双击“设置”列的“未保存配置*(Unsaved Config*)”,将命令行编码器(和FFmpeg编码器)添加到你的影片渲染队列中。



点击左上角的“+设置”按钮,选择“命令行编码器”。点击右下角的“接受”按钮返回影片渲染队列对话框。
现在,你可以点击影片渲染队列对话框右下角的“渲染(本地)”或“渲染(远程)”按钮生成影片。
使用影片场景捕获(旧版)渲染影片使用影片场景捕获(旧版)渲染与使用MRQ渲染相同,除了添加FFmpeg编码器的选项。关闭Take Recorder,确保关卡序列已关闭。将Chaos缓存管理器设为“静态”,然后用保存的缓存打开关卡序列。






点击“捕获影片”按钮生成影片。
失真布料状态修复
有时候(比如在模拟过程中)布料可能会卡在一个错误位置。要想重置姿势,一种方法是在“播放”和“录制”这两种缓存模式之间来回切换。
此外,还要确保你的文件已保存。有时候这也可以避免布料失真。
TakeRecorder状态不良
如果Take Recorder无响应,可能需要先关闭Take Recorder,再重新打开(重新加载你的关卡序列)。
有关缓存密集网格体的注意事项
缓存可能需要一段时间,请耐心等待(参加下文的“缓存阶段”)。如果你使用的布料模拟网格体十分庞大,缓存大小可能非常大。(根据我们的经验,模拟网格体的顶点数量大约为10k+个,数量达到20k+就要注意了。)这是一个已知的问题,将来会解决。对于实时网格体来说,不需要考虑这些注意事项。
缓存阶段在编辑器中点击“运行”,再在Take Recorder中点击“录制”。—------日志-开始记录信息等待右下角的Take Recorder信息消失。—------日志-结束记录信息等待保存最终的缓存。在编辑器中停止模拟。手动保存缓存集合。

这些阶段可能需要很长一段时间才能完成,具体取决于模拟网格体的分辨率和设置。
项目设置和配置重要:对于分辨率非常高的网格体来说,可能要修改项目设置/配置文件,以确保能正确计算模拟。
在你的配置目录中是“DefaultEngine.ini”配置文件。将最大物理差量(MaxPhysicsDelta)调高,比如设为“10000”。这个值需要在配置文件中设置。
勾选“使用固定帧率”并设置一个值。






“使用固定时间步(UseFixedTimeStep)”有一个命令行选项。重要!对于固定时间步来说,选择项目设置或命令行选项,不要同时选择两者。根据测试,同时启用两者会导致两者相互抵消。
分步启用分步很重要。如果在上面使用剪切/粘贴,这个选项就会正确设置。



在编辑器中确认帧率固定在30fps(或者你设置的其他帧率),为此你可以使用视口中的“显示FPS”选项(Ctrl + Shift + H)。



最后说明
在虚幻引擎中缓存布料是一个循序渐进的过程。我们意识到目前的工作流程还存在限制和有待改进的地方,我们希望未来能解决这些问题。动。


全文完

评分

参与人数 1元素币 +4 活跃度 +5 展开 理由
hsk1102 + 4 + 5 天下武功出少林,世界资源入元素。

查看全部评分

本帖被以下画板推荐:

内容主要涵盖影视特效,CG动国,前沿CG技术,作品欣賞
使用道具 <
liushuoye  发表于 2023-11-2 16:46:11  
2#
回复 收起回复
使用道具
仰空越梦  发表于 2023-11-2 20:24:07  
3#
不错  感谢感谢!!~
回复 收起回复
使用道具
花落  发表于 2023-11-3 11:00:26  
4#
沙发!
回复 收起回复
使用道具
chriszhou  发表于 2023-12-6 09:13:13  
5#
好资源
回复 收起回复
使用道具
y6552547  发表于 2023-12-12 09:02:07  
6#
UE5布料缓存
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表