2.3 主栈 Master Stack 深度剖析


2.3 主栈 Master Stack 深度剖析

本节摘要:主栈是图的数据出口集合,分为顶点块与片元块两部分,块的组合由管线目标与材质类型决定。本节逐一解释 Unlit 图常用端口的真实含义,给出一端口一机制的速查表,并澄清"块只能出现一次""端口不连也有默认值"两条容易踩坑的规则。

主栈到底是什么

把一张图想成一个函数调用:节点画布是函数体,主栈就是函数的返回值列表。GPU 执行完你的函数后,拿着这些返回值去做剩下的事——位置返回值拿去做投影,颜色返回值拿去写入渲染目标,透明度返回值拿去和背景混合。理解了这一层,"为什么有的端口连了没反应"就有了统一的解释方向:不是连线错了,而是渲染管线在当前设置下根本没用这个返回值。

主栈由块(Block)组成。块的数量与类型不是固定的:图形设置面板里切换材质类型(Unlit 或 Lit)与管线目标(URP 或 HDRP)后,块列表会整个重排。这也是跨管线移植时图会"散架"的原因——HDRP 的 Lit 图带着 URP 不认识的块,移过去只能重建。

图:Unlit 图主栈的块结构与高频端口

图:Unlit 图主栈的块结构与高频端口

高频端口逐个说清

Base Color:片元阶段的颜色出口,九成的图最终都汇到这里。注意 Unlit 图里它就是"最终颜色",没有光照参与;Lit 图里它是反照率(Albedo),还会被光照模型加工——同一个颜色端口,两种材质类型下语义不同,移植图时要留意。

Alpha:透明度出口。单独连它什么都不发生——透明效果需要三件套联动:Alpha 端口给值、表面选项里把混合模式设为 Transparent、必要时配合 Alpha Clip Threshold。这是初学者反馈最集中的坑,第 6 章会用完整案例把它讲透。

Emission:自发光出口。连进来的颜色不参与光照、不受理照亮暗影响,直接叠加到最终画面上,是辉光后处理的燃料源。做能量场、全息、霓虹效果都靠它。HDRP 下 Emission 相关设置更细,有强度倍数与颜色模式之分。

Alpha Clip Threshold:阈值裁剪出口。Alpha 值低于该阈值的像素直接被丢弃(一个像素都不画),高于则完全保留——没有半透明过渡,边缘是硬的。好处是被裁掉的像素完全不产生填充开销,草丛、栅栏、溶解效果的标配。与 Alpha 的连续透明是两条不同的技术路线,成本与观感差异在第 6 章对比。

Position 与 Normal(Vertex 块):顶点阶段的两个出口。Position 改顶点落点,是水面、旗帜、挤出描边的入口;Normal 改法线朝向,影响后续光照计算与描边方向。第 6 章水面案例会大量使用。

端口速查表

端口 阶段 一句话职责 典型应用
Base Color 片元 表面最终颜色 几乎所有图
Alpha 片元 透明度来源 透明、渐隐
Alpha Clip Threshold 片元 硬边裁剪阈值 草丛、溶解
Emission 片元 自发光叠加 全息、能量场
Position 顶点 顶点位置偏移 水面、旗帜
Normal 顶点 法线朝向 描边、形变

实操:给渐变图加自发光

做一个五分钟小练习验证理解:在渐变图里加一个 Color 属性命名 GlowColor,模式开 HDR,强度拉到二以上;把它接到 Emission 端口,保存。如果项目 URP 设置里开启了后处理与泛光(Bloom),物体会出现光晕;没开泛光的话,你只会看到颜色比 Base Color 更"亮白"——这正好验证了 Emission 与后处理的关系:出口只负责把颜色交出去,怎么呈现取决于管线的后处理配置。

块的增删与排序操作

块不是只能被动接受:在主栈面板里可以给块改名(团队协作时把 Base Color 改名成"表面色"有助于沟通)、可以按 Add Block 增补透明相关块、可以拖动块在栈内的上下次序。排序有实际意义吗?有——同一个图里多个块按顺序执行,把频繁使用的块放上面纯属观感;但把与当前任务相关的块集中排列,能显著减少连线时在栈里上下来回找端口的时间。栈的组织也是画布可读性的一部分。

Unlit 与 Lit 主栈的块差异对照

对比项 Unlit 图 Lit 图
Base Color 语义 最终颜色 反照率,经光照加工
光照相关块 金属度、光滑度、遮挡等一批
特殊块依赖 少,自足 部分块依赖管线特性
适合场景 UI、风格化、发光体 写实与半写实材质

这张表也是"选图类型"的决策依据:效果不需要光照参与(UI、发光符号、溶解演出)就用 Unlit,省掉一批永远不会连的块;需要光照反应就上 Lit,多出来的块每个都值得认识一遍(5.1 节)。

问题:端口连错了会不会损坏什么?

不会。着色器图是纯声明式的:连错最多报错或效果不对,删线重来即可,没有任何"弄坏"的风险。这个特性值得用来学习——看到一个陌生端口,随便喂个东西进去看预览反应,比查文档快。唯一的例外提醒:主栈设置类改动(混合模式、渲染面)影响的是材质状态而非连线,改之前知道自己在改什么就行。

一条排查心法

"连了没反应"类问题的统一排查顺序:先看端口是否真的接上了(端口小圆点在连接后实心);再查图侧该输出是否被其他连线覆盖(一个输出口只能出一条线,分叉要用节点);然后查块侧设置是否启用(Alpha 要透明设置配合);最后查管线侧开关是否打开(Emission 要泛光配合)。四级排查从图内到管线,覆盖 2.3 节所有端口的"没反应"场景。

本节要点回顾

  • 主栈即返回值:块是函数出口,端口连什么、管线就拿到什么。
  • 块组合随设置变:管线目标与材质类型决定块列表,移植图先对块。
  • 端口各有机制:Alpha 要三件套联动,Emission 依赖泛光后处理,单连不等于生效。
  • 默认值兜底:不连的端口走默认,排查"没反应"先看端口与表面选项。

到此第 2 章的三件工具全部磨亮。下一章进入弹药库:把日常效果里高频出现的数学与逻辑节点族逐个过一遍,每个都配手算例题——这是全书案例章的底层储备。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U