Version: 2020.3
ShaderLab:旧版顶点数据通道映射
着色器编译:pragma 指令

Unity 中的 HLSL

在 Unity 中,可使用 HLSL 编程语言来编写着色器程序

本手册的这一部分介绍有关以 Unity 特定方式使用 HLSL 的信息。有关编写 HLSL 的常规信息,请参阅 Microsoft 的 HLSL 文档

注意:Unity 最初使用 Cg 语言,因此会使用 Unity 某些关键字的名称 (CGPROGRAM) 和文件扩展名 (.cginc)。Unity 不再使用 Cg,但这些名称仍在使用。

将 HLSL 代码添加到 ShaderLab 代码中

将 HLSL 代码放在 ShaderLab 代码中的代码块中。着色器程序通常如下所示:

  Pass {
        // ... 常规通道状态设置 ...
      
        HLSLPROGRAM
        // 此代码片段的编译指令,例如:
        #pragma vertex vert
        #pragma fragment frag
      
        // 着色器程序本身
      
        ENDHLSL

        // ... 通道的剩余部分 ...
    }

有关着色器代码块的更多信息,请参阅 ShaderLab:添加着色器程序

HLSL 语法

HLSL has two syntaxes: a legacy DirectX 9-style syntax, and a more modern DirectX 10+ style syntax. The difference is mostly in how texture sampling functions work:

  • The legacy syntax uses sampler2D, tex2D() and similar functions. This syntax works on all platforms.
  • The DX10+ syntax uses Texture2D, SamplerState and .Sample() functions. Some forms of this syntax do not work on OpenGL platforms, because textures and samplers are not different objects in OpenGL.

Unity provides shader libraries that contain preprocessor macros to help you manage these differences. For more information, see Built-in shader macros.

ShaderLab:旧版顶点数据通道映射
着色器编译:pragma 指令