TiXL 中的 AbsoluteSDF 操作符:用 abs() 重塑有符号距离场

发布时间:2026/9/19 21:28:53
TiXL 中的 AbsoluteSDF 操作符:用 abs() 重塑有符号距离场 音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载AbsoluteSDF 是 TiXL实时动态图形创作工具Lib.field.adjust调整类操作符中的一员核心功能是对输入的有符号距离场SDF取绝对值。本指南围绕该操作符的数学语义、源码实现与典型组合用法展开帮助读者在 TiXL 的 Field / ShaderGraph 节点体系中熟练运用它来制造壳状表面、条纹纹理与圆角化过渡效果并理解其底层代码生成机制。AbsoluteSDF 在 TiXL Field 体系中的位置TiXL 以节点图node graph组织实时动态图形其中 Field 子系统用于构建和渲染有符号距离场。在 Lib.field 命名空间总览 中Field 被划分为adjust、analyze、combine、generate、render、space、use七个子命名空间。AbsoluteSDF 归属于adjust类即对既有距离场做标量或数值层面的调整而非重新生成或变换空间。adjust类共包含 7 个操作符见 Lib.field.adjust 索引操作符作用AbsoluteSDF返回有符号距离场的绝对值InvertSDF反转输入 SDF 场的符号NoiseDisplaceSDF用类 Perlin 噪声偏移 SDF 距离PushPullSDF对距离加常数使 SDF 体积变厚或变薄SetSDFMaterial向 shader graph 注入颜色提供者SpatialDisplaceSDF对 SDF 做三维空间扭曲TranslateUV沿 X/Y/Z 轴平移 SDF 场的 UV 坐标原文档对 AbsoluteSDF 的功能描述只有一句话——Returns the absolute value of the signed distance field返回有符号距离场的绝对值并特别提示其推荐搭配 CombineSDF。下文将从数学原理到源码实现逐一展开。先理解 SDF正负号与 f.w 通道在深入abs()之前需要明确 TiXL 内部如何表示一个距离场。SDFSigned Distance Field是一种隐式曲面表示空间中任意一点都对应一个带符号的距离值负值表示点在物体内部正值表示在外部零值即曲面本身。TiXL 的 Field 渲染链路基于 ShaderGraphNode 构建。在 CodeAssembleContext 中可以看到代码生成时每个节点上下文会引入局部变量p位置与f字段结果AppendCall($float4 p{subContextId} p{contextId};); AppendCall($float4 f{subContextId} f{contextId};);也就是说字段结果f是一个float4其中f.w通道存放有符号距离值而f.xyz通常携带法线、颜色等附加信息。AbsoluteSDF 的源码正是对f.w这一通道执行abs()见下文这也解释了为什么它能与 InvertSDF、PushPullSDF 等改距离、不动位置的调整操作符并列。abs() 的数学语义内外对调与壳状表面对任意实数xabs(x) ≥ 0恒成立。把这个操作施加到 SDF 的f.w上效果非常直观原场中内部负距离与外部正距离的所有点经过abs()后距离值全部变为非负原本位于曲面两侧、距曲面等距的两点会被映射到同一个非负距离值上结果是原来曲面内的区域被折叠到外部一侧曲面本身零等值面依然保留整体呈现出薄壳形态。从视觉效果看AbsoluteSDF 的典型产出包括空心壳 / 薄壁将一个实心球体、立方体或圆柱取绝对值后得到只保留表面的蛋壳而非实心体积对称折叠纹理对带有符号变化的复合场例如经过 CombineSDF 平滑混合的场取绝对值会在正负交界处产生镜像折叠的细节适合生成条纹、环状层次圆角过渡配合稍大的采样步长或后续字段操作abs()带来的尖峰可以转化为有节奏的层次渐变。它与 InvertSDF 形成互补InvertSDF 执行f.w * -1把立方体所在的空间变成空洞无限空间变成实体是严格的反向翻转而 AbsoluteSDF 则是把内外两侧折叠到同一侧只保留零等值面。二者常被放在一起讨论但视觉效果完全不同。源码级实现一行代码的距离场折叠AbsoluteSDF 的完整实现位于 Operators/Lib/Symbols/field/adjust/AbsoluteSDF.cs核心逻辑极其精简[Guid(5b911a78-8cad-4dbd-9f74-afccb0cb0787)] internal sealed class AbsoluteSDF : InstanceAbsoluteSDF, IGraphNodeOp { [Output(Guid 386b568b-0818-4d3e-adb7-d3adc41d3240)] public readonly SlotShaderGraphNode Result new(); public AbsoluteSDF() { ShaderNode new ShaderGraphNode(this, null, InputField); Result.Value ShaderNode; Result.UpdateAction Update; } private void Update(EvaluationContext context) { ShaderNode.Update(context); } public ShaderGraphNode ShaderNode { get; } public void GetPostShaderCode(CodeAssembleContext c, int inputIndex) { c.AppendCall($f{c}.w abs(f{c}.w);); } [Input(Guid e60a6857-2be5-4236-b506-43c9e84b8d1e)] public readonly InputSlotShaderGraphNode InputField new(); }逐段解读节点身份类通过[Guid(5b911a78-...)]注册到 TiXL 的操作符系统每个操作符实例携带唯一 ID保证节点图保存与加载时符号可被稳定解析。输出槽Result是一个SlotShaderGraphNode类型为T3.Core.DataTypes.ShaderGraphNode——这正是原文档 Outputs 表中声明的唯一输出。构造函数中把内部ShaderNode作为输出值并把Update挂接到Result.UpdateAction使下游字段每次求值都能触达该节点。输入槽InputFieldInputSlotShaderGraphNode接收上游 SDF 字段。整个操作符没有暴露任何可调参数——它就是一个纯函数式的距离修改器无需在 UI 上配置任何数值。代码生成钩子类实现IGraphNodeOp接口见 Core/DataTypes/ShaderGraph/IGraphNodeOp.cs该接口定义了AddDefinitions、GetPreShaderCode、GetPostShaderCode、TryBuildCustomCode等代码生成回调。AbsoluteSDF 只重写GetPostShaderCode在遍历完上游连接的字段之后向CodeAssembleContext.Calls追加一行f{c}.w abs(f{c}.w);其中{c}是当前子上下文索引。这行 HLSL 代码正是整个操作符的全部着色器逻辑——把当前上下文距离值f.w替换为它的绝对值。生成管线这行 HLSL 是在何时被写出的要理解GetPostShaderCode的调用时机需要了解 TiXL 的字段代码收集流程。根据 ShaderGraphNode 的类注释整体过程分两个阶段更新阶段Update PassShaderGraphNode.Update()递归调用所有连接图节点的Update()并检查参数、代码或图结构是否发生变化维护CollectedChanges与StructureHash。每个节点在一帧内只被求值一次通过_lastUpdateFrame与全局Playback.FrameCount比较去重。收集阶段Collect Pass在确认结构无变化后CollectShaderCode()与CollectAllNodeParams()递归收集所有需要的代码与参数片段。在收集阶段CodeAssembleContext 充当中央代码装配器CallsStringBuilder是主距离函数的输出目标AppendCall()负责按缩进追加一行代码PushContext/PopContext维护上下文栈为每个子字段生成独立的p/f局部变量避免嵌套图节点间的变量冲突连接字段的迭代顺序决定了调用链先调用GetPreShaderCode如空间变换类节点需要在求值前改动上下文再遍历连接的输入字段最后调用GetPostShaderCode修改结果字段。IGraphNodeOp.GetPostShaderCode的接口注释明确写道Called after iterating a connected field. Should be used for manipulating the result field (e.g. offset f)——即在遍历完连接的字段之后调用用于操作结果字段。AbsoluteSDF 正是此类后处理节点的典型代表上游任何 SDF球、立方体、Torus、甚至多层 CombineSDF 混合结果在写入f.w后立即被abs()折叠。这种图结构即着色器代码的设计意味着你不需要手写任何 HLSL只要在节点图中把 AbsoluteSDF 串接在字段链路里TiXL 就会在生成的距离函数中自动插入对应代码并且结构哈希会在图结构改变时触发代码重新生成。实战组合从生成到渲染的完整链路原文档特别标注了 Helpful combination: CombineSDF推荐与 CombineSDF 组合。一个典型的节点图工作流如下[SphereSDF 或其他生成器] → [AbsoluteSDF] → [CombineSDF多个分支汇合] → [SDFToColor] → [RaymarchField] → 输出生成从 Lib.field.generate.sdf 中选取 SphereSDF、BoxSDF、TorusSDF 等基础图元作为起点调整用 AbsoluteSDF 将实心图元变为壳状如需同时改变内外关系可再串接 InvertSDF组合CombineSDF 接收两个或更多字段按CombineMethodInt32参数选择并集、交集、平滑混合等方式合并此时abs()造成的折叠边界会参与混合计算产生独特的纹理过渡着色SDFToColor 通过Gradient、Mapping、Range、Offset、GainAndBias等参数把距离值映射为颜色例如让壳表面附近的窄距离区间呈现高对比色带渲染最终由 RaymarchField 或 Render2dField 对距离场做光线步进并输出到画面。调试提示由于 AbsoluteSDF 不暴露任何参数如果发现输出与预期不符应优先检查上游字段的符号分布可使用 VisualizeFieldDistance 把距离值可视化为颜色确认确实存在正负交替的区域——只有这种情况下abs()才会产生可见的折叠效果。与同类调整操作符的对比为便于快速选型下表对比adjust类中几个直接修改距离值的操作符均以 CodeAssembleContext 的f.w为目标操作符生成的着色器代码示意视觉效果AbsoluteSDFf.w abs(f.w);内外折叠为薄壳保留零等值面InvertSDFf.w * -1;见 InvertSDF.cs实心 ↔ 空洞互换PushPullSDF距离加常数偏移体积整体变厚/变薄NoiseDisplaceSDF距离叠加 Perlin 噪声表面凹凸扰动选择依据想要去内部只留外壳用 AbsoluteSDF想要内外颠倒用 InvertSDF想要整体膨胀收缩用 PushPullSDF想要表面自然起伏用 NoiseDisplaceSDF。它们都是后处理式的字段修改可以按任意顺序串接形成更复杂的距离调制链。小结AbsoluteSDF 是 TiXL Field 系统中一个参数极少、作用却极其精炼的调整节点它以一行f.w abs(f.w)的着色器代码把有符号距离场的内部与外部折叠到一起从而把实心图元变为壳状结构并能在复合场中制造对称的折叠细节。结合 AbsoluteSDF.cs、CodeAssembleContext.cs 与 IGraphNodeOp.cs 的源码可以清晰看到它在更新—收集—装配三阶段管线中的准确位置。配合 CombineSDF、SDFToColor 与 RaymarchField即可在实时场景中快速搭建出薄壳、条纹与层次化的动态图形效果。赞分享音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载相关推荐TiXL 中的 PyramidSDF金字塔距离场SDF操作符详解TiXL 中的 PyramidSDF金字塔距离场SDF操作符详解 PyramidSDF 是 TiXL 基于着色器图Shader Graph的距离场S音视频图形学桌面应用TiXL 有符号距离场SDF算子全解析Lib.field.generate.sdf 实战指南TiXL 有符号距离场SDF算子全解析Lib.field.generate.sdf 实战指南 导读 TiXLt3是一套面向实时动态图形创作的开源软件音视频图形学桌面应用TiXL 节点详解PlaneSDF——用有符号距离场生成无限平面并接入 Raymarching 渲染管线TiXL 节点详解PlaneSDF——用有符号距离场生成无限平面并接入 Raymarching 渲染管线 PlaneSDF 是 TiXL开源实时动态图形工具音视频图形学桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询