UNITY 开发者在这里。 与另一个开发者产生了分歧,希望在此场合检查自己的理解。
他们的说法:
使用 HLSL 直接编写着色器意味着无法使用 Unity 的现代渲染特性。 只有由 Shader Graph (Unity 的可视化节点编辑器)生成的着色器方能支持新特性。
我的理解:
- "老式着色器" 和 "HLSL" 是不同的层次。 Legacy 指的是前建 立的pipeline 的编写风格 (CGPROGRAM 块,UnityCG.cginc)。 HLSL 指实际的着色语言。
- Unity 自己的现代着色器 (URP/HDRP Lit, Unlit 等) 都是用 HLSL 编写的。 Shader Graph 本身只是在背后生成 HLSL。
- 手动编写 HLSL 实际上是必需的,而且是 Shader Graph 无法轻易实现的特性,例如计算着色器,定制照明模型,切片化,多次渲染等。
问题:
- 我是否遗漏了什么? 是否有具体情况下,手写 HLSL 本质上被锁定出无法使用现代特性?
- 对于使用其他引擎的人 (Unreal, Godot 等) —— 是否存在着相同的 "节点编辑器 vs 手写着色器" tensión,如何在实际的生产中呈现?
- 我们是否有强烈的有意义的理由避免在现代 Unity 进程中直接编写 HLSL,除了便捷性之外?
- 我要构建一个 LLM 支持的着色器作者工作流程。 由于节点操作不太现实,LLM 需要驱动着色器生成,因此我倾向于让它直接生成 HLSL。 这个方法是否存在根本性的缺陷?
(背景:Unity 6, URP)
评论 (0)