What is a Shading Model in UE5?什么是 UE5 中的着色模型?

A shading model (or BRDF model) defines how a surface responds to light — specifically, the mathematical function that computes the ratio of outgoing radiance to incoming irradiance for a given surface point. In UE5, each pixel in the GBuffer stores a shading model ID (packed in GBufferA.a as a 4-bit integer). The deferred lighting pass reads this ID and dispatches to the correct BRDF evaluation code.

着色模型(或 BRDF 模型)定义了表面如何响应光照—— 具体来说,是计算给定表面点处出射辐射率与入射辐照度之比的数学函数。 在 UE5 中,GBuffer 中的每个像素存储一个着色模型 ID (以 4 位整数打包在 GBufferA.a 中)。延迟光照通道读取这个 ID 并分发到正确的 BRDF 计算代码。

Shading Model IDs in UE5 (ShadingCommon.ush): MSM_Unlit = 0 MSM_DefaultLit = 1 MSM_Subsurface = 2 MSM_PreintegratedSkin = 3 MSM_ClearCoat = 4 MSM_SubsurfaceProfile = 5 MSM_TwoSidedFoliage = 6 MSM_Hair = 7 MSM_Cloth = 8 MSM_Eye = 9 MSM_SingleLayerWater = 10 MSM_ThinTranslucent = 11 MSM_Strata = 12 MSM_FromMaterial = 128 Deferred Lighting dispatch (DeferredLightingCommon.usf): switch (ShadingModelID) { case MSM_DefaultLit: return DefaultLitBxDF(...); case MSM_Subsurface: return SubsurfaceBxDF(...); case MSM_ClearCoat: return ClearCoatBxDF(...); case MSM_Hair: return HairBxDF(...); ... }

Every shading model maps to a set of GBuffer slots. UE packs multiple values per render target channel (e.g., roughness + metallic + specular into GBufferB). Different shading models repurpose these slots for their own parameters. This is why switching a material's shading model changes what inputs are visible in the Material Editor.

每个着色模型映射到一组 GBuffer 槽位。UE 将多个值打包进每个渲染目标通道 (例如,将粗糙度 + 金属度 + 高光度打包到 GBufferB)。不同的着色模型重新用途化这些槽位 用于各自的参数。这就是为什么更改材质着色模型会改变材质编辑器中可见输入项的原因。

Default Lit — Industry-Standard PBRDefault Lit — 行业标准 PBR

MSM_DefaultLit = 1 Low Cost

The standard physically-based rendering (PBR) model used for the vast majority of surfaces: metals, plastics, stone, painted surfaces, etc. It combines a Lambertian diffuse (or Burley normalized diffuse for more accurate energy conservation) with a GGX specular BRDF using the Smith masking-shadowing function and Schlick Fresnel.

用于绝大多数表面(金属、塑料、石材、涂漆表面等)的标准基于物理的渲染(PBR)模型。 它将 Lambert 漫反射(或 Burley 归一化漫反射以获得更精确的能量守恒) 与使用 Smith 掩蔽-遮蔽函数和 Schlick Fresnel 的 GGX 镜面 BRDF 结合。

The Math数学原理

// GGX (Trowbridge-Reitz) Normal Distribution Function
// Probability that microfacets are oriented exactly toward H (half-vector)
// α = Roughness² (Disney remapping — more linear perceptual response)
float D_GGX(float α, float NoH)
{
    float a2 = α * α;
    float d  = (NoH * a2 - NoH) * NoH + 1.0;  // = (NoH²(a2-1)+1)
    return a2 / (PI * d * d);
}

// Smith Joint Masking-Shadowing (height-correlated, GGX variant)
// Accounts for the probability that the ray from L and V are not occluded
float Vis_SmithJointApprox(float α, float NoV, float NoL)
{
    float a  = α;
    float LambdaV = NoL * (NoV * (1 - a) + a);
    float LambdaL = NoV * (NoL * (1 - a) + a);
    return 0.5f * rcp(LambdaV + LambdaL);
}

// Schlick Fresnel Approximation
// F0 = specular reflectance at normal incidence
// For dielectrics: F0 ≈ ((IOR-1)/(IOR+1))²  (water=0.02, glass=0.04)
// For metals:      F0 = BaseColor (tinted specular)
float3 F_Schlick(float3 F0, float VoH)
{
    float Fc = pow5(1 - VoH);
    return Fc + (1 - Fc) * F0;
}

// Full Specular BRDF: f_spec = D · Vis · F
// (where Vis already includes the 1/(4·NoL·NoV) denominator)
float3 SpecularGGX(float Roughness, float3 SpecColor, BxDFContext Context)
{
    float  α   = Roughness * Roughness;
    float  D   = D_GGX(α, Context.NoH);
    float  Vis = Vis_SmithJointApprox(α, Context.NoV, Context.NoL);
    float3 F   = F_Schlick(SpecColor, Context.VoH);
    return (D * Vis) * F;
}

// Full Default Lit BRDF:
// f = Diffuse_Lambert(BaseColor * (1-Metallic)) + SpecularGGX(F0, Roughness)
// where F0 = lerp(0.04, BaseColor, Metallic)

Key Material Inputs关键材质输入

Input输入Meaning & Range含义与范围
Base ColorAlbedo (diffuse color for dielectrics, specular tint for metals). RGB [0–1], avoid values below 0.05 or above 0.95.反照率(电介质的漫反射颜色,金属的镜面色调)。RGB [0–1],避免低于 0.05 或高于 0.95 的值。
Metallic0 = dielectric (plastic/stone), 1 = conductor (gold/chrome). Binary in practice; avoid intermediate values except blended surfaces.0 = 电介质(塑料/石材),1 = 导体(金/铬)。实际使用中为二值;除混合表面外避免中间值。
Roughness0 = perfect mirror, 1 = fully diffuse. Controls GGX α (internally squared). Perceptually linear.0 = 完美镜面,1 = 完全漫射。控制 GGX α(内部平方)。感知线性。
SpecularF0 scale for dielectrics only [0–1] → remapped to [0–0.08]. Default 0.5 = F0 of 0.04 = most plastics. Do not use to darken metals.仅用于电介质的 F0 缩放 [0–1] → 重映射到 [0–0.08]。默认 0.5 = F0 为 0.04 = 大多数塑料。不要用于使金属变暗。
NormalTangent-space normal map. Perturbs the shading normal N, affecting both diffuse and specular.切线空间法线贴图。扰动着色法线 N,同时影响漫射和镜面。

Unlit — No Lighting EvaluationUnlit — 无光照计算

MSM_Unlit = 0Cheapest

The surface emits exactly its Emissive Color value with no BRDF computation at all. No diffuse, no specular, no shadows applied. Ideal for: holographic displays, neon signs, fire/explosion particles, sky domes, any surface that should not respond to scene lighting. The GBuffer stores only the emissive value and the pixel bypasses the entire deferred lighting pass.

表面发射其 Emissive Color 值,完全不进行 BRDF 计算。没有漫射、没有镜面、不应用阴影。适用于:全息显示、霓虹灯、火焰/爆炸粒子、天穹、任何不应响应场景光照的表面。GBuffer 仅存储自发光值,像素完全跳过延迟光照通道。

Subsurface — Simple Wrap Lighting SSSSubsurface — 简单包裹光照次表面散射

MSM_Subsurface = 2Low (+wrap term)

A cheap approximation of subsurface scattering (SSS) using a modified diffuse term that "wraps" around the terminator (the shadow boundary). Real skin, wax, marble, and jade all scatter light that enters the surface back out from nearby points — this model fakes that by softening the shadow boundary and adding a tinted subsurface color on the shadow side.

使用修改后的漫射项("包裹"明暗交界线)对次表面散射(SSS)进行廉价近似。 真实皮肤、蜡、大理石和玉石都会散射进入表面的光线并从附近点射出—— 此模型通过软化阴影边界并在阴影侧添加有色次表面颜色来模拟这一现象。

// SubsurfaceBxDF (ShadingModels.ush) — simplified
float3 SubsurfaceBxDF(FGBufferData GBuffer, float3 L, float3 V, FAreaLight AreaLight)
{
    // Standard PBR specular (same as Default Lit)
    float3 Spec = SpecularGGX(GBuffer.Roughness, GBuffer.SpecularColor, Context);

    // Wrap diffuse: extends the diffuse lit region past the terminator
    // WrapAmount in [0,1]: 0 = Lambert, 1 = full wrap (backlit)
    float WrapNoL = saturate((NoL + WrapAmount) / (1 + WrapAmount));

    float3 DiffuseLighting = Diffuse_Lambert(GBuffer.DiffuseColor) * WrapNoL;

    // Subsurface contribution: tinted by SubsurfaceColor, blended on shadow side
    // SubsurfaceColor stored in GBuffer.CustomData.rgb
    float SubsurfaceContrib = saturate(-NoL * 0.5 + 0.5);  // peaks at back-lit
    float3 Subsurface = GBuffer.SubsurfaceColor * SubsurfaceContrib;

    return (DiffuseLighting + Subsurface + Spec) * LightColor * NoL_clamped;
}

When to use: Candles, wax, plastic, gemstones, stylized skin where you want hint of SSS without the cost of a screen-space blur. For hero character skin, use Subsurface Profile instead.

适用场景:蜡烛、蜡、塑料、宝石、需要 SSS 效果但不想付出屏幕空间模糊代价的风格化皮肤。对于英雄角色皮肤,请改用 Subsurface Profile。

PreIntegrated Skin — LUT-Based Fast SSSPreIntegrated Skin — 基于 LUT 的快速 SSS

MSM_PreintegratedSkin = 3Low (+LUT lookup)

A step up from Subsurface: instead of a simple wrap formula, it looks up a pre-baked 2D LUT (PreIntegratedSkinBRDF.tga) indexed by (curvature × NdotL). The LUT encodes the integrated diffuse response of a Gaussian scattering profile for skin. It produces a characteristic warm red scatter at the shadow boundary without any screen-space pass.

比 Subsurface 更进一步:不是简单的包裹公式,而是查找以 (曲率 × NdotL) 为索引的 预烘焙 2D LUT(PreIntegratedSkinBRDF.tga)。LUT 编码了皮肤高斯散射剖面的积分漫射响应。 它在阴影边界产生特有的暖红色散射,无需任何屏幕空间通道。

When to use: NPC/background characters that need believable skin at lower cost than Subsurface Profile. Good for mobile targets where the screen-space blur pass of Subsurface Profile is too expensive.

适用场景:需要可信皮肤但成本低于 Subsurface Profile 的 NPC/背景角色。对于 Subsurface Profile 的屏幕空间模糊通道过于昂贵的移动端目标来说是好选择。

Subsurface Profile — High-Quality Burley SSSSubsurface Profile — 高质量 Burley SSS

MSM_SubsurfaceProfile = 5High (screen-space blur pass)

The highest-quality SSS in UE5. It uses a Burley normalized diffusion profile combined with a screen-space separable Gaussian blur to simulate the actual transport of light through skin, wax, or marble. The scatter radius and color tint are defined by a Subsurface Profile asset — a data asset that specifies the scatter falloff per color channel (red scatters furthest in skin, ~5–10mm; green ~2–3mm; blue ~1mm).

UE5 中最高质量的 SSS。它使用 Burley 归一化扩散剖面结合 屏幕空间可分离高斯模糊来模拟光线穿过皮肤、蜡或大理石的实际传输。 散射半径和颜色色调由 Subsurface Profile 资产定义—— 该数据资产按颜色通道指定散射衰减(红色在皮肤中散射最远,约 5–10mm;绿色约 2–3mm;蓝色约 1mm)。

Subsurface Profile rendering pipeline: 1. GBuffer Base Pass (normal): → Surface renders to GBufferA/B/C as usual → CustomData (GBuffer slot C) stores: Curvature, ProfileID 2. Deferred Lighting: → SSS transmittance evaluated for back-facing direct light → Separable blur output = sum of weighted Gaussian blurs (different radius per RGB channel) 3. PostProcessSubsurface.cpp: → Horizontal blur pass (X direction) → Vertical blur pass (Y direction) → Recombine: merge blurred subsurface with sharp specular (specular must NOT be blurred)

When to use: Hero characters (faces, hands), high-quality skin rendering, marble/jade/wax where scatter pattern matters. Requires assigning a SubsurfaceProfile asset to the material. Create one in Content Browser: right-click → Materials → Subsurface Profile.

适用场景:英雄角色(面部、手部)、高质量皮肤渲染、散射图案重要的大理石/玉石/蜡。需要为材质分配 SubsurfaceProfile 资产。在内容浏览器中创建:右键 → Materials → Subsurface Profile。

Clear Coat — Two-Layer Lacquered SurfaceClear Coat — 双层清漆表面

MSM_ClearCoat = 4Medium (+second specular lobe)

Models surfaces with a transparent coating over a different base material — car paint (clear lacquer over colored pigment), lacquered wood, phone screens, carbon fiber. It evaluates two specular BRDFs: one for the smooth coating layer (always low roughness) and one for the base material. Critically, it also handles the energy transfer between layers — the coating partially absorbs the light that reaches the base.

模拟不同基础材质上有透明涂层的表面——汽车油漆(有色颜料上的清漆)、漆木、手机屏幕、碳纤维。 它计算两个镜面 BRDF:一个用于光滑涂层(始终低粗糙度),一个用于基础材质。 关键是,它还处理层之间的能量传递——涂层部分吸收到达基础层的光。

// ClearCoatBxDF (ShadingModels.ush)
float3 ClearCoatBxDF(FGBufferData G, ...)
{
    // Clear coat layer (always smooth, ~Roughness=0.01–0.1)
    float ClearCoat         = G.CustomData.x;   // [0,1] coat thickness
    float ClearCoatRoughness= G.CustomData.y;   // coat roughness
    float3 CoatSpec = SpecularGGX(ClearCoatRoughness, 0.04, Context);

    // Energy loss to the base: coat absorbs some light
    float3 CoatAttenuation = 1 - ClearCoat * CoatSpec;

    // Base layer (full GGX with material Roughness + BaseColor)
    float3 BaseSpec = SpecularGGX(G.Roughness, G.SpecularColor, Context);
    float3 BaseDiff = Diffuse_Lambert(G.DiffuseColor);

    return CoatSpec * ClearCoat                  // coat specular
         + (BaseSpec + BaseDiff) * CoatAttenuation;  // base, attenuated
}

Additional inputs: Clear Coat (intensity 0–1), Clear Coat Roughness (usually 0.01–0.1), Clear Coat Bottom Normal (separate normal for the base layer — e.g., brushed metal direction under paint).

附加输入:Clear Coat(强度 0–1)、Clear Coat Roughness(通常 0.01–0.1)、Clear Coat Bottom Normal(基础层单独法线——例如油漆下的拉丝金属方向)。

Two-Sided Foliage — Transmission Through Thin LeavesTwo-Sided Foliage — 薄叶片透射

MSM_TwoSidedFoliage = 6Low

Designed for thin geometry like leaves and flower petals. It adds a transmission term to the back face: when lit from behind, light "bleeds through" the leaf tinted by the Subsurface Color (typically a bright green/yellow). The transmission is a function of the back-face NoL — maximum when the light is directly behind the surface.

专为叶片和花瓣等薄几何体设计。它在背面添加透射项: 从背面照射时,光线以 Subsurface Color(通常是明亮的绿/黄色)着色"透过"叶片。 透射是背面 NoL 的函数——当光线直接在表面后方时最大。

Key inputs: Subsurface Color = transmission tint (bright green for leaves). Opacity controls alpha masking. Unlike real SSS, there is no screen-space blur — the transmission is purely per-pixel in the lighting shader.

关键输入:Subsurface Color = 透射色调(叶片用明亮绿色)。Opacity 控制 Alpha 遮罩。与真实 SSS 不同,没有屏幕空间模糊——透射完全在光照 Shader 中逐像素计算。

Hair — Marschner Multi-Lobe Fiber BRDFHair — Marschner 多叶瓣纤维 BRDF

MSM_Hair = 7High (3-lobe BRDF + deep shadow)

Hair fibers are cylindrical, not flat — so a planar BRDF is fundamentally wrong for them. UE5 uses the Marschner model, which treats each strand as a transparent cylinder and computes three separate scattering lobes based on how light interacts with the fiber geometry.

头发纤维是圆柱形的,而不是平面的——因此平面 BRDF 对它们从根本上就是错误的。 UE5 使用 Marschner 模型,将每根发丝视为透明圆柱体, 并根据光线与纤维几何体的交互方式计算三个独立的散射叶瓣。

Marschner Hair BRDF — Three Lobes: R lobe (Reflect): Light reflects off the outer cuticle surface. → Sharp highlight, slightly shifted toward tip → Tinted by: none (white-ish for blonde, grey for brown) → Controlled by: Roughness (longitudinal spread) TT lobe (Transmit-Transmit): Light enters the fiber, refracts, exits the other side. → Soft forward-scatter visible when backlit (halo effect) → Tinted by: hair pigment color (melanin absorption) → Controlled by: Scatter (how much light passes through) TRT lobe (Transmit-Reflect-Transmit): Light enters, bounces off inner surface, exits on same side. → Wide, warm highlight (main colored sheen) → Tinted by: hair pigment (typically warm amber/red) → This is the dominant lobe for dark hair in direct light Total BRDF = weight_R * R + weight_TT * TT + weight_TRT * TRT
// HairBxDF (ShadingModels.ush) — conceptual structure
float3 HairBxDF(FGBufferData G, float3 L, float3 V, float3 T /*fiber tangent*/)
{
    // Strand tangent is stored in GBuffer instead of normal
    float SinThetaL = dot(T, L);   // longitudinal angle
    float SinThetaV = dot(T, V);

    // Longitudinal scattering (Gaussian, parametric β_M)
    float Beta_M = G.Roughness;           // longitudinal roughness
    float Beta_N = G.CustomData.x;        // azimuthal roughness

    // Compute per-lobe weights from pigmentation
    float3 Absorption = G.BaseColor;      // melanin absorption

    float3 R_lobe   = Hair_R(Beta_M, SinThetaL, SinThetaV, ...);
    float3 TT_lobe  = Hair_TT(Beta_M, Beta_N, Absorption, ...);
    float3 TRT_lobe = Hair_TRT(Beta_M, Beta_N, Absorption, ...);

    return R_lobe + TT_lobe + TRT_lobe;
}

Key inputs: Base Color = melanin pigment (blonde = light yellow, black = near black). Roughness = longitudinal roughness (how broad the highlight is along the fiber). Scatter (CustomData) = how translucent the fiber is. Note: the normal input is ignored — the model uses the tangent (fiber direction) instead.

关键输入:Base Color = 黑色素色素(金发 = 浅黄色,黑发 = 接近黑色)。Roughness = 纵向粗糙度(高光沿纤维的宽度)。Scatter(CustomData)= 纤维的半透明程度。注意:法线输入被忽略——模型使用切线(纤维方向)代替。

Cloth — Ashikhmin Retro-Reflective VelvetCloth — Ashikhmin 逆反射绒布

MSM_Cloth = 8Medium

Cloth fibers create a unique appearance: strong retro-reflection (light bounces back toward the source) and a characteristic limb brightening at grazing angles (velvet sheen). The Cloth model replaces the GGX specular with the Ashikhmin-Shirley velvet distribution and adds a FuzzColor for the sheen tint.

布料纤维产生独特外观:强烈的逆反射(光线反弹回光源方向)和 在掠射角处特有的边缘增亮(绒面光泽)。 Cloth 模型将 GGX 镜面替换为 Ashikhmin-Shirley 绒布分布, 并添加 FuzzColor 用于光泽色调。

// Cloth velvet distribution (Ashikhmin 2000)
// Peaks at grazing angles, back-scatters toward light source
float D_Cloth(float Roughness, float NoH)
{
    float CosH2 = NoH * NoH;
    float SinH2 = 1 - CosH2;
    float α2    = Roughness * Roughness;
    return (1 + 4 * exp(-SinH2 / (CosH2 * α2))) / (PI * (1 + 4 * α2));
}

// Cloth BRDF = D_Cloth(velvet) + modified diffuse with FuzzColor
// FuzzColor stored in GBuffer.CustomData.rgb
// SubsurfaceColor = underlying cloth color (contributes to diffuse)

Key inputs: Base Color = underlying woven fabric color. FuzzColor = the sheen tint (often lighter/desaturated version of Base Color). Roughness = how broad the sheen is. Do not use high Metallic — cloth is always dielectric.

关键输入:Base Color = 底层织物颜色。FuzzColor = 光泽色调(通常是 Base Color 的更亮/更不饱和版本)。Roughness = 光泽的宽度。不要使用高 Metallic——布料始终是电介质。

Eye — Cornea Refraction & IrisEye — 角膜折射与虹膜

MSM_Eye = 9High (refraction + SSS)

The Eye shading model accurately simulates the layered structure of the human eye: a smooth cornea (IOR ≈ 1.376) that refracts the view ray into the iris plane, parallax from the iris depth, and the sclera (white of the eye) with subsurface scattering. The cornea produces a wet, glassy highlight.

Eye 着色模型精确模拟人眼的分层结构:光滑的角膜(IOR ≈ 1.376) 将视线光线折射到虹膜平面、来自虹膜深度的视差,以及具有次表面散射的巩膜(眼白)。 角膜产生湿润的玻璃质高光。

Key inputs: Iris Mask separates iris from sclera. Iris Distance controls parallax depth. Cornea Roughness = 0 for fresh eyes, 0.1+ for dry/stylized. The iris texture should be authored from a top-down projection. Sclera uses Subsurface Profile for veins and blood-shot effects.

关键输入:Iris Mask 将虹膜与巩膜分开。Iris Distance 控制视差深度。Cornea Roughness = 0 用于清澈眼睛,0.1+ 用于干燥/风格化眼睛。虹膜纹理应从俯视投影创作。巩膜使用 Subsurface Profile 实现血管和充血效果。

Single Layer Water — Absorption & RefractionSingle Layer Water — 水体吸收与折射

MSM_SingleLayerWater = 10High (separate depth/absorption pass)

A dedicated shading model for real-time water surfaces. It handles four phenomena that regular materials cannot: depth-based absorption (water gets darker/more colored the deeper you look), refraction (distortion of what's underwater), surface scattering (Mie/Rayleigh scattering of volumetric water color), and integration with SSR/Lumen reflections.

用于实时水面的专用着色模型。它处理普通材质无法处理的四种现象: 基于深度的吸收(越深水看起来越暗/颜色越深)、 折射(水下内容的扭曲)、表面散射(体积水色的 Mie/Rayleigh 散射), 以及与 SSR/Lumen 反射的集成

// Key water material parameters (SingleLayerWaterShading.ush)
// These are special material inputs only visible in SingleLayerWater shading model:

float3 WaterScatterColor;        // color of scattered light in water body
float3 WaterAbsorptionColor;     // what color gets absorbed (complement of visible color)
float  WaterPhaseG;              // Henyey-Greenstein phase g [-1..1], 0=isotropic
float  WaterColorAbsorptionDepth;// depth in cm at which absorption kicks in
float  WaterShoreline;           // [0,1] mask for shoreline foam blending

// Water depth computed from scene depth buffer:
// float WaterDepth = (PixelWorldPos.z - BedWorldPos.z);
// float3 Transmittance = exp(-WaterAbsorptionColor * WaterDepth / 100.0);

See Water Rendering for the complete material setup and rendering pipeline detail.

完整材质设置和渲染管线详情请参见水体渲染

Thin Translucent — Thin Glass & FabricThin Translucent — 薄玻璃与织物

MSM_ThinTranslucent = 11Medium

Standard translucency in UE5 accumulates volume along the view ray — wrong for flat, thin surfaces like window glass. Thin Translucent treats the surface as infinitely thin: it produces a sharp specular on the front face and transmits the correct proportion of light through, tinted by Transmission Color. The transmission fraction = 1 - (specular + diffuse).

UE5 的标准半透明沿视线光线积累体积——对于窗玻璃等平坦薄表面来说是错误的。 Thin Translucent 将表面视为无限薄:它在正面产生清晰的镜面反射, 并以 Transmission Color 着色传输正确比例的光线。 透射比例 = 1 - (镜面 + 漫射)。

When to use: Window glass, thin plastic sheets, stained glass, colored cellophane. NOT for volumetric translucent objects — use regular Translucent + Subsurface for those.

适用场景:窗玻璃、薄塑料片、彩色玻璃、有色玻璃纸。不适用于体积半透明对象——对于那些请使用常规半透明 + 次表面。

Substrate — Layered BSDF System (UE 5.3+)Substrate — 分层 BSDF 系统(UE 5.3+)

MSM_Strata = 12High (variable per configuration)

Substrate (formerly Strata) is the next generation material system in UE5. Instead of choosing a single fixed shading model, Substrate lets you layer any combination of BSDFs using operators. Each BSDF slab is independently parameterized; slabs can be blended with over, add, or weight operators.

Substrate(原名 Strata)是 UE5 的下一代材质系统。 不是选择单一固定着色模型,Substrate 允许你使用运算符以任意组合分层 BSDF。 每个 BSDF Slab 独立参数化;Slab 可以用 overaddweight 运算符混合。

// Substrate material example: car paint with flakes
// Material Editor: chain of Substrate nodes

SubstrateSlabBSDF(
    DiffuseColor = BaseColor,
    Roughness    = 0.3,
    F0           = 0.04,          // plastic
    Normal       = BumpNormal
)
// "over" operator: coat layer on top of base
StrataLayering(
    Top   = SubstrateSlabBSDF(Roughness=0.05, ...),  // clear coat
    Base  = AboveSlabBSDF,
    Thickness = CoatThicknessMap
)

// Available BSDF node types in Substrate:
// SubstrateSlabBSDF     — standard PBR slab (replaces Default Lit)
// SubstrateHairBSDF     — Marschner for fibers
// SubstrateEyeBSDF      — eye cornea/iris model
// SubstrateVolumetricFogCloudBSDF — volumetric effects
// SubstrateUnlit        — emission only
// SubstrateCoatLayering — clear coat with proper energy transfer

Enable Substrate in Project Settings → Rendering → Substrate. Note: Substrate is still evolving and has hardware-specific fallback paths. On hardware that supports 128+ byte GBuffers, full BSDF layering is preserved; older hardware uses a simplified "legacy" conversion.

在"项目设置 → 渲染 → Substrate"中启用 Substrate。注意:Substrate 仍在演进中,并有特定于硬件的回退路径。在支持 128+ 字节 GBuffer 的硬件上,完整的 BSDF 分层被保留;较旧硬件使用简化的"传统"转换。

Quick Comparison Table快速对比表

Model模型 Best For最适合 GPU CostGPU 开销 Extra Passes?额外通道?
UnlitParticles, holograms, emissive粒子、全息、自发光Zero (skip lighting)零(跳过光照)None
Default LitEverything else (90% of assets)其他所有(90% 资产)Baseline基准None
SubsurfaceStylized skin, wax, candles风格化皮肤、蜡、蜡烛+10%+10%None
PreIntegrated SkinBackground characters背景角色+5% (+LUT)+5%(+LUT)None
Subsurface ProfileHero skin, marble英雄皮肤、大理石High (+blur pass)高(+模糊通道)2× blur passes2× 模糊通道
Clear CoatCar paint, lacquer, phones汽车油漆、清漆、手机+20% (2× specular)+20%(2× 镜面)None
Two-Sided FoliageLeaves, petals叶片、花瓣+5%+5%None
HairStrand-based hair发丝毛发High (3 lobes)高(3 叶瓣)Deep shadow maps深度阴影贴图
ClothVelvet, microfiber天鹅绒、超细纤维+15%+15%None
EyeCharacter eyes角色眼睛High (refraction)高(折射)None
Single Layer WaterWater surfaces水面Very High非常高Depth + refraction passes深度+折射通道
Thin TranslucentWindow glass, film窗玻璃、薄膜+10%+10%None
SubstrateComplex layered materials复杂分层材质Variable (config-dependent)可变(取决于配置)Depends on layers取决于层数

Source Navigation源码导航

All shader paths relative to Engine/Shaders/Private/

所有 Shader 路径相对于 Engine/Shaders/Private/

Unreal Engine 5.6 · Engine/Shaders/Private/ · Engine/Source/Runtime/Renderer/Private/Substrate/
Source analysis · For learning purposes