LoginSignup
0
2

More than 1 year has passed since last update.

【Unreal Engine】マテリアルのWorldAlignedBlendノード

Posted at

Unreal EngineのマテリアルでWorldAlignedBlendノードを用いることで法線の向きに基づく処理を行うことができます。WorldAlignBlendノードの実態はマテリアル関数なのでアセットを開けば実装を確認することができます。

内部的な処理をGLSLっぽく書くと次のような操作を行っているようです。

// インプット
vec3 inExplicitNormal = vec3(0.0, 0.0, 1.0);
float blendSharpness = 2.0;
float blendBias = -1.0;
vec3 InWorldVector = vec3(0.0, 0.0, 1.0);
bool clamped = false;

float worldAlignedBlend(float3 normal) {
    float v = dot(normalize(InWorldVector), worldSpaceNormal);
    v = 0.5 * v * blendSharpness + blendBias;
    if (clamped) {
        v = clamp(v, 0.0, 1.0);
    }
    return v;
}

vec3 transformTangentSpaceToWorldSpace(vec3 v) {
    // ベクトルをタンジェント空間ワールド空間に変換する関数
}

vec3 worldSpaceNormal; // ワールド空間のピクセル法線
vec3 worldSpaceVertexNormal; // ワールド空間の頂点法線

// アウトプット
float alpha = worldAlignedNormal(worldSpaceNormal);
float withVertexNormals = worldAlignedNormal(worldSpaceVertexNormal);
float withExplicitNormal = worldAlignedNormal(transformTangentSpaceToWorldSpace(inExplicitNormal));

デフォルトのIn World Vectorインプットが上向き(Z方向)なので、上方向に対して法線がどれぐらい向いているかによって出力が変化します。
Network.png
Result.png

使用例として、上を向いている面だけ雪のテクスチャを使用することで、雪が積もっているような演出を作ることができます。
Network_Snow.png
Result_Snow.png

Landscapeで崖などの傾斜部分だけマテリアルを変更するといった処理を行うときにも使用することができます。
Network_Landscape.png
Result_Landscape.png

0
2
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
0
2