- 0
- 0
- 0
分享
- 布料缓存工作流程
-
2023-10-31
模拟好的Chaos布料可以缓存,具体方法参见下文。这是使用Take Recorder的一个实验性工作流程,未来还会更新,包括解决缓存过大的问题、完善多步骤过程以及修复相应的错误。
我们将使用Take Recorder模拟过程来缓存Chaos布料。首先,我们要创建一个关卡,将资产添加到关卡序列中,添加一个Chaos缓存管理器,它将与Take Recorder协同工作,然后生成缓存的模拟。
使用Take Recorder可以同步模拟缓存和添加到Sequencer中的动画。要录制缓存,可以将缓存管理器(见下文)设为录制,然后点击编辑器中的模拟/运行按钮。接着,你需要手动将缓存添加到Sequencer中,手动同步缓存和动画。使用Take Recorder可以避免手动调整。(参见下文关于密集模拟网格体的警告)
以下是我们将介绍的主要步骤:
关卡设置
Chaos缓存管理器
创建关卡序列
设置Take Recorder
缓存模拟
渲染布料缓存
加载Chaos缓存插件
首先,必须加载Chaos缓存插件,重启引擎。(虽然写的是Beta版本,但其实是一个实验性插件)
关卡设置
创建一个新的关卡——将角色添加到关卡中。在本文展示的例子中,我们将使用在Chaos布料Echo斗篷教程中创建的“BP_Echo3rdPersonCape”。
在关卡中添加一个电影摄影机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缓存管理器设为“静态”,然后用保存的缓存打开关卡序列。
点击“捕获影片”按钮生成影片。
失真布料状态修复
有时候(比如在模拟过程中)布料可能会卡在一个错误位置。要想重置姿势,一种方法是在“播放”和“录制”这两种缓存模式之间来回切换。
此外,还要确保你的文件已保存。有时候这也可以避免布料失真。
Take
Recorder状态不良
如果Take Recorder无响应,可能需要先关闭Take Recorder,再重新打开(重新加载你的关卡序列)。
有关缓存密集网格体的注意事项
缓存可能需要一段时间,请耐心等待(参加下文的“缓存阶段”)。
如果你使用的布料模拟网格体十分庞大,缓存大小可能非常大。(根据我们的经验,模拟网格体的顶点数量大约为10k+个,数量达到20k+就要注意了。)这是一个已知的问题,将来会解决。对于实时网格体来说,不需要考虑这些注意事项。
缓存阶段
在编辑器中点击“运行”,再在Take Recorder中点击“录制”。
—------日志-开始记录信息
等待右下角的Take Recorder信息消失。
—------日志-结束记录信息
等待保存最终的缓存。
在编辑器中停止模拟。
手动保存缓存集合。
这些阶段可能需要很长一段时间才能完成,具体取决于模拟网格体的分辨率和设置。
项目设置和配置
重要:对于分辨率非常高的网格体来说,可能要修改项目设置/配置文件,以确保能正确计算模拟。
在你的配置目录中是“DefaultEngine.ini”配置文件。将最大物理差量(MaxPhysicsDelta)调高,比如设为“10000”。这个值需要在配置文件中设置。
勾选“使用固定帧率”并设置一个值。
“使用固定时间步(UseFixedTimeStep)”有一个命令行选项。
重要!对于固定时间步来说,选择项目设置或命令行选项,不要同时选择两者。根据测试,同时启用两者会导致两者相互抵消。
分步
启用分步很重要。如果在上面使用剪切/粘贴,这个选项就会正确设置。
在编辑器中确认帧率固定在30fps(或者你设置的其他帧率),为此你可以使用视口中的“显示FPS”选项(Ctrl + Shift + H)。
最后说明
在虚幻引擎中缓存布料是一个循序渐进的过程。我们意识到目前的工作流程还存在限制和有待改进的地方,我们希望未来能解决这些问题。
-
阅读原文
* 文章为作者独立观点,不代表数艺网立场转载须知
- 本文内容由数艺网收录采集自微信公众号虚幻引擎 ,并经数艺网进行了排版优化。转载此文章请在文章开头和结尾标注“作者”、“来源:数艺网” 并附上本页链接: 如您不希望被数艺网所收录,感觉到侵犯到了您的权益,请及时告知数艺网,我们表示诚挚的歉意,并及时处理或删除。