2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UE5.7のSubstrateが従来形式のGBufferを扱う様子をHLSLで確認

Last updated at Posted at 2026-01-24

調査目的

UE5.7でBlendable GBufferが追加されました。一方でレガシーマテリアルも使い続けられます。これは、Substrateという新システムがレガシーを捨てるのではなく機能の一部として取り込んだように見えます。

しかし、新旧GBufferと新旧マテリアルは一見排他的で、相互運用が可能である事実は直感に反するようです。そこで、出力されるHLSLを確認してみました。

結論

UE5.7からのSubstrateは、マテリアルごとに新旧、GBufferの新旧を設定できます。これらはそれぞれ独立して選択可能であり、相互に可能な限りで互換性を保つように設計されています。

GBufferをBlendableにすると、SubstrateマテリアルはレガシーなShading Modelに内部的に変換されます。

GBufferをAdaptiveにすると、レガシーマテリアルはそのShading Modelが対応するSlabに内部的に変換されます。

Blendable GBuffer Adaptive GBuffer
マテリアルがShading Model そのまま Slabに変換
マテリアルがSubstrate Slab Shading Modelに変換 そのまま

Blendable GBufferを用いる場合、Substrate BSDFのDiffuse AlbedoとF0からMetallic, Specular, BaseColorが逆算されます。F90はBlendable GBufferに格納されることなく捨てられます。

HLSLの確認

DefaultLitとSubstrate Slabで金のマテリアルを作り、それぞれHLSLを確認します。

下のマテリアルを M_DefaultLit_Gold とします。

image.png

下のマテリアルを M_Substrate_Gold とします。

image.png

プロジェクト設定を変えながらそれぞれのHLSLを出力してみます。

image.png

上の”HLSL Code"で見たい情報にたどり着ける場合もありますが、そのまま実行できないコードスニペットの集合です。最終的に実行可能なHLSLは、例えば以下のようにDirectX SM6 -- Epic Quality → TBasePassPSFNoLightMapPolicy を選ぶと見られます。

image.png

それぞれのプロジェクト設定においてそれぞれのマテリアルが出力するHLSLを確認すると、概ね以下のような構造が確認できました。

プロジェクト設定 M_DefaultLit_Gold M_Substrate_Gold
Substrate materialsをOFF 旧マテリアルHLSL N/A
Blendable GBuffer 旧マテリアルHLSL 新マテリアル+変換コード
Adaptive GBuffer 旧マテリアルHLSL+変換コード 新マテリアル

Default LitがSubstrate Slabに変換される過程

SubstrateConvertLegacyMaterialStaticという関数で行われます。
処理内容を確認すると、Unlit, Hair, Single Layer Waterなど、各Shading Modelが対応するSlabに変換されます。

Substrate SlabがDefault LitなどのShading Modelに変換される過程

SubstrateMaterialExportOutという関数が従来方式のGBufferで使えるパラメータ郡に変換をしています。

SubstrateMaterialExportOutはFExportResultという構造体を返します。
FExportResultはMetallicやSpecularなど従来のGBufferの要素を含んでおり、これら値は最終的にSetGBufferForShadingModel関数でFGBufferData構造体に書き込まれます。

各要素の変換には以下ような関数郡が定義されており、それぞれFSubstrateBSDF構造体から従来方式のPBRパラメータを算出します。

  • SubstrateGetLegacyShadingModels
  • SubstrateGetBSDFMetallic
  • SubstrateGetBSDFSpecular
  • SubstrateGetBSDFBaseColor

レンダーターゲット

DirectX SM6 -- Epic Quality → TBasePassPSFNoLightMapPolicyでHLSLを見ると、MainPS関数にレンダーターゲットの形式が記述されます。

Blendable GBufferの時のMainPSです。

void MainPS
	(
    ...
        , out float4 OutTarget0 : SV_Target0
		, out float4 OutTarget1 : SV_Target1
		, out float4 OutTarget2 : SV_Target2
		, out float4 OutTarget3 : SV_Target3

Adaptive GBufferの時のMainPSです。

void MainPS
	(
    ...
   		, out float4 OutTarget0 : SV_Target0
		, out uint SubstrateOutput1 : SV_Target1
		, out uint SubstrateOutput2 : SV_Target2
		, out uint SubstrateOutput3 : SV_Target3
		, out uint SubstrateOutput4 : SV_Target4

F90が無視される実験

Blendable GBufferにはF90を格納できないので、F90ピンへの入力は無視されるはずです。試してみると実際その通りになりました。

以下Blendable GBufferの時です。
image.png

以下Adaptive GBufferの時です。
image.png

Diffuse Albedoが無視される実験

Diffuse AlbedoとF0両方から強い反射率を入力し、エネルギー保存の法則を破ってみます。Blendable GBufferは基本的には物理的にあり得ないマテリアルを格納できないので丸め込まれるはずです。

以下Blendable GBufferの時です。SubstrateGetBSDFMetallicで金属判定されてDiffuse Albedoが無視され、F0がBase Colorとして格納されています。

image.png

以下Adaptive GBufferの時です。

image.png

リファレンス

UE5.7のBlendable/Adaptive GBufferと新旧マテリアルについて、実践的な運用の考え方について述べられています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?