TiXL(t3) ShaderGraph:用节点图可视化构建 Field 场,从连线到光线步进渲染
TiXL(t3) ShaderGraph:用节点图可视化构建 Field 场,从连线到光线步进渲染【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3TiXL 是一款开源的实时动态图形(Realtime Motion Graphics)制作软件,其 ShaderGraph(着色器图)功能是文档 ShaderGraph.md 的主题:不写一行着色器代码,而是把一个个小的 Field 算子像节点一样连线,就能搭建出带符号距离场(SDF)的形状、颜色场和向量场,最终交给 RaymarchField 或 Render2dField 渲染成图像。读完本文,你能理解 TiXL Field 场的四类节点构成、节点图到 HLSL 着色器的编译机制、RaymarchField 全部输入参数的默认值与物理含义,以及同一 Field 场驱动粒子力与点选择的复用路径。什么是 ShaderGraph:把 Field 场当节点来搭官方帮助文档 .help/references/topics/ui/ShaderGraph.md 对 ShaderGraph 的定义是:一种可视化的方式,通过把小节点连线(而不是写着色器代码)来构建 Field 场——带符号距离的形状、颜色和向量。理解这个功能的前提是理解 TiXL 的 Field(场)概念。帮助文档 Field.md 将其解释为:一个对空间中任意点回答问题的函数——离最近表面有多远?这里的颜色是什么?这里的流向指向哪?。大多数 Field 返回带符号距离(SDF),用于光线步进出看起来立体的形状;但 Field 也可以返回颜色或方向向量,向量场可以和距离场一样参与乘法与空间变换。文档强调的关键设计点是:一个 Field 的定义,多种用途。同一个 Field 除了渲染成图像,还可以:驱动粒子受力(帮助文档提到 FieldDistanceForce、VectorFieldForce 等算子);为网格着色(ColorVerticesWithField);选择点集(如 SelectPointsWithSDFExample 所示的用 SDF 筛选点)。在编辑器中,每个参与连线的节点就是一个 ShaderNode:它贡献 Field 的一块——一个球体或盒子形状、一次扭转或重复变换、一个颜色、或两个输入场的合并。选中节点后可以在参数窗口(Parameter Window)中像编辑其他算子一样修改其参数。文档特别指出:整条节点链会被编译成一个着色器,增加节点是让着色器变深,而不是增加独立的渲染通道(render pass)——这一点对理解其性能模型至关重要。四类节点与完整节点库ShaderGraph 文档把 Field 算子归纳为四种类型:生成器(generators)创建形状、空间算子(space operators)弯曲或重复其周围的空间、调节算子(adjust operators)重塑数值、合并算子(combine operators)融合两个场。对照源码,这些算子实际集中存放在 Operators/Lib/Symbols/field/ 目录下,每个算子都是.cs(C# 算子类定义槽位).t3(序列化的默认值与子图).t3ui(UI 布局)三元组。从目录结构看,实际节点库比文档的四类更丰富,此外还有render/、use/、analyze/三个子目录:生成器(generate):创建基础形状位于 Operators/Lib/Symbols/field/generate/,分三个子族:SDF 生成器(generate/sdf/):SphereSDF、BoxSDF、BoxFrameSDF、CylinderSDF、TorusSDF、CappedTorusSDF、CapsuleLineSDF、PlaneSDF、RotatedPlaneSDF、PyramidSDF、PrismSDF、OctahedronSDF、ChainLinkSDF、FractalSDF,以及HeightMapSdf、Image2dSDF(从高度图/2D 图像构建 SDF)和CustomSDF(自定义);纹理型场(generate/texture/):Raster3dField、SubDivPattern3d;向量场(generate/vec3/):ToroidalVortexField(环形涡流向量场)。空间算子(space):变换场所在的坐标空间位于 Operators/Lib/Symbols/field/space/,共 12 个节点:Translate(平移)、RotateField/RotateAxis(旋转)、BendField(弯曲)、TwistField(扭转)、ReflectField(反射)、TransformField(整体变换)、RepeatAxis/RepeatField3/RepeatFieldAtPoints/RepeatFieldLimit/RepeatPolar(各种方式的重复平铺)。这类算子不改变场本身,而是弯曲或重复其周围的空间,是做出重复阵列、极坐标图案等效果的常用手段,示例见 TwistFieldExample。调节算子(adjust):重塑场的数值位于 Operators/Lib/Symbols/field/adjust/:AbsoluteSDF(取绝对值)、InvertSDF(反转符号,内外翻转)、NoiseDisplaceSDF(噪声扰动)、PushPullSDF(推拉表面)、SpatialDisplaceSDF(空间置换,示例 SpatialDisplaceSDFExample)、SetSDFMaterial(设置材质参数)、TranslateUV(平移 UV)。合并算子(combine):融合两个或多个场位于 Operators/Lib/Symbols/field/combine/:CombineSDF(SDF 合并,示例 CombineSDFExample)、BlendSDFWithSDF(带过渡宽度的混合)、StairCombineSDF(阶梯式合并)、CombineFieldColor(颜色场混合)。渲染、消费与调试(render / use / analyze)render/:RaymarchField(光线步进渲染)、Render2dField(2D 渲染)、SampleFieldPoints(对点采样场),以及底层的 GenerateShaderGraphCode;use/:把场用于非渲染用途,如ApplyVectorField(向量场推动对象)、RaymarchPoints、SdfToVector、SDFToColor、SdfReflectionLinePoints;analyze/:VisualizeFieldDistance,把场的距离值直接可视化,用于调试场是否正确。编辑器侧的节点浏览分类与目录一一对应:在 SymbolBrowsing.cs 中,节点浏览器按adjust、analyze、combine、generate.sdf、generate.texture、generate.vec3、render、space、use九个分组展示所有ShaderGraphNode类型节点;着色器图在界面上使用专门的品紫色标识 UiColors.cs 中的ColorForShaderGraph (0.82, 0.26, 0.7),并通过 UiRegistration.cs 将ShaderGraphNode类型注册到对应的属性 UI。节点图如何编译成一个着色器整条链编译成一个着色器这句话在源码里的落点,是 ShaderGraphNode 与 GenerateShaderGraphCode 两个类型。ShaderGraphNode 是节点图的运行时表示。它维护一个变更标志CollectedChanges(ChangedFlags 枚举),区分三种变更:结构变更(增删节点,Structural)、代码变更(节点内嵌着色器代码修改,Code)、参数变更(Parameters)。图遍历入口 CollectAllNodeParams 会沿输入递归遍历所有节点(inputNode?.CollectAllNodeParams(...)),把每个节点的浮点参数收集进floatValues列表、把需要嵌入着色器的代码参数收集进codeParams列表——这意味着整张图的所有参数最终打进一个统一的参数缓冲,着色器只需读取一个结构。GenerateShaderGraphCode 是执行图 → 代码转换的算子,它对外的槽位是:ShaderCode(输出,字符串):生成的完整着色器源码;FloatParams(输出,Buffer):收集到的全部浮点参数;Resources(输出,Object):附加着色器资源。其更新逻辑(L99-L131 一带)体现了增量编译思想:若节点图没有Code/Structural变更且模板文件未变化,则跳过重新生成;否则调用_graphNode.CollectEmbeddedShaderCode(...)收集各节点内嵌的 HLSL 代码并注入模板,再拼接_additionalDefines生成最终代码。参数声明通过CollectAllNodeParams的结果逐行生成({ShaderTypeName} {Name};形式,见 GenerateShaderCode)。所有节点共享的 HLSL 基础设施定义在 ShaderGraphIncludes 中,从源码结构看它内嵌了三段公共代码:Common:基础常量与宏,PI、TAU、PHI以及mod(x, y);CommonHgSdf:源自 Mercury SEO 的 HG_SDF 库的辅助函数,如sgn、square、pR(绕轴旋转)、pR45(45 度旋转快捷)、pMod1(沿轴重复空间)——SDF 生成器节点大量复用这些原语;GetColorBlendFactor:两距离值在过渡宽度k内的颜色混合因子,服务于BlendSDFWithSDF这类带平滑过渡的合并。配套的上下文类型还有 CodeAssembleContext 与 ShaderParamHandling,负责代码组装与参数处理。RaymarchField:把 SDF 场光线步进成图像文档说,图的末端放一个 RaymarchField 或 Render2dField 就能把组装好的场变成图像。RaymarchField 是其中参数最多的算子,其输入槽在 RaymarchField.cs 中定义,输出为DrawCommand(Command,实际绘制指令)和ShaderCode(string,可复用/检视生成代码)。SdfField输入的类型是ShaderGraphNode——这正是你连线进去的那张节点图。其余参数的默认值定义在序列化文件 RaymarchField.t3 中:输入类型默认值说明SdfFieldShaderGraphNodenull(必接)待渲染的场节点图ColorVector4(1, 1, 1, 1)基础颜色(白色)AmbientOcclusionVector4(1e-6, 1e-6, 1e-6, 1)AO 颜色,默认近乎纯黑AoDistancefloat1.0环境光遮蔽采样距离TextureScalefloat1.0纹理采样缩放UVMappingint(枚举)1UV 映射模式,见下NormalSamplingDfloat0.002法线差分采样偏移,过小易噪声、过大失细节MaxStepsfloat100.0光线步进最大迭代次数MinDistancefloat0.002终止判定的最小距离MaxDistancefloat300.0射线最大行进距离StepSizefloat1.0步进缩放DistToColorfloat0.15距离到颜色的过渡宽度,决定表面到背景的边缘抗锯齿强度WriteDepthbooltrue是否写深度缓冲SpecularAAfloat0.5高光抗锯齿强度UVMapping的实际取值由 RaymarchField.cs 中的MappingModes枚举定义:Global_Triplanar(0)、Local_Triplanar(1,默认)、Local_XY、Local_YZ、Local_XZ,即三平面纹理映射(全局/局部)与三个正交平面投影。从 RaymarchField.t3 的子图连接可以看到它的完整渲染管线:ReadFile读取像素着色器模板Lib:shaders/img/generate/RaymarchSDFFieldWithMatTemplate.hlsl(带 PBR 材质的步进模板);GenerateShaderGraphCode节点(模板路径同上)把SdfField输入的整张节点图编译注入模板,产出ShaderCode、FloatParams与着色器资源;VertexShader使用RaymarchSDFFieldTemplate.hlsl(入口vsMain4)生成全屏四边形顶点(6 个顶点的三角形带);SetPixelAndVertexShaderStage把顶点/像素着色器、PBR 参数、Srv、上下文缓冲(变换矩阵等)组装为渲染阶段;Draw(VertexCount6)→Execute产出DrawCommand;混合状态BlendOnWhites/BlendState、深度状态DepthStencilState(受WriteDepth控制)决定合成方式;UVMapping通过PickStringPart从一段#define MAPPING_*字符串中挑出对应宏,传给着色器代码生成,切换 UV 映射方式;所有浮点参数经FloatsToBuffer打包后进入像素着色器缓冲。这套结构也印证了 ShaderGraph 的性能模型:每多接一层场节点,步进循环里每像素要多执行一次距离求值,而不是多一次 draw call。性能与走样提示(文档的实操建议)ShaderGraph 文档最后一句是明确的操作提醒:留意输出中的性能与走样提示——嵌套多个场做光线步进会很快变贵,尽量简化图。结合参数表,对应的调优抓手是:性能:MaxSteps(默认 100)与MaxDistance(默认 300)直接决定每像素最坏情况下的距离求值次数;StepSize放大步长可以减少迭代,代价是薄特征可能跳过;节点链越长(嵌套越深),单次距离求值的开销线性叠加;走样:DistToColor控制表面边缘过渡,值偏小会出现锯齿;NormalSamplingD控制法线估计的差分距离,过小在高曲率处闪烁;SpecularAA控制高光抖动。这些正是输出中的走样提示所指向的旋钮;简化策略:能用Render2dField出平面图案就不要上光线步进;能合并的场用CombineSDF/BlendSDFWithSDF提前融合,减少末端嵌套深度;调试时先用VisualizeFieldDistance确认场本身正确,再谈渲染参数。Render2dField 与场的非渲染复用Render2dField 是同目录下的另一条渲染出口,面向 2D 上下文渲染场(而非三维步进),与RaymarchField一样以ShaderGraphNode图作为输入,文档将其并列为把组装好的场变成图像的末端算子。ShaderGraph 文档还强调,同一张场图不止能渲染:它可以驱动粒子受力或选择点。仓库中的示例符号展示了这些复用的实际形态:ApplyVectorFieldExample:把generate.vec3的向量场应用到对象;RaymarchPointsExample 与 SdfReflectionLinePointsExample:把 SDF 场用于点集(采样、反射线);MoveToSDFExample、SelectPointsWithSDFExample:用场修改/筛选点;Image2dSDFExample:从 2D 图像生成 SDF 再参与图形搭建的完整链路。小结与延伸阅读ShaderGraph 是 TiXL 把程序化场从写 HLSL 降维成连节点的操作层:四类节点(生成/空间/调节/合并)覆盖场的构造,ShaderGraphNodeGenerateShaderGraphCode负责把整图增量编译为单个着色器,RaymarchField/Render2dField提供渲染出口,use/算子则让同一份场定义复用于粒子与点集。关键源码入口:算子库目录:Operators/Lib/Symbols/field/节点图运行时:Core/DataTypes/ShaderGraphNode.cs图到代码的编译:Operators/Lib/Symbols/field/render/_/GenerateShaderGraphCode.cs公共 HLSL 注入:Core/DataTypes/ShaderGraph/ShaderGraphIncludes.cs帮助文档:ShaderGraph、Field、ShaderNode【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

把 Claude Code逆向工程研究的 LLM 配置改到 TaoToken 之后,跑通 50,000 行混淆代码的架构还原

把 Claude Code逆向工程研究的 LLM 配置改到 TaoToken 之后,跑通 50,000 行混淆代码的架构还原

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 5:31:27 阅读更多 →
NestJS 控制平面下的 Daytona,Agent 靠 TaoToken 补 Base URL

NestJS 控制平面下的 Daytona,Agent 靠 TaoToken 补 Base URL

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 19:10:10 阅读更多 →
企业顶层流程架构设计:从L1到L3的拆分逻辑与PlantUML实战

企业顶层流程架构设计:从L1到L3的拆分逻辑与PlantUML实战

简介:这份企业顶层流程架构实例PPT学习教案,面向流程管理、企业架构与组织设计学习者,集中解答如何构建跨职能、战略导向的核心流程体系。压缩包内共一个幻灯片演示文稿,大小约一点二八兆字节,已吸引八十四人学习。内容…

2026/9/20 3:36:14 阅读更多 →

最新新闻

360驱动大师网卡版一文搞懂:网卡驱动选型避坑指南

360驱动大师网卡版一文搞懂:网卡驱动选型避坑指南

360驱动大师网卡版一文搞懂:网卡驱动选型避坑指南 面试被问原理答不上来,别慌。很多后端或运维同学在准备面试时,往往忽略了底层硬件驱动与上层应用之间的交互逻辑,导致在遇到“驱动大师网卡版”这类具体场景时,无法从技术选型角度给出清晰解释。今天…

2026/9/22 11:04:46 阅读更多 →
天勤数据结构3大避坑点助你拿下高频面试题

天勤数据结构3大避坑点助你拿下高频面试题

天勤数据结构3大避坑点助你拿下高频面试题 版本升级后 API 全变了,这是最近不少准备秋招或社招面试的开发者在刷【天勤数据结构】题库时遇到的最大痛点。你以为背住了 List 的 add…

2026/9/22 11:04:46 阅读更多 →
qq漂流瓶在哪里保姆级教程

qq漂流瓶在哪里保姆级教程

QQ漂流瓶入口在哪?3个源码解析帮你避开找不到功能的坑 官方文档翻了三遍还是没找到入口?别急,这坑我踩过。QQ的“漂流瓶”功能藏得深,直接搜“源码解析”比看说明书快十倍。今天不讲虚的,直接拆解功能逻辑,帮你定位。…

2026/9/22 11:04:46 阅读更多 →
3个核心逻辑搞定奇酷网,避开高频面试题陷阱

3个核心逻辑搞定奇酷网,避开高频面试题陷阱

3个核心逻辑搞定奇酷网,避开高频面试题陷阱 看了一堆教程还是不会写项目?别急着怪自己笨,大概率是你没搞懂底层逻辑。很多开发者在准备奇酷网相关的技术考核或实际开发时,往往陷入“背代码”的误区,导致遇到稍微变形的 高频面试题 就手足无措。…

2026/9/22 11:04:46 阅读更多 →
后端开发蹚浑水避坑指南:一份保姆级教程助你从入门到实战

后端开发蹚浑水避坑指南:一份保姆级教程助你从入门到实战

后端开发蹚浑水避坑指南:一份保姆级教程助你从入门到实战 刚学完 Python 或 Java 基础语法,面对空白的编辑器却不知如何下手?这种“学会语法却不知怎么搭项目”的困境,几乎是每个转行或初学者的噩梦。别慌,今天这篇 保姆级教程…

2026/9/22 11:03:45 阅读更多 →
adnmb实战:3个步骤搞定后端项目,避开高频面试题陷阱

adnmb实战:3个步骤搞定后端项目,避开高频面试题陷阱

adnmb实战:3个步骤搞定后端项目,避开高频面试题陷阱 刚跑通“Hello World”却对着空项目发呆?这是90%新手的死穴。学会语法只是入场券,不知道如何组织代码、管理依赖、处理并发,才是真正卡住你进阶的瓶颈。很多 高频面试题…

2026/9/22 11:03:45 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →