ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TiXL 节点详解:BlendVector3——多向量循环插值(Lerp)混合器

TiXL 节点详解:BlendVector3——多向量循环插值(Lerp)混合器 TiXL 节点详解BlendVector3——多向量循环插值Lerp混合器【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3本文以 TiXL 开源实时动态图形软件tooll3内置节点BlendVector3Lib.numbers.vec3命名空间为核心完整解析其输入输出、底层插值算法与多输入收集机制并结合仓库源码 BlendVector3.cs 说明它如何把单个标量F拆解为循环索引 混合相位实现对任意数量三维向量位置、方向、缩放等的无缝循环过渡。读完本文你将掌握该节点的全部参数语义、与LerpVec3的选型差异以及用曲线或振荡器驱动F制作循环位移动画的完整方法。节点概览BlendVector3 究竟做什么根据官方文档 BlendVector3.md 的定义Blends (lerps) two vectors.—— 在两个向量之间做线性混合lerp。与常见的两点 lerp 不同BlendVector3 的实现实际上支持任意多个输入向量它在输入列表上以F为游标循环寻址先锁定两个相邻向量再在二者之间按小数相位做线性插值。F每增加 1游标就前移一个向量当F超出输入数量时自动回绕wrap around形成可无限循环的过渡序列。该节点属于 Lib.numbers.vec3 数字运算子命名空间输出类型为System.Numerics.Vector3可直接驱动 TiXL 中任何接受 Vector3 的输入例如对象位置Translation、网格Scale、旋转轴向量等。输入与输出参数速查原文档给出了节点完整的参数契约下表在此基础上补充了类型、默认值与语义说明名称相关性 / 类型说明VectorsVector3 必需多输入槽参与混合的向量序列可连接任意数量的 Vector3 信号源多输入由MultiInputSlotVector3实现详见下文FSingle浮点标量混合游标整数部分决定选中序列中的哪一对相邻向量小数部分决定两者间的混合比例默认值0.0Result输出System.Numerics.Vector3混合结果类型与输入一致节点会话默认值记录在 BlendVector3.t3 中Vectors默认{X:0, Y:0, Z:0}F默认0.0。未连接任何输入时输出为Vector3.Zero。核心算法剖析F 如何被分解为索引 相位BlendVector3 的求值逻辑非常精炼完整实现位于 BlendVector3.csResult.Value Vector3.Zero; var collectedTypedInputs Vectors.GetCollectedTypedInputs(); var count collectedTypedInputs.Count; if (count 0) return; var f F.GetValue(context); var index1 (int)MathUtils.Fmod((int)f, count); var index2 (int)MathUtils.Fmod((int)(f 1), count); var mix MathUtils.Fmod(f, 1); Result.Value MathUtils.Lerp(collectedTypedInputs[index1].GetValue(context), collectedTypedInputs[index2].GetValue(context), mix);算法分三步完成每一步都对应一个明确语义收集输入Vectors.GetCollectedTypedInputs()取出当前所有连接的 Vector3 输入数量记为count若为 0 则输出零向量。索引分解把F的整数截断值对count做取模得到起点索引index1(int)(f 1)取模得到终点索引index2。由于使用了 floor 取模两个索引始终落在合法的[0, count-1]区间内。相位混合mix Fmod(f, 1)提取出F的小数部分作为两个向量之间的线性插值系数。其中MathUtils.Lerp与MathUtils.Fmod定义在 MathUtils.cspublic static float Lerp(float a, float b, float t) { return a (b - a) * t; } public static float Fmod(float v, float mod) { return v - mod * (float)Math.Floor(v / mod); }三维版本 Lerp(Vector3, Vector3, float) 对 X、Y、Z 三个分量分别套用上述公式因此混合是逐分量独立进行的。而Fmod采用Math.Floor的 floor 取模语义区别于 C#%的截断取模这正是F取负值时仍能正确回绕、mix始终落在[0, 1)的关键。F 值的行为速览以 4 个输入向量 V0、V1、V2、V3count 4为例Findex1index2mix输出0.0010.0V0完全落在 V00.5010.5V0 与 V1 各半1.5120.5V1 与 V2 各半3.8300.8V3 与 V0 之间 80% 偏向 V04.0010.0回到 V0实现无缝循环-0.5010.5V0 与 V1 各半负向等价回绕由此可见F不需要被限制在[0, 1]或[0, count]内你可以让F无限增长或递减BlendVector3 会自动把游标循环回列表起点非常适合做扫描灯带轮播位置循环换色这类周期性动画。边界情况零输入count 0时立即返回Vector3.Zero不会发生越界。单输入count 1时index1 index2 0任意F下输出恒等于该向量节点等价于直通。负 F得益于Fmod的 floor 语义负游标同样得到合法的非负索引与[0,1)相位可反向倒放整个序列。MultiInputSlot为什么 Vectors 能连接多个向量Vectors在源码中声明为MultiInputSlotVector3见 BlendVector3.cs这是 TiXL 运算符框架中的多输入槽。其收集逻辑定义在 MultiInputSlot.csGetCollectedTypedInputs()遍历InputConnections若某条连接本身是多输入槽输出还会递归展开其中的全部子输入最终把所有终端信号源平铺为一个有序列表返回。这意味着你可以直接把多个Vector3节点的输出依次连到Vectors上也可以把一个向量列表类的输出整体接入自动展开成多个独立向量输入顺序即列表顺序直接决定F游标遍历的先后次序调整连线顺序即可改变循环方向。与 LerpVec3 的选型区别原文档明确提示 Also see LerpVec3。二者都做向量插值但适用场景差异明显。LerpVec3的实现见 LerpVec3.cs对比要点如下维度BlendVector3LerpVec3输入向量数任意多个多输入槽恰好两个A、B混合游标单个F循环寻址 小数混合单个F仅作为 A→B 的插值系数越界处理自动回绕循环可选Clamp开关开启后F被限制在[0,1]默认关闭不钳制底层插值MathUtils.Lerp逐分量a (b-a)*tVector3.Lerp典型用途多个状态间的周期性轮播、序列过渡两个明确状态间的单次过渡如开关门、淡入淡出位移选型建议如果你需要在两个固定向量之间精确过渡且希望主动钳制系数用LerpVec3如果你要在一串位置/方向/缩放之间做无缝循环动画或不想操心F的取值范围用BlendVector3更合适。实战驱动 F 制作四位置循环动画以让一个物体依次经过 4 个位置并循环往复为例在图中放置 4 个Vector3节点分别填入 4 个目标位置例如(0,0,0)、(2,0,0)、(2,0,2)、(0,0,2)依次连接到BlendVector3的Vectors多输入。将BlendVector3.Result输出连接到目标物体的Translation输入。为F提供随时间递增的驱动信号接入Oscillate三角波/锯齿波或随时间累积的曲线值当F从 0 增长到 4 时物体恰好遍历 4 个位置并回到起点之后继续循环。若希望匀速等分时间可让驱动信号在[0, 4)内线性递增例如将归一化时间乘以 4若希望快慢节奏则由曲线形状决定因为mix仅取F的小数部分曲线斜率即过渡速度。该节点在仓库示例项目中亦有实际引用例如 IkChainExample.t3IK 链示例与 DrawMeshChunksAtPointsExample.t3按点批量绘制网格示例可作为阅读参考。相关节点与延伸阅读BlendVector3 属于 Lib.numbers.vec3 向量运算家族同命名空间下常用于组合搭配的节点包括LerpVec3— 双输入线性插值可钳制AddVec3/SubVec3— 向量加减ScaleVector3— 向量缩放RotateVector3— 绕轴旋转Magnitude/NormalizeVector3— 向量长度与归一化PickVector3— 从多路输入中按索引单选与 BlendVector3 的平滑混合互为补充适合做硬切换若需深入实现细节建议直接阅读 BlendVector3.cs 与通用插值工具 MathUtils.cs想了解多输入槽的完整收集与失效机制可查阅 MultiInputSlot.cs。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表