Version: 2023.2
ShaderLab:旧版顶点数据通道映射
Preprocessor directives in HLSL

Unity 中的 HLSL

In Unity, you use the HLSL programming language to write shader programs.

本手册的这一部分介绍有关以 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 语言有两种语法:旧版的 DirectX 9 样式语法以及更现代的 DirectX 10+ 样式语法。不同之处主要在于纹理采样函数的工作方式:

  • 旧版语法使用 sampler2D、tex2D() 和类似函数。此语法适用于所有平台。
  • DX10+ 语法使用 Texture2D、SamplerState 和 .Sample() 函数。由于纹理和采样器在 OpenGL 中不是不同对象,因此该语法的某些形式在 OpenGL 平台上无效。

Unity 提供了包含预处理器宏的着色器库来帮助您管理这些差异。有关更多信息,请参阅内置着色器宏

ShaderLab:旧版顶点数据通道映射
Preprocessor directives in HLSL