一、问题 / 需求
希望在材质节点组内部获取当前渲染引擎(Cycles / EEVEE)的判断信号,以便在节点源头切换颜色或着色逻辑。
而不是复制全部的节点组,就为了在开头改一个颜色。
要求:
- 纯节点实现,不依赖 Driver 或脚本。
- 输出 0/1 信号,方便后续分支控制。
- 可封装为节点组,适用于资产库复用。
二、探索
尝试过几种思路:
- Bevel:Cycles 独有节点,但受几何位置影响,无法保证全表面稳定判别。
- Driver:可以读取
render.engine,但增加了资产复用和依赖上下文的维护成本。 - Material Output 分流:官方支持按引擎指定输出,但需要维护重复的材质网络。
最终回到 Shader to RGB。该节点仅支持 EEVEE,可以利用它在两个引擎下的不同表现进行判断。
Blender 5.2 实测
使用固定 Emission 输入(Strength = 0.2):
- EEVEE:Shader to RGB 正常输出 0.2。
- Cycles:Shader to RGB 直接读取表现为 null / 0,但后续数值处理发现其实际输出并非普通的 0。
在 Shader to RGB 后增加 Math: Add(Clamp),可以将 Cycles 下的异常输出处理为 1。
三、结论
利用上述差异构造引擎识别信号:
| 节点 | EEVEE | Cycles |
|---|---|---|
| Emission (0.2) → Shader to RGB | 0.2 | 异常输出 |
| Add(Clamp)处理 | — | 1 |
| Greater Than (0.3) | 0 | 1 |
最终得到:
- Cycles = 1
- EEVEE = 0
这是一种利用节点支持范围差异实现的经验性 Workaround,并非官方提供的引擎识别接口。目前尚未确认 Cycles 异常输出的底层原因。
四、实践
将判别逻辑封装为 Is Cycles 节点组,输出 0/1 信号,连接到 Mix Color 等节点的 Factor,即可在材质源头切换不同引擎下的颜色或参数。

注意: 该方法依赖未支持节点的异常输出,未来 Blender 版本可能改变相关行为。当前结论基于 Blender 5.2 实测,升级后需要重新验证。