vault backup: 2024-05-23 20:32:12

This commit is contained in:
2024-05-23 20:32:12 +08:00
parent a9ba97ead5
commit b1e8542752
2 changed files with 34 additions and 3 deletions

View File

@@ -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。
SequenceRecorder模块的基类是ISequenceRecorder。
# Sequencer ECS
## 使用ECS的原因
**可伸缩性**
如果使用新的运行时,应该能够编写包含成百上千个轨道或序列的内容,并且将这些内容作为一个整体来优化求值逻辑。这包括:
- 分配和组织数据使性能不会随着活动Sequencer轨道的增加而快速恶化。
- 能够完全删除已知不再需要的逻辑和分支不必在每一帧都为它们付出成本。没有代码就是最快的代码。这条原则应该适用于Sequencer求值代码的所有方面而不仅限于最高级。
- 求值逻辑应该能够直接、高效且不受阻碍地批量访问必要数据,而不必通过复杂或低效的抽象与内存交互。
**并发性**
写入求值逻辑应该很简单,而且天然就能安全而高效地扩展到多个核心,包括上游/下游依赖性的表达定义(例如,并行地对所有曲线求值)。由于具备仅设置一次管线的综合优点,这不仅能让许多轻量级的小型动画受益,也有益于非常大的序列。
**可扩展性**
应该可以在内置功能的基础上构建逻辑,而不必重新实现核心系统。添加与核心系统交互的上游或下游功能应该是可以合理实现的。这包括:
- 在管线中的任何位置,当前帧的所有数据都应该是透明且可改变的。
- 可靠的依赖性管理。
这些设计目标再加上Sequencer本身的各种问题使得采用[数据导向的设计](https://en.wikipedia.org/wiki/Data-oriented_design)原则成为自然而然的选择,理由如下:
- 大部分Sequencer数据是同质的可以循序布局。
- 每种数据变换的逻辑通常具有非常高的独立性与情境无关即运行函数f(x)来得到曲线)。
- 控制和数据流是非常线性的,没有循环或递归的依赖性(也就是说,没有一种逻辑会要求重新计算已经计算出的数值)。
- 只有初始设置和最终属性设置器才有线程限制。