From b1e854275294d0ed750a32264c7346f7684e6740 Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Thu, 23 May 2024 20:32:12 +0800 Subject: [PATCH] vault backup: 2024-05-23 20:32:12 --- .../various-complements/histories.json | 2 +- .../Sequence/Sequence Runtime Binding.md | 35 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.obsidian/plugins/various-complements/histories.json b/.obsidian/plugins/various-complements/histories.json index 31ae34a..9a1d4ef 100644 --- a/.obsidian/plugins/various-complements/histories.json +++ b/.obsidian/plugins/various-complements/histories.json @@ -1 +1 @@ -{"128044539":{"128044539":{"currentFile":{"count":1,"lastUpdated":1714359212233}}},"StartLiveDirector:启动Bat文件":{"StartLiveDirector:启动Bat文件":{"currentFile":{"count":1,"lastUpdated":1713845438773}}},"Tools:一些第三方库,以及":{"Tools:一些第三方库,以及":{"currentFile":{"count":1,"lastUpdated":1713845507638}}},"LiveDirector:导播台。":{"LiveDirector:导播台。":{"currentFile":{"count":1,"lastUpdated":1713846588874}}},"Python:小工具,":{"Python:小工具,":{"currentFile":{"count":1,"lastUpdated":1713847220779}}},"HotKeyManager:快捷键相关,可以通过配置实现。":{"HotKeyManager:快捷键相关,可以通过配置实现。":{"currentFile":{"count":1,"lastUpdated":1713948483286}}},"MotionProcessor:导播台,动捕":{"MotionProcessor:导播台,动捕":{"currentFile":{"count":1,"lastUpdated":1714027644634}}},"启动青瞳客户端。右下一。":{"启动青瞳客户端。右下一。":{"currentFile":{"count":1,"lastUpdated":1714027880674}}},"MapEnvironment.Bat修改Server":{"MapEnvironment.Bat修改Server":{"currentFile":{"count":1,"lastUpdated":1714028106908}}},"StreamDock":{"StreamDock":{"currentFile":{"count":1,"lastUpdated":1714033564310}}},"添加道具、物品、场景、特效":{"添加道具、物品、场景、特效":{"currentFile":{"count":1,"lastUpdated":1714036023017}}},"OutlinePass":{"OutlinePass":{"internalLink":{"count":1,"lastUpdated":1715346170348}}},"JNCustomAssetEd:定义修型资产":{"JNCustomAssetEd:定义修型资产":{"currentFile":{"count":1,"lastUpdated":1715827692229}}},"GreenScreen":{"GreenScreen":{"currentFile":{"count":1,"lastUpdated":1715843645080}}},"Character":{"Character":{"currentFile":{"count":1,"lastUpdated":1715848900346}}},"定义了·FGuid":{"定义了·FGuid":{"currentFile":{"count":1,"lastUpdated":1715915171873}}},"(例如Idol.BeiLa)。以及FollowingSocketName":{"(例如Idol.BeiLa)。以及FollowingSocketName":{"currentFile":{"count":1,"lastUpdated":1716192086731}}},"DirectorCamera为场景相关的相机(静态镜头)。":{"DirectorCamera为场景相关的相机(静态镜头)。":{"currentFile":{"count":1,"lastUpdated":1716192192053}}}} \ No newline at end of file +{"128044539":{"128044539":{"currentFile":{"count":1,"lastUpdated":1714359212233}}},"HotKeyManager:快捷键相关,可以通过配置实现。":{"HotKeyManager:快捷键相关,可以通过配置实现。":{"currentFile":{"count":1,"lastUpdated":1713948483286}}},"MotionProcessor:导播台,动捕":{"MotionProcessor:导播台,动捕":{"currentFile":{"count":1,"lastUpdated":1714027644634}}},"启动青瞳客户端。右下一。":{"启动青瞳客户端。右下一。":{"currentFile":{"count":1,"lastUpdated":1714027880674}}},"MapEnvironment.Bat修改Server":{"MapEnvironment.Bat修改Server":{"currentFile":{"count":1,"lastUpdated":1714028106908}}},"StreamDock":{"StreamDock":{"currentFile":{"count":1,"lastUpdated":1714033564310}}},"添加道具、物品、场景、特效":{"添加道具、物品、场景、特效":{"currentFile":{"count":1,"lastUpdated":1714036023017}}},"OutlinePass":{"OutlinePass":{"internalLink":{"count":1,"lastUpdated":1715346170348}}},"JNCustomAssetEd:定义修型资产":{"JNCustomAssetEd:定义修型资产":{"currentFile":{"count":1,"lastUpdated":1715827692229}}},"GreenScreen":{"GreenScreen":{"currentFile":{"count":1,"lastUpdated":1715843645080}}},"Character":{"Character":{"currentFile":{"count":1,"lastUpdated":1715848900346}}},"定义了·FGuid":{"定义了·FGuid":{"currentFile":{"count":1,"lastUpdated":1715915171873}}},"(例如Idol.BeiLa)。以及FollowingSocketName":{"(例如Idol.BeiLa)。以及FollowingSocketName":{"currentFile":{"count":1,"lastUpdated":1716192086731}}},"DirectorCamera为场景相关的相机(静态镜头)。":{"DirectorCamera为场景相关的相机(静态镜头)。":{"currentFile":{"count":1,"lastUpdated":1716192192053}}},"ECS资料":{"ECS资料":{"currentFile":{"count":1,"lastUpdated":1716465594941}}}} \ No newline at end of file diff --git a/03-UnrealEngine/Sequence/Sequence Runtime Binding.md b/03-UnrealEngine/Sequence/Sequence Runtime Binding.md index b634663..0ec8aba 100644 --- a/03-UnrealEngine/Sequence/Sequence Runtime Binding.md +++ b/03-UnrealEngine/Sequence/Sequence Runtime Binding.md @@ -11,10 +11,19 @@ rating: ⭐ 参考: 1. [sequencer mute tracks at runtime from c](https://forums.unrealengine.com/t/sequencer-mute-tracks-at-runtime-from-c/476278/3) +2. 其他参考 + 1. [Actor Rebinding in Blueprints with Sequencer(官方文档)]https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/Sequencer/HowTo/AnimateDynamicObjects/ + 2. [Level Sequence actor rebinding in C++](https://www.reddit.com/r/unrealengine/comments/btk1uz/level_sequence_actor_rebinding_in_c/) +3. Sequence ECS资料 + 1. [大规模内容的性能保障:虚幻引擎4.26中的Sequencer(官方文档)](https://www.unrealengine.com/zh-CN/tech-blog/performance-at-scale-sequencer-in-unreal-engine-4-26) + 2. [UE4.26(5.0)后的Sequence系统](https://zhuanlan.zhihu.com/p/589465561) + 3. [UE5 Sequence 浅-浅-析](https://zhuanlan.zhihu.com/p/676690043) +4. ECS资料 + 1. [一文看懂ECS架构]https://zhuanlan.zhihu.com/p/618971664 可行思路: 1. 给导播创建一个快捷键(Hotkey),之后在触发根据Tag切换对应角色动画蓝图中的逻辑。 -2. 使用Sequence的EventTrack设置若干事件。 +2. [x] 使用Sequence的EventTrack设置若干事件。 3. 模改UMovieSceneSkeletalAnimationTrack,实现一个可以自动根据Tag捕获对应角色并且播发动画的功能。 # 方案一 @@ -464,4 +473,26 @@ Runner->QueueUpdate(Context, RootTemplateInstance.GetRootInstanceHandle(), FSimp ``` ## SequenceRecorder -SequenceRecorder模块的基类是ISequenceRecorder。 \ No newline at end of file +SequenceRecorder模块的基类是ISequenceRecorder。 + +# Sequencer ECS +## 使用ECS的原因 +**可伸缩性** +如果使用新的运行时,应该能够编写包含成百上千个轨道或序列的内容,并且将这些内容作为一个整体来优化求值逻辑。这包括: +- 分配和组织数据,使性能不会随着活动Sequencer轨道的增加而快速恶化。 +- 能够完全删除已知不再需要的逻辑和分支,不必在每一帧都为它们付出成本。没有代码就是最快的代码。这条原则应该适用于Sequencer求值代码的所有方面,而不仅限于最高级。 +- 求值逻辑应该能够直接、高效且不受阻碍地批量访问必要数据,而不必通过复杂或低效的抽象与内存交互。 + +**并发性** +写入求值逻辑应该很简单,而且天然就能安全而高效地扩展到多个核心,包括上游/下游依赖性的表达定义(例如,并行地对所有曲线求值)。由于具备仅设置一次管线的综合优点,这不仅能让许多轻量级的小型动画受益,也有益于非常大的序列。 + +**可扩展性** +应该可以在内置功能的基础上构建逻辑,而不必重新实现核心系统。添加与核心系统交互的上游或下游功能应该是可以合理实现的。这包括: +- 在管线中的任何位置,当前帧的所有数据都应该是透明且可改变的。 +- 可靠的依赖性管理。 + +这些设计目标,再加上Sequencer本身的各种问题,使得采用[数据导向的设计](https://en.wikipedia.org/wiki/Data-oriented_design)原则成为自然而然的选择,理由如下: +- 大部分Sequencer数据是同质的,可以循序布局。 +- 每种数据变换的逻辑通常具有非常高的独立性,与情境无关(即运行函数f(x)来得到曲线)。 +- 控制和数据流是非常线性的,没有循环或递归的依赖性(也就是说,没有一种逻辑会要求重新计算已经计算出的数值)。 +- 只有初始设置和最终属性设置器才有线程限制。 \ No newline at end of file