ARTICLE DETAIL

资讯详情

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

TiXL(t3)Round 运算器深度解析:从参数到算法的进阶舍入实现

TiXL(t3)Round 运算器深度解析:从参数到算法的进阶舍入实现 音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载导读Round 是 TiXLt3 实时动态图形创作软件Lib.numbers.float.adjust类别中用于浮点数舍入的进阶运算器其定位与文档原话一致——Advanced version of rounding舍入的进阶版本。与简单的Ceil向上取整和Floor向下取整不同Round 通过StepsPerUnit每单位步数与RoundRatio舍入比例两个参数把舍入扩展为可编程的量化与软化过程可直接用于参数步进、网格对齐、节奏化动画等实时图形场景。读完本文你将完整掌握该运算器的三个输入参数的语义与默认值、输出约定、源码中核心算法RoundValue2的逐行数学原理以及如何把它应用到实际节点图中。一、算子速览它在项目中的位置Round 运算器属于 TiXL 内置运算符库的数值调整子类别其文档位于 .help/docs/operators/lib/numbers/float/adjust/Round.md同一类别下还包含 Abs、Ceil、Floor、Clamp、InvertFloat、Remap、Sigmoid 等运算器类别总览见 Lib.numbers.float.adjust。其真实实现位于运算符库源码 Operators/Lib/Symbols/numbers/float/adjust/Round.cs以Guid(ae0c87d6-2b1e-4e28-b0d0-8611a2f7e152)注册继承自InstanceRound属于在节点图求值时同步计算的纯数值运算器。对应的工程定义文件 Operators/Lib/Symbols/numbers/float/adjust/Round.t3FormatVersion: 3记录了三个输入的默认值。文档还提到该运算器参考了一个交互式 Desmos 计算器用于理解进阶细节原文档中以外部链接形式给出此处不再列出外部地址并结合 Ceil 与 Floor 共同理解。二、输入参数详解按照原文档的参数表Round 共有三个Single单精度浮点输入全部在 Round.t3 中带有默认值名称类型默认值语义说明ValueSystem.Single0.0待舍入的原始输入值StepsPerUnitSystem.Single1.0每个单位区间内的舍入步数决定量化网格的密度RoundRatioSystem.Single0.0舍入比例控制完全不舍入到标准最近步舍入之间的行为对照源码三个输入以InputSlotfloat形式声明Round.cs 第 38–45 行对应的 Guid 分别为e911807f-b3a7-44e9-82d2-f04608b39ec3Value、31a045cf-9892-4d1b-b961-73bf73e58b6aStepsPerUnit、B2D2D730-ED57-4B5F-AA34-2060D86EFB47RoundRatio这也是节点图保存.t3 文件中用于绑定连接的标识。2.1 StepsPerUnit量化网格密度从实现公式看详见第四节u 1 / StepsPerUnit是相邻两个舍入基准点之间的间距即量化网格的步长。常见取值效果如下StepsPerUnit网格步长 u量化效果舍入到…0.11010 的倍数0.52偶数2 的倍数1.0默认1整数100.1一位小数1000.01两位小数在实时动画中这一参数常用于把连续变化的浮点参数吸附到指定的离散档位例如把时间或角度量化到固定间隔。2.2 RoundRatio从不过滤到硬舍入的连续控制由公式可推导RoundRatio 控制的是每个网格单元内部的舍入行为取值区间通常为[0, 1]RoundRatio 0默认公式中的v 0此时所有输入都落入中间分支计算结果是y i即输出等于输入运算器表现为恒等直通不做任何舍入0 RoundRatio 1数值在网格单元内部被平滑地推向最近的基准点中间带为线性过渡比例越大过渡越陡输出越接近标准的就近舍入RoundRatio 1退化为标准的舍入到最近步行为——小于半步向下取整、大于半步向上取整半值点附近存在除零边界属于测度为零的临界情形。这一特性使得 Round 与普通Math.Round有本质区别它是一条连续函数而不是存在跳变的阶跃函数因此非常适合用来驱动会产生视觉抖动的参数详见第五节数学分析。三、输出说明名称类型ResultSystem.Single输出只有一个SlotfloatRound.cs 第 6–7 行输出 Guid 为a886fa83-a8cc-4022-b4b1-26c134095223。在构造函数中输出槽通过Result.UpdateAction Update绑定求值回调每当依赖的输入被求值Value.GetValue(context)、StepsPerUnit.GetValue(context)、RoundRatio.GetValue(context)Update方法便会调用静态算法RoundValue2(v, steps, ratio)计算并写入Result.Value。注意此处没有额外的默认值声明输出完全由输入即时推导。四、源码级实现逐行拆解 RoundValue2核心算法位于 Round.cs 第 23–35 行是一个公开静态方法完整代码如下public static float RoundValue2(float i, float stepsPerUnit, float stepRatio) { float u 1 / stepsPerUnit; // 网格步长 float v stepRatio / (2 * stepsPerUnit); // 单元内死区半宽 float m i % u; // 当前单元内的偏移量 float r m - (m v ? 0 : m u - v ? u : (m - v) / (1 - 2 * stepsPerUnit * v)); float y i - r; // 从原值减去修正量得到结果 return y; }逐行含义如下u 1 / stepsPerUnit计算相邻基准点的间距量化步长。stepsPerUnit越大网格越密。v stepRatio / (2 * stepsPerUnit)计算单元内保留区间的半宽。由于2 * stepsPerUnit * v stepRatio后续的分母(1 - 2 * stepsPerUnit * v)实际等于(1 - stepRatio)这一化简是理解行为的关键。m i % u取输入值在当前网格单元内的余数偏移。C# 的%结果符号跟随被除数因此对负输入的行为与正输入存在差异实际使用时建议先验证负区间行为或对输入做归一化。三分支修正量r当m v靠近单元下边界r m即把值向下吸附到本单元基准点y i - m当m u - v靠近单元上边界r m - u即向上吸附到下一个基准点y i - m u中间带r m - (m - v) / (1 - stepRatio)即对修正量做线性插值使输出在两个边界行为之间平滑过渡。y i - r原值减去修正量得到最终的舍入结果。需要说明的是文档本身并未对上述公式给出逐段解释上述语义是从源码结构推导得出的RoundRatio 本质上是一个软化系数——为 0 时完全不量化恒等趋向 1 时过渡带无限变陡逼近标准的就近步进舍入。五、数学行为分析为什么说它是进阶舍入把第四节的结果放到一起可以验证该函数在两个分支边界处是连续的在m v处左分支给出r v中间分支代入m v也得到r v在m u - v处右分支给出r -v中间分支代入利用u - 2v u(1 - stepRatio)化简同样得到r -v。因此在RoundRatio ∈ (0, 1)时Round 是一个处处连续的舍入函数这是它与Ceil/Floor/标准Math.Round存在阶跃跳变的本质区别。中间带输出相对于输入的斜率可推导为1 / (1 - stepRatio)RoundRatio 0.5时斜率为 2RoundRatio 0.9时斜率接近 10——比例越大单元内的数值被越急切地推向最近的基准点。这带来一个对实时动态图形非常有价值的能力可以用一个连续参数连续地拨动量化强度。例如对某个旋转角度或位移参数可以先用一个平滑信号驱动RoundRatio从 0 过渡到 1让画面从自由连续运动平滑地卡到离散档位上而不会出现突然的跳变帧。六、与同类别算子的对比为便于在节点图中做选择这里结合源码对比同目录下的两个邻近算子Ceil实现在 Operators/Lib/Symbols/numbers/float/adjust/Ceil.cs直接调用(float)Math.Ceiling(v)无条件向上取整到最近整数只有一个Value输入Floor实现在 Operators/Lib/Symbols/numbers/float/adjust/Floor.cs通过(int)Value.GetValue(context)截断取整注意 C# 的int强转是向零截断与数学意义上的向下取整在负数上行为不同同样只有一个输入Round通过StepsPerUnit与RoundRatio提供可调网格密度与连续可变的舍入强度是三者中参数最丰富、行为最灵活的一个。算子输入数网格可调连续无跳变默认行为Ceil1否固定整数否向上取整Floor1否固定整数否向零截断Round3是StepsPerUnit是RoundRatio ∈ (0,1)恒等直通七、实战应用在 TiXL 节点图中的典型用法以下场景均可直接在 TiXL 编辑器的节点图中实现无需编写代码参数步进Quantize把某个连续变化的值如滑块、随机噪声、LFO 输出接入ValueStepsPerUnit设为需要的档位数如 8、16即可让参数只在离散档位上取值常用于制造量化感的动画或参数旋钮的段落感。网格对齐将坐标或位置分量接 RoundStepsPerUnit设为网格密度配合渲染场景中的网格系统让元素吸附到虚拟网格。平滑吸附动画用动画曲线或缓动信号驱动RoundRatio从 0 到 1 变化实现从自由运动到硬量化的无缝过渡这是标准舍入函数难以直接实现的效果。组合使用Round 的输入均可由其他运算器驱动例如把时间轴映射值接Value、把音乐节拍相关的密度值接StepsPerUnit即可得到与节奏联动的离散参数变化——这与项目中 Core/Audio/Timing 一类的节拍同步思想天然契合。工程默认值Round.t3为StepsPerUnit 1.0、RoundRatio 0.0、Value 0.0。特别提醒默认参数下输出等于输入恒等直通首次使用时请务必显式设置StepsPerUnit和RoundRatio否则观察不到舍入效果。八、进一步阅读类别总览Lib.numbers.float.adjust同类别算子Ceil 文档 Ceil.md、Floor 文档 Floor.md、Clamp 文档 Clamp.md、Remap 文档 Remap.md源码实现Round.cs算法、Round.t3默认值与连接定义、Ceil.cs、Floor.cs说明本文所有默认值、参数类型与算法细节均取自当前仓库中的文档、源码与工程定义文件原文档引用的交互式计算器为外部资源未在本仓库中存档故仅描述其用途而不给出外部地址。赞分享音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载相关推荐TiXL RadialGradient 径向渐变算子深度解析算法原理、全部参数与实战用法TiXL RadialGradient 径向渐变算子深度解析算法原理、全部参数与实战用法 导读 RadialGradient 是 TiXL开源实时动态图形音视频图形学桌面应用TiXL SDF 布尔运算进阶StairCombineSDF 算子的楼梯与立柱合并技法TiXL SDF 布尔运算进阶StairCombineSDF 算子的楼梯与立柱合并技法 StairCombineSDF 是 TiXLtooll3开源实时动音视频图形学桌面应用CANN ops-math 算子解析Round 四舍五入算子的功能、aclnn 调用与源码实现CANN ops math 算子解析Round 四舍五入算子的功能、aclnn 调用与源码实现 导读 Round 是 CANN ops math 仓库中位于算子库人工智能CANN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表