UNITY 开发者在这里。 与另一个开发者产生了分歧,希望在此场合检查自己的理解。

他们的说法:

使用 HLSL 直接编写着色器意味着无法使用 Unity 的现代渲染特性。 只有由 Shader Graph (Unity 的可视化节点编辑器)生成的着色器方能支持新特性。

我的理解:

  1. "老式着色器" 和 "HLSL" 是不同的层次。 Legacy 指的是前建 立的pipeline 的编写风格 (CGPROGRAM 块,UnityCG.cginc)。 HLSL 指实际的着色语言。
  2. Unity 自己的现代着色器 (URP/HDRP Lit, Unlit 等) 都是用 HLSL 编写的。 Shader Graph 本身只是在背后生成 HLSL。
  3. 手动编写 HLSL 实际上是必需的,而且是 Shader Graph 无法轻易实现的特性,例如计算着色器,定制照明模型,切片化,多次渲染等。

问题:

- 我是否遗漏了什么? 是否有具体情况下,手写 HLSL 本质上被锁定出无法使用现代特性?

- 对于使用其他引擎的人 (Unreal, Godot 等) —— 是否存在着相同的 "节点编辑器 vs 手写着色器" tensión,如何在实际的生产中呈现?

- 我们是否有强烈的有意义的理由避免在现代 Unity 进程中直接编写 HLSL,除了便捷性之外?

- 我要构建一个 LLM 支持的着色器作者工作流程。 由于节点操作不太现实,LLM 需要驱动着色器生成,因此我倾向于让它直接生成 HLSL。 这个方法是否存在根本性的缺陷?

(背景:Unity 6, URP)