1

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

谢谢

4

1 回答 1

1

您可以在 Android 平台上的 Unity 中使用 HLSL。从文档中

HLSL 语法

HLSL 语言本身有两种语法:“传统”DX9 样式语法和更现代的 DX10+ 样式语法。

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

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

着色器编译器

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

  • Windows 和微软平台(DX11、DX12 和 Xbox One)都使用微软的 HLSL 编译器(目前为 FXC/D3DCompiler_47)。
  • OpenGL (Core & ES)、Metal 和 Vulkan 使用 Microsoft 的 HLSL,然后使用 HLSLcc 将字节码转换为 GLSL、Metal 或 SPIR-V。
  • 其他控制台平台使用它们各自的编译器(例如 PS4 上的 PSSL)。
  • Surface Shader 使用 HLSL 和 MojoShader 进行代码生成分析步骤。
于 2021-01-07T17:46:10.850 回答