3D アセットの作成時には、同じマテリアル内で異なるタイプのサーフェスを定義する機能が必要になる場合があります。 簡単かつ手軽にこれを行うには、マテリアルのどのセクションによりサーフェスのどの部分に影響を与えるかを定義する テクスチャ マスク を使用します。
このチュートリアルでは、Unreal Engine のマテリアル内でテクスチャ マスキングを使用する方法について説明します。
テクスチャ マスク
テクスチャ マスクはマテリアル内でエフェクトの対象領域を制限する、グレースケールのテクスチャ、またはテクスチャの単一チャンネル (R、G、B、または A) です。
多くの場合、マスクは別のテクスチャの単一チャンネル内に含まれており、例にはディフューズや法線マップの アルファ チャンネル などがあります。 他の例としては、単一の画像ファイルに含まれるラフネス、メタリック、アンビエント オクルージョンの各マスクがあり、それぞれが単一のチャンネルを占有します。
これは「チャンネル パッキング」と呼ばれ、マテリアルで必要とされるテクスチャ サンプルの数を減らすことでマテリアルのパフォーマンスを向上する有用な方法です。 技術的には、あらゆるテクスチャのあらゆるチャンネルをテクスチャ マスクとして捉え、使用することができます。
以下は、スターター コンテンツに含まれる SM_Chair スタティック メッシュのテクスチャ マスクです。
この画像ファイルには、4 つのカラー チャンネル (R、G、B、A) に異なる白黒マスクがそれぞれ含まれています。
テクスチャ マスクを作成する
テクスチャ マスクはあらゆる 2D 画像操作プログラムで作成できます。 また、お使いの主要コンテンツ作成プログラム内や、Marmoset Toolbag、Xnormal、Substance Painter/Designer などのテクスチャリング専用ツールを使って、マスクをジオメトリから直接ベイクすることもできます。
手作業でマスクを作成する場合は、メッシュの UV レイアウトを示す画像から作業を始めることが一般的です。 次の例では椅子のクッションをマスクすることを目的としており、 対応する UV が画像内でハイライト表示されています。 モデルの特定の部分をマスクするには、画像内の対象領域を純白色でペイントし、その他の領域をすべて黒色で残します。
上の図で示されているとおり、マスクされた領域に特定のサーフェス プロパティを適用することができます。 この場合は、椅子のクッション部分をオレンジ色にするためにマスクが使用されています。
テクスチャ マスクを作成する際は、必ず純黒色または純白色のいずれかを使用し、カラー情報は使用しないでください。 それ以外のタイプの色を使用すると、Unreal 内でマスクを使う際に不自然なアーティファクトが生じる原因となります。
テクスチャ マスクをエクスポートする
マスク テクスチャのペイントが完了したら、それを単一の画像ファイルとしてエクスポートするか、複数のマスクを単一画像の R、G、B、A チャンネルにまとめてパックしてエクスポートすることができます。 後者は一般的に「RGB チャンネル パッキング」と呼ばれ、最小限の追加作業で優れたパフォーマンスと大幅なメモリ節約を実現できるため、マスクの作成にあたっては好ましい方法です。
テクスチャのアルファ チャンネルに何かをパックする場合は、お使いの 2D 画像操作ソフトウェアで必ずアルファのエクスポートを有効にしてください。 アルファのエクスポートを有効にしないと、テクスチャとともにアルファ チャンネルがエクスポートされない可能性があります。
テクスチャ マスクを使用する
Unreal マテリアル エディタでは、マスク テクスチャをさまざまな方法で利用できます。 一般的な使用方法には、エミッシブ光源の定義、メッシュのメタル部分と非メタル部分の定義、モデル各部への異なる色のマッピング (椅子の例) などがあります。
次のセクションでは、Unreal Engine でテクスチャ マスキングを使用する最も一般的ないくつかの方法について説明します。
エミッシブ マスク
マスク テクスチャの最も一般的な使用方法の一つとして、マテリアルのエミッシブ セクションの制御があります。 通常、これを行うには、ライトを放出するマテリアルのセクションの定義に純白色を使用するエミッシブ マスク テクスチャを作成することから始めます。 エミッシブ マスクには通常 2 つのパラメータが含まれます。
ライト エミッションの色を変更するには、エミッシブ マスクを ベクター パラメータ によって定義されている色で乗算します。
エミッシブ ライトの強度を変更するには、スカラー パラメータで乗算します。 スカラー パラメータの値を高く設定すると、エミッションがより明るくなります。
次の図でハイライトされている 4 つのノードは、ライトの色と明るさを制御するパラメータによって乗算されているエミッシブ マスクを示しています。 この球体は、エミッシブ マスクの白色部分に対応する領域のみからライトを発しています。 球体の残りの部分ではベース カラー テクスチャを表示しています。
マテリアルのマスキング
テクスチャ マスクの別の一般的な使用方法として、さまざまなテクスチャ情報を R、G、B、アルファの各チャンネル内に格納することが挙げられます。 スターター コンテンツに含まれる SM_Chair スタティック メッシュのマテリアルは、この技法を示す最適な例と言えます。
SM_Chair と関連するすべてのコンテンツを見つけるには、まず、コンテンツ ブラウザで [Starter Contents (スターター コンテンツ)] フォルダを選択し、検索ボックスに「chair」と入力します。 こうすることで、SM_Chair に関連するすべてのコンテンツが表示されます。 SM_Chair が見つからない場合は、プロジェクトにスターター コンテンツが含まれていない可能性があります。 これを修正するには、新しいプロジェクトを作成するか、アセット移行ツール を使用して、別のプロジェクトからこの椅子のコンテンツを移動します。 試みる必要があります。
椅子のマテリアル「M_Chair」を開くと、テクスチャ マッピングの機能を示す最適な例を参照できます。
このマテリアルでは、マスク テクスチャである T_Chair_M が、メッシュ上のさまざまな領域に特定のサーフェス プロパティをマッピングするために使用されます。 テクスチャ マスクによってメタル/非メタルのセクションが定義しやすくなっています。また、テクスチャ マスクは、椅子の各部への異なるラフネス値およびカラー値の割り当てにも使用されています。
次の画像では、マスク テクスチャ内の各チャンネルがどのように使用されるかが分割されて示されています。 左側はコンポジット RGB 画像、つまりテクスチャとして表示した際にこの画像がどのように見えるかを示しています。 真ん中の列は、各カラー チャンネル (上から R、G、B、A) に含まれる白黒マスクを示しています。 右側の画像には、マスクがターゲットとしている椅子の部分が示されています。椅子の白色の部分はマスクの白色セクションに対応しています。
椅子のマスク テクスチャの各チャンネルに格納されている情報の内訳は次のとおりです。
Red Channel (赤色チャンネル): アンビエント オクルージョン (環境光の遮蔽) の情報。 マテリアル内では、2 つのサーフェスが近接する繊細なコンタクト シャドウを追加する際に便利です。
Green Channel (緑色チャンネル):メタリックマスク。 マテリアル内では、メタルになる部分の定義に使用します。 また、これはメタルの色を定義する際にも便利です。
Blue Channel (青色チャンネル):非メタリック マスク マテリアル内では、非メタル部分の定義に使用します。 また、非メタル部分の色を定義する際にも便利です。
アルファ チャンネル:オブジェクト全体のマスク。 これは現時点でマテリアルで使用されていません。
すべてをまとめると、Unreal のレベル内では椅子が次のように表示されます。
マスキングのヒントとコツ
テクスチャ マスキングは、特に Unreal Engine に装備されている他のツールと併用した場合に非常に強力なツールとなります。 次のセクションでは、作業においてテクスチャ マスキングを最大限活用するためのヒントとコツを紹介します。
テクスチャ マスキングとマテリアルの分離
テクスチャ マスキングとマテリアル インスタンスの併用は、あらゆるアセットからほぼ無限のバリエーションを生み出すことのできる非常に優れた方法です。 たとえば、テクスチャ マスクを使って、色などの特定のプロパティを適用する領域を定義した後に、異なるマテリアル インスタンスを使用して、インスタンス エディタでこれらのプロパティをカスタマイズできます。 詳細については、「マテリアルをインスタンス化する」を参照してください。
マテリアル マスクをマテリアル インスタンスとともに使用することで、アーティストがマテリアル内で色やその他の設定を簡単かつ迅速に変更できるようにすることができます。 このアプローチにより、上の画像の SM_Chair のような高度にカスタマイズ可能なアセットを作成できます。
マスキングとチャンネル アーティファクト
DirectX の特異な性質により、テクスチャの緑色チャンネルが最適な圧縮になることがよくあります。 お使いのマスクで多くの圧縮アーティファクトが生じる場合は、最初にその情報を画像の緑色チャンネルに含めて、問題が解決するか試してみてください。 問題が解決しない場合は、アルファ チャンネルを使ってマスクを格納してみてください。
テクスチャのアルファ チャンネルを使ってマスク情報を格納する際は注意が必要です。 アルファ チャンネルをテクスチャに加えることでそのテクスチャのメモリ使用量が大幅に増加し、 やりすぎると、さまざまなマスクをテクスチャの RGB チャンネルにパッキングしたことで得た節約分をすべて失う場合があります。
sRGB とマスク テクスチャ
複数のマスク テクスチャを単一のテクスチャにパッキングする場合、マスクはガンマ補正すべきではないため、テクスチャ エディタで [sRGB] オプションをオフにする必要があります。
以前にマテリアル内でサンプリングされたテクスチャの sRGB を無効にすると、既存の 2D Texture Sampler ノードではそのサンプル タイプは自動更新されません。 既存のすべての 2D Texture Sampler ノードでノード タイプを調整する必要があります。 Sampler Type を変更しないとマテリアルのコンパイルが失敗し、統計情報ログに次のメッセージが表示されます。
このエラーは Sampler Type をデフォルトの Color から Linear Color に変更するだけで修正できます。これで警告も表示されなくなります。 念のために、マテリアルを再コンパイルして、変更が正しく適用されたことを確認しましょう。 完了すると警告は表示されなくなります。
まとめ
テクスチャ マスキングは非常に強力な概念で、一度取得すると、わずかなソース コンテンツからほぼ無限のバリエーションを生み出すことができます。 テクスチャ マスクに使用できるのは、一つの画像ファイルあたり 4 チャンネルのみなので、それぞれのチャンネルを慎重に使用してください。 マスク テクスチャの sRGB を無効にすることも忘れないでください。こうすることで、マスクの鮮明度を大幅に高めることができます。