版本:Unity 6 (6000.0)
语言:English
创建计算着色器
运行计算着色器

在计算着色器中使用 HLSL 和 ShaderLab

使用纹理采样器

在 Unity 中,纹理和采样器不是单独的对象,因此要在计算着色器在 GPU 上运行的程序。 更多信息
参见 术语表
中使用它们,必须遵循以下 Unity 特定规则之一

  • 使用与纹理名称相同的名称,并在开头添加 sampler(例如,Texture2D MyTexSamplerState samplerMyTex)。在这种情况下,采样器将初始化为该纹理的过滤器/环绕/各向异性设置。

  • 使用预定义的采样器。为此,名称必须具有 LinearPoint(用于过滤模式)和 ClampRepeat(用于环绕模式)。例如,SamplerState MyLinearClampSampler 创建一个具有线性过滤模式和钳位环绕模式的采样器。

有关更多信息,请参阅有关采样器状态的文档。

使用关键字

您可以使用关键字生成计算着色器的多个变体,就像您可以为图形着色器生成一样。

有关变体的常规信息,请参阅着色器变体Unity 根据特定组合的着色器关键字及其状态生成的着色器程序的版本。一个着色器对象可以包含多个着色器变体。 更多信息
参见 术语表
。有关如何在计算着色器中实现这些功能的信息,请参阅在 HLSL 中声明和使用着色器关键字ComputeShader API 文档

仅限 HLSL 或仅限 GLSL 的计算着色器

通常,计算着色器文件是用HLSL编写的,并自动编译或转换为所有必要的平台。但是,可以防止转换为其他语言(即,仅保留 HLSL 平台),或者手动编写GLSL 计算代码。

以下信息仅适用于仅限 HLSL 或仅限 GLSL 的计算着色器,不适用于跨平台构建。这是因为此信息可能导致计算着色器源代码从某些平台中排除。

  • CGPROGRAMENDCG 关键字包围的计算着色器源代码不会针对非 HLSL 平台进行处理。

  • GLSLPROGRAMENDGLSL 关键字包围的计算着色器源代码被视为 GLSL 源代码,并逐字输出。这仅在针对 OpenGL 或 GLSL 平台时有效。您还应该注意,虽然自动转换的着色器在缓冲区上遵循 HLSL 数据布局,但手动编写的 GLSL 着色器遵循 GLSL 布局规则。

创建计算着色器
运行计算着色器