DreamShaderLang
插件参考参数

SamplerType

SamplerType

SamplerType

DreamShader » Parameters » SamplerType

用于设置纹理节点如何解释其纹理的元数据键:位于生成的 UMaterialExpressionTextureBase 子类上的 EMaterialSamplerType。

声明于.dsm, .dsf — 纹理值 Properties 声明上的 [ … ] 元数据块
种类元数据键
生成对生成的节点上 SamplerType 的写入
起始版本1.2.4

概要

<texture-token> <name> [ = <default> ] [ SamplerType = "<value>" [ ; <entry> … ] ] ;

(自 2.0.0 起) SamplerType 在声明上有自己的一条路径:在紧凑纹理标记或 TextureObjectParameter 上,它会成为 2.0 的 /// @sampler 指令(去掉 SAMPLERTYPE_ 前缀),并由发射器的枚举字面量匹配器解析(当没有匹配时使用 DSH8235;空值则为 DSH7222)。在纹理采样标记上(会在其使用处展开),它是反射节点的参数,在源绑定时会根据引擎目录进行检查。

适用于生成的节点派生自 UMaterialExpressionTextureBase 的每个声明:

声明节点SamplerType 是否适用
Texture2D / TextureCube / Texture2DArray / Texture3D / VolumeTextureTextureObjectParameter是
const Texture2D 及其他四个紧凑纹理标记TextureObject是
TextureObjectParameterTextureObjectParameter是
TextureSampleParameter2D … TextureSampleParameterSubUV匹配的采样参数是
RuntimeVirtualTextureSampleParameter, SparseVolumeTextureSampleParameter—否 — 这些类没有 SamplerType(DSH5213)
SpriteTextureSampler, TextureCollectionParameter, SparseVolumeTextureObjectParameter—该标记没有 2.0 形式(DSH3253)

值

17 个值。每一行是一个枚举项;行中的所有四种拼写都会选择它,比较时会去除空格、_、-、:、. 和 / 并忽略大小写 — 因此 "linear color"、"Linear-Color" 和 "linearcolor" 与 LinearColor 是同一个值。

值枚举常量完全限定名DisplayName 拼写
ColorSAMPLERTYPE_ColorEMaterialSamplerType::SAMPLERTYPE_ColorColor
GrayscaleSAMPLERTYPE_GrayscaleEMaterialSamplerType::SAMPLERTYPE_GrayscaleGrayscale
AlphaSAMPLERTYPE_AlphaEMaterialSamplerType::SAMPLERTYPE_AlphaAlpha
NormalSAMPLERTYPE_NormalEMaterialSamplerType::SAMPLERTYPE_NormalNormal
MasksSAMPLERTYPE_MasksEMaterialSamplerType::SAMPLERTYPE_MasksMasks
DistanceFieldFontSAMPLERTYPE_DistanceFieldFontEMaterialSamplerType::SAMPLERTYPE_DistanceFieldFontDistance Field Font
LinearColorSAMPLERTYPE_LinearColorEMaterialSamplerType::SAMPLERTYPE_LinearColorLinear Color
LinearGrayscaleSAMPLERTYPE_LinearGrayscaleEMaterialSamplerType::SAMPLERTYPE_LinearGrayscaleLinear Grayscale
DataSAMPLERTYPE_DataEMaterialSamplerType::SAMPLERTYPE_DataData
ExternalSAMPLERTYPE_ExternalEMaterialSamplerType::SAMPLERTYPE_ExternalExternal
VirtualColorSAMPLERTYPE_VirtualColorEMaterialSamplerType::SAMPLERTYPE_VirtualColorVirtual Color
VirtualGrayscaleSAMPLERTYPE_VirtualGrayscaleEMaterialSamplerType::SAMPLERTYPE_VirtualGrayscaleVirtual Grayscale
VirtualAlphaSAMPLERTYPE_VirtualAlphaEMaterialSamplerType::SAMPLERTYPE_VirtualAlphaVirtual Alpha
VirtualNormalSAMPLERTYPE_VirtualNormalEMaterialSamplerType::SAMPLERTYPE_VirtualNormalVirtual Normal
VirtualMasksSAMPLERTYPE_VirtualMasksEMaterialSamplerType::SAMPLERTYPE_VirtualMasksVirtual Mask
VirtualLinearColorSAMPLERTYPE_VirtualLinearColorEMaterialSamplerType::SAMPLERTYPE_VirtualLinearColorVirtual Linear Color
VirtualLinearGrayscaleSAMPLERTYPE_VirtualLinearGrayscaleEMaterialSamplerType::SAMPLERTYPE_VirtualLinearGrayscaleVirtual Linear Grayscale

DistanceFieldFont 或 External 没有虚拟对应项。

[!NOTE] 在纹理采样标记上,该值会根据引擎目录列出的 17 个枚举项名称进行检查 (自 2.0.0 起)。若能规范化为其中之一(SAMPLERTYPE_Normal、linear color),则会以 DSH5278 警告被接受;而 DisplayName 若不是枚举项名称 — 例如 Virtual Mask — 则会被 DSH5215。在声明上,四种拼写都可用。

[!NOTE] 枚举项列表以哨兵值 SAMPLERTYPE_MAX 结尾。它不携带 Hidden 元数据,因此在声明上 [SamplerType="SAMPLERTYPE_MAX"] 和 [SamplerType="MAX"] 会直接解析而不会报错,并写入一个并非采样器类型的值。它不是可用值。纹理采样标记所检查的目录不列出它(DSH5215)。

推断与覆盖顺序

步骤发生的情况
1创建节点并分配其纹理资产 — 来自 = Path(…)、来自所声明维度的引擎回退资产,或对于没有资产的采样器参数由 SetDefaultTexture() 分配
2如果源未给出 SamplerType,AutoSetSampleType() 会根据所分配纹理的压缩设置和 sRGB 标志推断出一个值
3如果源给出了该值,则写入该值

显式的 SamplerType 始终优先:具有该值的节点完全不会运行推断。省略该键意味着该值会跟随资产 — 如果资产的压缩设置发生变化,该值也会变化。

[!NOTE] 反编译器 始终显式发出 SamplerType,即使它与推断值相同,因此当资产稍后被重新压缩时,UMaterial → .dsm → UMaterial 的往返过程不会产生偏移。

SamplerSource

UMaterialExpressionTextureSample 子类上的伴随键 — 采样使用哪个采样器状态。它仅适用于纹理采样标记,因此其值会如上所述根据目录进行检查。

值枚举常量DisplayName 拼写含义
FromTextureAssetSSM_FromTextureAssetFrom texture asset从纹理获取采样器;会占用着色器有限的采样器槽位之一
Wrap_WorldGroupSettingsSSM_Wrap_WorldGroupSettingsShared: Wrap共享采样器,环绕寻址,过滤器来自世界纹理组;不占用槽位
Clamp_WorldGroupSettingsSSM_Clamp_WorldGroupSettingsShared: Clamp共享采样器,钳制寻址,过滤器来自世界纹理组;不占用槽位
TerrainWeightmapGroupSettingsSSM_TerrainWeightmapGroupSettings—不可选择 — 标记为 UMETA(Hidden),且不在目录中

默认值为 FromTextureAsset。写入枚举项名称 — [SamplerSource="Wrap_WorldGroupSettings"];SSM_Wrap_WorldGroupSettings 会以 DSH5278 被接受。显示名称 Shared: Wrap 和 Shared: Clamp 在目录中不会规范化为任何内容,且会被 DSH5215 (自 2.0.0 起;1.x 接受它们)。

以下是反编译器在每个纹理采样参数上发出的键,以及它视为默认值的值。它们都是普通的反射元数据。

键类型默认值
SamplerTypeEMaterialSamplerType从资产派生
SamplerSourceESamplerSourceModeFromTextureAsset
MipValueModeETextureMipValueModeNone
GatherMode (自 UE 5.6 起)enumNone
AutomaticViewMipBiasbooltrue
ConstCoordinateuint80
ConstMipValueint32-1
IsDefaultMeshpaintTextureboolfalse
SortPriorityint3232

MipValueMode 是唯一会改变节点 引脚 名称的键,因而也会改变 调用形式在活动节点上可以匹配哪些名称。

维度验证与推断

SamplerType 描述的是解释方式;纹理的 维度 是另一项独立的检查。

声明是否声明维度检查内容
Texture2D、TextureCube、Texture2DArray、Texture3D、VolumeTexture是另一个维度的 Class'…' 壳(DSH1044);不检查已加载的资产 (自 2.0.0 起)
同样五个标记的 const 形式是同上
TextureObjectParameter否维度取自已加载的资产
TextureSampleParameter2D / 2DArray / Cube / Volume / SubUV是,来自标记的后缀与紧凑标记一样检查壳
TextureSampleParameterCubeArray否仅检查壳是否命名了一个纹理(DSH1043)

TextureObjectParameter 的维度由其默认值所加载的资产读出:UTextureCube → TextureCube,UTexture2DArray → Texture2DArray,UVolumeTexture → VolumeTexture,其他任何值—— 或者默认值未加载——Texture2D。

[!WARNING] 一个 TextureSampleParameterCube 若通过纯对象路径指向 2D 纹理,会干净地生成, 随后在 Unreal 的着色器编译器中失败。参见 参数节点标记。

诊断

代码触发条件
DSH8235声明的 SamplerType 在四种拼写下均不匹配任何枚举值
DSH7222声明的 SamplerType 为空
DSH5215纹理采样标记的 SamplerType 或 SamplerSource 不是目录列出的枚举值
DSH5278纹理采样标记的值是某枚举值的 1.x 拼写(警告)
DSH5213节点类没有 SamplerType(或没有 SamplerSource)
DSH1043 / DSH1044纹理默认值的 Class'…' 命名了非纹理 / 另一维度的纹理

示例

Shader(Name="Docs/M_SamplerType")
{
    Properties = {
        // Explicit: linear data, shared sampler, no slot consumed.
        TextureSampleParameter2D MaskMap = Path(Game, "Textures/T_Mask") [
            SamplerType   = "LinearColor";
            SamplerSource = "Wrap_WorldGroupSettings";
            MipValueMode  = "None";
        ];

        // Inferred: SamplerType follows the asset's compression settings.
        TextureSampleParameter2D BaseMap = Path(Game, "Textures/T_Base");

        // A 1.x spelling: accepted, with DSH5278.
        TextureSampleParameterCube Env = Path(Engine, "EngineResources/DefaultTextureCube") [
            SamplerType = "linear color"
        ];

        const Texture2D Lut = Path(Game, "Textures/T_Lut") [SamplerType = "Data"];
    }

    Settings = { Domain = "Surface"; ShadingModel = "DefaultLit"; BlendMode = "Opaque"; }
    Outputs  = { vec3 Color; Base.BaseColor = Color; }

    Graph = {
        vec2 UV = UE.TexCoord(Index = 0);
        vec4 B  = BaseMap(Coordinates = UV);
        vec4 M  = MaskMap(Coordinates = UV);
        Color = B.rgb * M.r;
    }
}

应用后的值:

MaskMap  SamplerType = SAMPLERTYPE_LinearColor  SamplerSource = SSM_Wrap_WorldGroupSettings
BaseMap  SamplerType = <AutoSetSampleType from /Game/Textures/T_Base>
Env      SamplerType = SAMPLERTYPE_LinearColor  ("linear color" normalizes to LinearColor; DSH5278)
Lut      SamplerType = SAMPLERTYPE_Data         on a TextureObject (const) node

Env 和 Lut 在函数体读取它们时应用;此 Graph 不读取,因此它们不构建任何东西。

另请参阅

本页目录