【问题标题】:HLSL vs GLSL, in writing Unity shadersHLSL 与 GLSL,编写 Unity 着色器
【发布时间】:2021-01-07 17:03:09
【问题描述】:

由于支持平台,对要使用的着色语言(HLSL 或 GLSL)感到困惑。 HLSL 资源有很多可用,但我通过网络看到它特定于 DirectX(Windows)。如果我打算在 android 上运行我的应用程序,那会是个问题吗? -我不能完全依赖 ShaderGraph-

谢谢

【问题讨论】:

  • HLSL 确实是 Direct3D 的着色器语言,但鉴于大型游戏引擎需要在多个平台上工作,它们通常具有某种可移植性机制,以允许您在其他平台上使用 HLSL。正如@Ruzihm 所说,Unity 就是这种情况。

标签: unity3d glsl shader hlsl hlsl2glsl


【解决方案1】:

您可以在 Android 平台上的 Unity 中使用 HLSL。来自the documentation

HLSL 语法

HLSL 语言本身有两种语法:一种是“传统”DX9 风格的语法,一种是更现代的 DX10+ 风格的语法。

区别主要在于纹理采样函数的工作方式:

  • 传统语法使用 sampler2D、tex2D() 和类似函数。 此语法适用于所有平台。
  • DX10+ 语法使用 Texture2D、SamplerState 和 .Sample() 函数。这种语法的某些形式在 OpenGL 平台上不起作用,因为纹理和采样器在 OpenGL 中不是不同的对象。 在 Unity 中,您可以通过使用预定义的宏声明和采样纹理来避免 HLSL 语法平台支持问题。 Unity 将这些宏扩展为最合适的语法,具体取决于为其编译着色器的平台。

着色器编译器

不同平台使用不同的着色器编译器进行着色器程序编译如下:

  • Windows 和 Microsoft 平台(DX11、DX12 和 Xbox One)都使用 Microsoft 的 HLSL 编译器(目前为 FXC / D3DCompiler_47)。
  • OpenGL(Core & ES)、Metal 和 Vulkan 使用 Microsoft 的 HLSL,然后使用 HLSLcc 将字节码转换为 GLSL、Metal 或 SPIR-V。
  • 其他控制台平台使用各自的编译器(例如 PS4 上的 PSSL)。
  • 表面着色器使用 HLSL 和 MojoShader 进行代码生成分析步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多