3.

UE5 のマテリアルブレンドモード|Two Sided と選び方

編集

この記事の要点

  • ブレンドモードは「描いたピクセルを背景とどう合成するか」の指定。まず Opaque を選び、必要な理由があるときだけ他へ移る。
  • Masked は「描くか描かないか」の二択。半透明ではないので、葉やフェンスのように穴の空いた形状に使う。
  • Translucent は深度を書かないため前後関係が破綻しやすく、ライティングの扱いも Opaque と別系統になる。
  • Two Sided は裏面カリングを無効にする設定。板ポリの裏が見える代わりに、そのオブジェクトのピクセル処理が増える。
  • ブレンドモードも Two Sided もシェーダ順列に影響する。マテリアルインスタンス側で上書きすると再コンパイルが走る。

マテリアル を作っていて「ガラスが正しく重ならない」「葉っぱの周りに黒い縁が出る」「板ポリを裏から見たら消えた」といった症状に当たったら、ほぼ確実にブレンドモードか Two Sided の設定が関係しています。Unreal Engine 5 (UE5) ではこれらをマテリアルの詳細パネルで切り替えますが、選択肢の意味を知らないまま Translucent に逃げると、今度は前後関係や影の問題に巻き込まれます。この記事では各ブレンドモードの性質と選び方、そして Two Sided の正しい使いどころを整理します。

1ブレンドモードとは何を決める設定か

ブレンドモードは、マテリアルが出力したピクセルの色を、すでに背景にある色とどう合成するかを決めます。マテリアルエディタでノードを何も選択していない状態にすると、詳細パネルの Material セクションに Blend Mode、Shading Model、Two Sided が並びます。ここが設定場所です。

重要なのは、ブレンドモードによって使えるピンが変わることです。Opaque では Opacity も Opacity Mask も入力できませんが、Masked では Opacity Mask、Translucent では Opacity が有効になります。「Opacity につなぎたいのにピンがグレーアウトしている」のは、ブレンドモードが合っていないためです。

透ける必要があるか? いいえ Opaque 最優先。迷ったらこれ はい 半端な透明度が要るか? いいえ Masked 葉・フェンス・穴あき Translucent 系 ガラス・煙・光 光を足すだけなら Additive、下地を暗くするだけなら Modulate を検討する
ブレンドモードの選択フロー。上から順に判断し、条件を満たさない限り左(軽い方)に留まるのが基本方針。

2Opaque:まず最初に選ぶべきモード

Opaque(不透明)は背景を完全に上書きするモードです。透過処理を一切行わないため、もっとも軽く扱いやすい選択肢です。デプスバッファへ深度を書き込むので前後関係は自動的に正しく解決され、ディファードレンダリングのライティング機能もフルに使えます。

石、金属、木材、地面、キャラクターの体——透過が必要ない対象はすべて Opaque で作ります。「念のため Translucent にしておく」という判断は後で必ず問題になります。また、UE5 の Nanite は Opaque と Masked のマテリアルを前提としています。大量の高密度ジオメトリを Nanite で扱いたい場合、マテリアルが半透明だと恩恵が受けられません。この点でも Opaque を基準に据える意味があります。

3Masked:描くか描かないかの二択

Masked は、ピクセルごとに「描く」「描かない」を判定するモードです。半透明ではありません。Opacity Mask ピンに入力した値が閾値以上なら不透明として描かれ、閾値未満なら完全に破棄されます。閾値は詳細パネルの Opacity Mask Clip Value で指定します(既定値は 0.3333)。値を上げると描かれる範囲が狭まり、下げると広がります。葉が痩せる、輪郭にゴミが残る、といった症状はここで調整できます。

Masked の典型的な用途は次の通りです。

対象なぜ Masked か
木の葉・草板ポリに葉の形のマスクを抜く。半透明である必要がない
金網・フェンス穴の部分だけ描かない。ジオメトリで作るより圧倒的に軽い
穴あきの装飾パネル形状の切り抜きが目的で、透け具合の調整は不要

Masked は Opaque と同じライティング経路を通るため、Translucent のような制約はありません。ただし無料ではなく、「描かない」判定の都合上、GPU が使う一部の深度最適化が効きにくくなります。特にモバイル系のハードウェアではコストが目立つので、画面を大きく覆う面に無自覚に使うのは避けてください。

○ 使うべき場面
境界がはっきりしている切り抜き全般。葉の縁に黒っぽいフチが出る場合は、マスクではなくテクスチャ側のアルファ処理(透明部分にも色を伸ばしておく)を疑う。
△ 注意
Masked はグラデーションのある透過を表現できない。Opacity Mask に 0.5 を入れても半透明にはならず、閾値との比較で全部描くか全部消すかになる。

4Translucent:便利だが代償が大きい

Translucent(半透明)は Opacity ピンの値に応じて背景と混ざるモードです。ガラス、水、煙、フェードなどに使いますが、Opaque とは根本的に扱いが異なります。

深度を書かないことによる前後関係の破綻

Translucent なオブジェクトは、既定ではデプスバッファに深度を書き込みません。そのため前後関係はピクセル単位ではなくオブジェクト単位で決まります。2枚のガラスが交差している、1つのメッシュの中で表と裏が重なっている、といった状況では描画順が破綻し、手前にあるはずの面が奥に見えることがあります。対処としては、コンポーネントの詳細パネルにある Translucency Sort Priority で描画順を明示する方法があります。それでも解決しない自己交差では、メッシュを分割するか、そもそも Translucent を使わない設計に変えるほうが確実です。

ライティングが別系統になる

ディファードレンダリングでは、Opaque と Masked の情報は G バッファに書き込まれ、そこにライティングがまとめて適用されます。Translucent はこの流れに乗れないため、別の方式で ライティング を受け取ります。マテリアルの詳細パネルにある Translucency Lighting Mode で方式を選びますが、ボリューム方式は軽い代わりに光の方向が曖昧になり、サーフェス方式は正確な代わりに負荷が上がります。加えて、スクリーンスペースリフレクションなど G バッファ前提のポストプロセス効果は Translucent には基本的に乗りません。「ガラスに映り込みが出ない」のはこれが理由です。

オーバードローの問題

Translucent は背景を消さずに上へ重ねるため、半透明が何枚も重なると、そのピクセルは重なった枚数だけ計算されます。これがオーバードローで、パーティクルや煙で最も起きやすい負荷要因です。画面いっぱいの半透明を何十枚も重ねると、他がどれだけ軽くてもフレームレートが落ちます。

5その他のブレンドモード

モード合成の仕方向いている用途
Additive背景に色を足す。決して暗くならない炎、爆発、魔法エフェクト、光のフレア
Modulate背景に色を掛ける。白は変化なし、黒で暗くなる影の投影デカール、暗くするだけの表現
AlphaCompositeアルファが乗算済みであることを前提に合成加算と半透明を1枚で兼ねるパーティクル
AlphaHoldoutそこに何もないものとして背景を抜く合成用の切り抜きレンダリング

Additive は「光を足すだけ」なので、前後関係が多少狂っても見た目が破綻しにくいという実務上の利点があります。エフェクトで前後関係に悩んだとき、Translucent から Additive へ変えるだけで解決することがあります。ただし黒い煙のように「暗くする」表現は作れません。Modulate は背景を掛け算するため、ライティングやフォグの扱いが他のモードと大きく異なります。用途は限定的で、影のデカールなど狭い目的にだけ使います。

6Two Sided:裏面を描くかどうか

既定では、レンダラはカメラに背を向けたポリゴン(裏面)を描画しません。これがバックフェイスカリングで、見えないものを処理しないための基本的な最適化です。閉じた立体なら裏面は必ず内側を向いているので、省いても問題は起きません。問題になるのは、板ポリのように厚みのないメッシュです。片面しかないため、裏側から見ると何も描かれず消えてしまいます。ここで Two Sided をオンにすると裏面もカリングされなくなり、両側から見えるようになります。

  1. マテリアルエディタで、ノードを何も選択していない状態にする。
  2. 詳細パネルの Material セクションにある Two Sided にチェックを入れる。
  3. 保存し、シェーダのコンパイルが終わるのを待つ。
  4. インスタンス側だけで有効にしたい場合は、詳細パネルのマテリアルプロパティ上書きから Two Sided を有効にする。この場合も新しいシェーダ順列が生まれ、コンパイルが発生する。

UE5 では、両面表示にしたときの裏面の法線は自動的に反転して扱われます。そのため裏側が真っ暗になる不自然さは基本的に起きません。表と裏で意図的に見た目を変えたい場合は、TwoSidedSign ノードで表裏を判別する値が得られるので、Lerp の Alpha に使って切り替えられます。

○ 使うべき場面
葉、草、布、旗、カーテン、フェンスなど、厚みのない板を両側から見る前提の形状。Masked と組み合わせるのが植生の定番構成。
△ 注意
Two Sided は裏面が手前に描かれる部分でオーバードローが増え、ピクセル処理量が最大で 2 倍程度になる(平面 1 枚ならほぼ増えず、球のような閉じた形状で影響が大きい)。閉じた立体に「念のため」で付けると、内側の見えない面まで計算されて純粋な無駄になる。壁や箱には付けない。

光が葉を透過して裏側がうっすら明るく見える表現が欲しい場合は、Two Sided を有効にしたうえでシェーディングモデルに Two Sided Foliage を選ぶ方法があります。裏側への透過を表現する専用モデルで、Default Lit を両面にしただけより自然になります。

7設定変更とシェーダ順列の関係

ブレンドモード、シェーディングモデル、Two Sided は、いずれもシェーダの構造そのものを変える設定です。つまり、これらを変更するとシェーダの再コンパイルが必ず発生します。シェーダコンパイルに長時間待たされる問題とその解決策 で扱われる待ち時間の増加は、こうした設定の組み合わせが増えることでも起こります。

特に注意したいのが、マテリアルインスタンスでのプロパティ上書きです。数値や色のパラメータは何個変えても再コンパイルなしで済みますが、プロパティ上書きは別扱いで、親と異なる組み合わせを作るたびに新しいシェーダが必要になります。「インスタンスなら軽い」という理解のままブレンドモードを変えていくと、シェーダ数がじわじわ膨らみます。

設計としては、ブレンドモードが違うものは別のマスターマテリアルとして持つのが素直です。不透明用、Masked 用(植生など)、半透明用、エフェクト用の Additive——この程度の分割にしておけば、それぞれの下にインスタンスをぶら下げるだけで運用でき、シェーダ数も予測可能な範囲に収まります。

最後に、症状から設定を逆引きする表をまとめておきます。

症状疑うべき設定
Opacity ピンにつなげないブレンドモードが Opaque または Masked のまま
板ポリを裏から見ると消えるTwo Sided が無効
葉が痩せる/輪郭にゴミが残るOpacity Mask Clip Value の調整不足
ガラス同士の前後がおかしいTranslucent の描画順。Sort Priority かメッシュ分割で対処
半透明に映り込みが出ないTranslucent は G バッファ前提の効果を受けにくい仕様
エフェクトを重ねると急に重いTranslucent のオーバードロー。枚数を減らすか Additive を検討
Nanite が有効にならないマテリアルが半透明。Opaque か Masked にする
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. マテリアルとマテリアルインスタンスの違いと使い分け
  2. よく使うマテリアルノード(Lerp / Fresnel / Panner / Texture Sample)
  3. マテリアルのブレンドモードと Two Sided の設定