Unity3D:面向 HLSL 中的着色器模型和 GPU 功能

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

面向 HLSL 中的着色器模型和 GPU 功能

您可以使用#pragma指令来指示着色器需要某些 GPU 功能。在运行时,Unity 使用此信息来确定着色器程序是否与当前硬件兼容。

您可以使用指令指定单个 GPU 功能,也可以使用指令指定着色器模型。着色器模型是一组 GPU 功能的简写;在内部,它与具有相同功能列表的指令相同。#pragma require#pragma target#pragma require

正确描述着色器所需的 GPU 功能非常重要。如果着色器使用未包含在要求列表中的功能,则可能导致编译时错误,或者设备在运行时无法支持着色器。

默认行为

默认情况下,Unity 使用 编译着色器,对应于 。#pragma require derivatives#pragma target 2.5

着色器阶段的特殊要求

如果您的着色器定义了某些着色器阶段,Unity 会自动将项目添加到需求列表中。

  • 如果着色器定义了几何体阶段 (带),Unity 会自动添加到要求列表中。#pragma geometrygeometry
  • 如果着色器定义了细分阶段(带 或 ),Unity 会自动添加到要求列表中。#pragma hull#pragma domaintessellation

如果要求列表(或等效目标值)尚未包含这些值,Unity 将在编译着色器时显示一条警告消息,指示它已添加这些要求。若要避免看到此警告消息,请在代码中显式添加要求或使用适当的目标值。

指定 GPU 功能或着色器模型

要指定所需的要素,请使用指令,后跟空格分隔值的列表。例如:#pragma require

#pragma require integers mrt8

还可以使用该指令,后跟冒号和空格分隔的着色器关键字列表。这意味着该要求仅适用于启用任何给定关键字时使用的变体。#pragma require

例如:

#pragma require integers mrt8 : EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

您可以使用多行。在此示例中,着色器在所有情况下都需要,并且如果启用了EXAMPLE_KEYWORD。#pragma requireintegersmrt8

#pragma require integers
#pragma require integers mrt8 : EXAMPLE_KEYWORD

要指定着色器模型,请使用指令。例如:#pragma target

#pragma target 4.0

还可以使用该指令,后跟以空格分隔的着色器关键字列表。这意味着该要求仅适用于启用任何给定关键字时使用的变体。#pragma target

例如:

#pragma target 4.0 EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

注意:用于指定 和 关键字的语法略有不同。为 指定关键字时,将使用冒号。为 指定关键字时,不使用冒号。#pragma require#pragma target#pragma require#pragma target

“#pragma目标”值列表

以下是 Unity 使用的着色器模型列表,以及每个模型对应的值组合。#pragma require

注意:Unity 的着色器模型类似于 DirectX 着色器模型和 OpenGL 版本要求,但它们并不完全对应。仔细阅读说明,以确保您了解差异。

描述支持等效#pragma需要
2.0等效于 DirectX 着色器模型 2.0

有限数量的算术和纹理指令;8个插值器;无顶点纹理采样;片段着色器中没有衍生物;没有显式 LOD 纹理采样。
适用于 Unity 支持的所有平台。
2.5与 3.0 几乎相同,但只有 8 个插值器,并且没有明确的 LOD 纹理采样。DirectX 11 功能级别 9+OpenGL 3.2+

OpenGL ES 2.0
Vulkan
Metal
derivatives
3.0等效于 DirectX 着色器模型 3.0

.
DirectX 11 功能级别 10 +
OpenGL 3.2+
OpenGL ES 3.0+
Vulkan
Metal

可能适用于某些 OpenGL ES 2.0 设备,具体取决于驱动程序扩展和功能。
中的所有内容,以及:2.5
interpolators10 samplelod fragcoord
3.5相当于 OpenGL ES 3.0

DirectX 11 功能级别 10+OpenGL 3.2+

OpenGL ES 3+
Vulkan
Metal
中的所有内容,以及:3.0
interpolators15 mrt4 integers 2darray instancing
4.0等效于 DirectX 着色器模型 4.0,但不需要支持 8 个 MRT。DirectX 11 功能级别 10+OpenGL 3.2+OpenGL ES 3.1+

AEP
Vulkan
Metal(如果未定义几何舞台)
中的所有内容,以及:3.5
geometry
4.5相当于OpenGL ES 3.1DirectX 11 功能级别 11+OpenGL 4.3+

OpenGL ES 3.1
Vulkan
Metal
中的所有内容,以及:3.5
compute randomwrite msaatex
4.6相当于 OpenGL 4.1

这是 Mac 上支持的最高 OpenGL 级别。
DirectX 11 功能级别 11+OpenGL 4.1+OpenGL ES 3.1+

AEP
Vulkan
Metal(如果未定义几何阶段,并且未定义船体或域阶段)
中的所有内容,以及:4.0
cubearray tesshw tessellation msaatex
5.0等效于 DirectX 着色器模型 5.0,但不需要支持 32 个插值器或立方体贴图数组。DirectX 11 功能级别 11+OpenGL 4.3+OpenGL ES 3.1+

AEP
Vulkan
Metal(如果未定义几何阶段,并且未定义船体或域阶段)
中的所有内容,以及:4.0
compute randomwrite msaatex tesshw tessellation

有关控制台平台的着色器模型支持的信息,请参阅特定于平台的文档。

注意:

  • 在 DirectX 定义中,着色器模型 4.0 包括 ,着色器模型 5.0 包括 和 。Unity 不包括这些,以实现更广泛的兼容性。若要要求这些功能,请使用显式指令。mrt8interpolators32cubearray#pragma require
  • 如果使用的目标需要,但着色器未定义几何体阶段,Unity 将在编译时从要求列表中删除。geometrygeometry
  • 如果使用需要的目标,但着色器未定义船体或域阶段,Unity 将在编译时从要求列表中删除。tessellationtessellation

“#pragma要求”值列表

以下是该指令的所有有效值。#pragma require

描述
interpolators10至少有 10 个顶点到片段插值器(“变化”)可用。
interpolators15至少有 15 个顶点到片段插值器(“变化”)可用。

注意:在内部,这也会自动添加到要求列表中。
integers
interpolators32至少有 32 个顶点到片段插值器(“变化”)可用。
integers整数是受支持的数据类型,包括位/移位操作。

注意:在内部,这也会自动添加到要求列表中。
interpolators15
mrt4至少支持 4 个呈现目标。
mrt8至少支持 8 个呈现目标。
derivatives支持像素着色器派生指令 (ddx/ddy)。
samplelod支持显式纹理LOD采样(tex2Dlod / SampleLevel)。
fragcoord支持像素着色器中的像素位置(屏幕上的 XY、剪辑空间中的 ZW 深度)输入。
2darray2D 纹理数组是受支持的数据类型。
cubearray立方体贴图数组是受支持的数据类型。
instancing支持SV_InstanceID输入系统值。
geometry支持几何着色器阶段。
compute支持计算着色器、结构化缓冲区和原子操作。
randomwriteuav支持“随机写入”(UAV) 纹理。
tesshw支持硬件细分,但不一定支持细分(船体/域)着色器阶段。例如,Metal 支持曲面细分,但不支持船体或域阶段。
tessellation支持细分(船体/域)着色器阶段。
msaatex支持访问多采样纹理(HLSL中的Texture2DMS)的功能。
sparsetex具有驻留信息的稀疏纹理(DirectX 术语中的“Tier2”支持; HLSL 函数)。CheckAccessFullyMapped
framebufferfetchfbfetch支持帧缓冲提取(在像素着色器中读取输入像素颜色的功能)。
setrtarrayindexfromanyshader支持从任何着色器阶段(而不仅仅是几何着色器阶段)设置呈现器目标数组索引。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:HLSL 中的杂注指令 (mvrlink.com)

下一篇:Unity3D:面向 HLSL 中的图形 API 和平台 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号