微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HLSL 与 GLSL,编写 Unity 着色器

如何解决HLSL 与 GLSL,编写 Unity 着色器

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

谢谢

解决方法

您可以在 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 进行代码生成分析步骤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。