核心概念
Caution
ai 生成,可能叙事逻辑和表述并不是很好,仅供参考。
Ranim 将动画定义为可按任意时间采样的值,并通过 closed core + open leaves 的方式组织场景:
Eval<Output = T> visual leaf content
-> IntoAnimNode default lowering (linear / 1s / enabled)
-> Paramed<A> / At<A> playback params / placement
-> AnimSequence / AnimStack / AnimLagged
-> AnimNode { timing shell, NodeContent }
-> SealedRanimScene -> SceneEvaluator
- 定义期(open):叶子实现
Eval;容器/Sugar 位于animation::compose,通过IntoAnimNodelower 到运行时。 - 运行期(closed):所有定义都 lower 成
AnimNode,其NodeContent是封闭的核心语言(Sequence、Stack、Leaf、Static、Audio)。视觉求值、音频烘焙、preview introspection 都是这棵树上的 interpreter。 Eval、IntoAnimNode、容器与运行时 描述叶子动画如何根据局部进度产生状态、附加播放参数,以及顺序 / 并行 / 交错容器如何把场景组织成动画树。CoreItem与Extract描述动画求值结果如何经Extract展开为渲染器消费的 core item。- Core Items 逐个介绍三种 core item(
CameraFrame、VItem、MeshItem)的字段与渲染语义。 RanimScene的根节点是一个AnimStack。r.play(animation)等价于向根 Stack 执行push,因此多次根级play默认从 0 秒并行。
新模型不维护 Scene 内可变的 TimelineId 或运行时物件表。需要独立生命周期的内容由各自的 AnimSequence 持有,最后通过 Stack 组合。