ゲームプレイ中にアセットのマテリアル プロパティを変更することは、プレイヤーに視覚的なフィードバックやゲームプレイ情報を提供したり、没入感を作り出したりするための効果的な方法です。 たとえば、次のようになります。
プレイヤーのスキンは、異なるステータス効果を示すために外観を変更できます。
ピックアップムは、周囲のプレイヤーの注意を引くために光らせることができます。
雨の際に、地面がドライからウェットに変わることで没入感を高めることができます。
このチュートリアルでは、ブループリントを使用して、インタラクティブな技術デモにおいてランタイム時にマテリアル プロパティを変更します。 このデモでは、プレイヤーがレベル内でこれを押し続けると、床が浸水する水のボールを作成してください。
また、エミッシブ マテリアル、シンプルなマスク、スタティック スイッチを試して、濡れた床に反射するセット ドレッシングを作成します。
ゲームで使用可能な床アセットを作成する
技術デモ用に最初に作成するアセットは床です。 Lvl_Adventure のルーム 3 では、サーフェス化されたゲームに使用可能な床アセットを作成して、プレースホルダー フロア メッシュを置き換えます。
始める前に、少し立ち止まってアプローチを考えてみましょう。 前回のチュートリアルでは、テクスチャのタイリングによって、床などの大きなメッシュを手軽にサーフェス化できることを学びました。 メッシュの UV がテクスチャの見え方に影響することも学びました。
部屋 3 のプレースホルダー フロアは 3 つのメッシュで構成されており、それぞれに異なる UV があります。
以下のデモでは、メッシュ間の UV の不一致が原因で、タイリング テクスチャが異なるサイズに見えることに注目してください。 そのため、一貫性したフロアのサーフェス化が課題となります。
この課題は、3 面投影を使用して解決します。 3 面投影は、UV を無視し、テクスチャをワールド アラインメントするサーフェス化テクニックです。 これは、UV を修正できない場合や、UV マッピングが困難なジオメトリを扱っている場合に便利です。
このアプローチを念頭に置いて、式を使用して M_Surfaces をワールド アラインメントします。 インスタンスは親マテリアルからプロパティを継承するため、MI_Surfaces_Floor もワールド アラインメントされます。 次に、プレースホルダー メッシュを置き換えるブループリントに MI_Surfaces_Floor を適用します
UV の問題を事前に回避するには、モジュラー アセットをモデリング ソフトウェアで作成する際に、モジュラー アセット間で UV を適切にスケーリングすることをお勧めします。
ワールド アラインメント マテリアルを作成する
親マテリアルをワールド アラインメントするためには、次の手順に実行します。
コンテンツブラウザで [All (全て)] > [Content (コンテンツ)] > [AdventureGame] > [Artist (アーティスト)] > [Materials (マテリアル)] に移動し、
M_Surfacesを開きます。[UV Tiling (UV タイリング)] コメント ボックス、ディフューズ マップ、および法線マップの全てのノードを選択します。 削除します。
グラフを右クリックして、「Texture Object」を検索します。 これらのノードのうち 2 つを作成します。
最初のテクスチャ オブジェクトを選択します。 詳細パネルで、[Texture (テクスチャ)]を DefaultDiffuse に設定します。
テクスチャ オブジェクトを右クリックし、[Convert to Parameter (パラメータに変換)] を選択します。 新しいパラメータの名前を「
Diffuse」とします。2 つ目のテクスチャ オブジェクトを選択します。 詳細パネルで、[Texture (テクスチャ)]を DefaultNormal に設定します。
テクスチャ オブジェクトを右クリックし、[Convert to Parameter (パラメータに変換)] を選択します。 新しいパラメータの名前を「
Normal」とします。Diffuse ノードで、出力からドラッグし、World Aligned Texture ノードを追加します。
XYZ テクスチャ出力から、Multiply ノード ([Diffuse Hue (ディフューズ色相)] コメント ボックス内) の A 入力に接続します。
Normal ノードで、出力からドラッグし、World Aligned Normal ノードを追加します。
XYZ Texture 出力から、M_Surfaces マテリアルのルート ノードの Normal 入力に接続します。
グラフ内を右クリックし、「Scalar Parameter」を検索します。 名前を「
Texture Scaling」とします。そのデフォルト値を
214に設定します。[Texture Scaling (テクスチャ スケーリング)] から出力を両方の WorldAligned ノードの TextureSizeV3 入力に接続します。
マテリアルを保存します。
マテリアル グラフは次のようになります。
次に、プレースホルダー フロアを置き換えるブループリントを作成します。
フロア ブループリントを作成する
ブループリントを作成するには、次の手順を実行します。
コンテンツブラウザで、パス[All (全て)] > [Content (コンテンツ)] > [AdventureGame] > [Artist (アーティスト)] > [Materials (マテリアル)] で右クリックして、[New Folder (新しいフォルダー)] を選択します。
フォルダーの名前を「
Blueprints」とします。「Blueprints」フォルダーを右クリックし、[Blueprint Class (ブループリント クラス)]を選択して、親クラスとして [Actor (アクタ)] を選択します。
ブループリントの名前を
BP_Floorとし、ダブルクリックしてブループリント エディタで開きます。コンテンツブラウザで [All (全て)] フォルダーを選択し、
「SM_Cube」を検索します。SM_Cube をブループリント エディタの [Components (コンポーネント)] パネルに、BP_Floor の子としてドラッグします。
SM_Cube の名前を「
Floor」とします。詳細パネルで [Scale (スケール)] が
1.0、1.0、1.0であることを確認してください。[Materials (マテリアル)] > [Element 0 (要素 0)] の隣でそのマテリアルを
MI_Surfaces_Floorに設定します。[Components (コンポーネント)] タブで、[DefaultSceneRoot] を選択し、[Add (追加)] をクリックして、
ボックス コリジョンを追加します。ボックス コリジョンの名前を「
Trigger」とします。詳細パネルでトリガーの [Scale (スケール)] を
1.5、1.5、1.5に設定します。トリガーの [Location (位置)] を
50、50、55に設定してください。ブループリントを保存してコンパイルします。
BP_Floor のインスタンスをレベルにドラッグし、動かしてみましょう。 メッシュを移動しても、テクスチャは同じ場所に留まります。 スケーリングしようとすると、メッシュは変化しますが、テクスチャは変化しません。
次に、部屋 3 のプレースホルダー フローリングを BP_Floor のインスタンスに置き換えます。
プレースホルダー メッシュを置き換える
これで、部屋 3 のプレースホルダー メッシュを、好きな配置で BP_Floor に置き換えることが可能になりました。 プレースホルダーに合う床を作成しました。
上記のレベルを使用したい場合は、次の手順に従ってこのレベルをコピーできます。
上記のチュートリアルに従って
M_Surfacesを更新し、BP_Floorを作成したことを確認してください。[Outliner (アウトライナー)] で「Room 3」フォルダー内のものを全て選択し、Delete キーを押します。
次のスニペットをコピーします。
Console OutputBegin Map Begin Level Begin Actor Class=/Script/Engine.StaticMeshActor Name=StaticMeshActor_2 Archetype="/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'" ExportPath="/Script/Engine.StaticMeshActor'/Game/SFEFWFWEEEWEF.SFEFWFWEEEWEF:PersistentLevel.StaticMeshActor_2'" Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype="/Script/Engine.StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/SFEFWFWEEEWEF.SFEFWFWEEEWEF:PersistentLevel.StaticMeshActor_2.StaticMeshComponent0'" End Object Begin Object Name="StaticMeshComponent0" ExportPath="/Script/Engine.StaticMeshComponent'/Game/SFEFWFWEEEWEF.SFEFWFWEEEWEF:PersistentLevel.StaticMeshActor_2.StaticMeshComponent0'" StaticMesh="/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cylinder.SM_Cylinder'" StaticMeshImportVersion=1 bUseDefaultCollision=False StaticMeshDerivedDataKey="STATICMESH_FD1BFC73B5510AD60DFC65F62C1E933E_228332BAE0224DD294E232B87D83948FQuadricMeshReduction_V2$2e1_6D3AF6A2$2d5FD0$2d469B$2dB0D8$2dB6D9979EE5D2_CONSTRAINED0_100100000000000000000000000100000000000080FFFFFFFFFFFFFFFFFFFFFFFF000000000000803F00000000000000803F0000803F00000000000000003D19FC1626C9B2485E57DB4B8EC731318B8215AE8D46FAD400000000010000000100000000000000010000000100000000000000000000000100000001000000400000000000000001000000000000000000F03F000000000000F03F000000000000F03F0000803F00000000050000004E6F6E65000C00000030000000803FFFFFFFFF0000803FFFFFFFFF0000000000000041000000000000A0420303030000000000000000_RT00_0"[Viewport (ビューポート)] で、Ctrl + V キーを押します。
次に、ウォーター ボールを作成し、ダイナミック マテリアル インスタンスを使用して、床をドライからウェットに変えます。
プレイヤー インタラクションを使用してマテリアルを変更する
このウォーター ボールは、フロア内のプロパティの変更をトリガーして、濡れているように見えるようにする物理対応のオブジェクトです。
ウォーター ボールを作成する
ウォーター ボールを作成してサーフェス化するには、次の手順を実行してください。
コンテンツブラウザの「Blueprints」フォルダーで右クリックし、新しいブループリント クラスを作成します。
親クラスとして [Actor (アクタ)] を選択します。
新しいブループリントの名前を
BP_WaterBallとし、ブループリント エディタで開きます。[Components (コンポーネント)] タブで、[Add (追加)] をクリックし、「
Sphere」を検索します。詳細パネルで [Materials (マテリアル)] > [Element 0 (要素 0)] を
M_Waterに設定します。そして、詳細パネルの [Physics (物理)] で [Simulate Physics (物理シミュレーション)] を有効にします。
ブループリントを保存してコンパイルします。
BP_WaterBallのインスタンスをレベルにドラッグします。
ビューポートを右クリックし、[Play From Here (ここからプレイ開始)] を選択して、レベル内でウォーターボールをテストします。 ボールにぶつかると、ボールが地面に沿って跳ねる状態になっている必要があります。
レベルに敵がいる場合、敵の [Max Speed (最大速度)] を 0 に設定して、敵が追跡しないようにするか、敵を削除します。
次に、BP_Floor 内のロジックを使用して、ダイナミック マテリアル インスタンスを作成します。
ダイナミック マテリアル インスタンスを作成する
ダイナミック マテリアル インスタンスは、ランタイム時にプロパティを変更できるスクリプト (ブループリントなど) によって生成されるマテリアル インスタンスです。
このセクションでは、フロア メッシュに割り当てられたマテリアル (MI_Surfaces_Floor) を参照し、そこからダイナミック マテリアル インスタンスを生成して、その新しいインスタンスをフロアに割り当てるブループリント ロジックを作成します。 すると、このダイナミック マテリアル インスタンスは、前回のチュートリアルで公開したプロパティである [Roughness (ラフネス)] と [Diffuse Hue (ディフーズ色相)] を変更して、濡れた床を模倣します。
この切り替えによって、ランタイム時には、床が薄い水の層で濡れたように見えるようになります。
ダイナミック マテリアル インスタンスを作成するには、次の手順を実行してください。
コンテンツブラウザで
BP_Floorをダブルクリックして、ブループリント エディタで開きます。EventGraph で、Event BeginPlay 以外の全てのノードを削除します。
[Components (コンポーネント)] タブから、Floor のインスタンスをイベント グラフにドラッグします。
Floor の出力からドラッグして「Get Material」を検索します。
Get Material の Return Value 出力からドラッグし、ターゲットが Kismet Material Library の Create Dynamic Material Instance ノードを追加します。
Event BeginPlay の出力を Create Dynamic Material Instance の input Exec ピンに接続してください。
Dynamic Material Instance の Return Value からドラッグし、[Promote to Variable (変数へ昇格)] を選択します。
詳細パネルで変数の名前を「
Dynamic Mat Ref」に変更します。Floor のインスタンスをもう 1 つ EventGraph にドロップします
Floor の出力からドラッグし、「Set Material」を検索します
Set ノードの 白い Exec 出力を Set Material ノードの Exec 入力に接続します。
Set ノードの 青い Exec 出力を Set Material ノードの Material 入力に接続します。
グラフを整理するには、全てのノードを選択してから C キーを押します。 コメントボックスの名前を「
Create Dynamic Material」とします。保存してコンパイルします。
EventGraph は次のようになります。
イベントを呼び出す
床のウェット ルックをトリガーするには、BP_Floor が BP_WaterBall とオーバーラップしているかどうかを確認するイベントと、結果として正しいルックを呼び出すイベントが必要です。
ロジックのドラフトを作ってみましょう。
アクタが
BP_Floorとオーバーラップする場合:他のアクタが
BP_WaterBallと等しいかどうかを確認してください。 (true) の場合、次のようになります。BP_Floorのウェット ルックを呼び出します。
true ではない場合 (つまり、false の場合)、次のようになります。
処理は何も行われません
このロジックを作成するには、次の手順に従います。
BP_Floorの EventGraph を右クリックし、「Add Custom Event」を検索します。 このノードの名前を「Call Wet Look」とします。[Components (コンポーネント)] タブで、[Trigger (トリガー)]を右クリックし、 [Add Event (イベントを追加)] > [Add OnComponentBeginOverlap (OnComponentBeginOverlap を追加)] を作成します。
OnComponentBeginOverlap がコリジョンを探します。
OnComponentBeginOverlap の Other Actor 出力からドラッグし、Get Class を作成します。
Return Value 出力からドラッグし、Equal を作成します。
Select Class 入力を右クリックして、[Promote to Variable (変数へ昇格)] を選択します。
変数の名前を「
WaterBall」とし、ブループリントをコンパイルします。詳細パネルで WaterBall の [Default Value (デフォルト値)] を
BP_WaterBallに設定します。Equal ノードの出力からドラッグして Branch ノードを作成します。
Branch の True 出力からドラッグして「Call Wet Look」を検索します。
OnComponentBeginOverlap の Exec 出力を Branch ノードの E 入力に接続します。
EventGraph は次のようになります。
マテリアル プロパティを制御する
次に、床のウェット バリエーションを作成します。 フロアは石状かつ多孔質であるため、水を吸収すると色が暗くなります (ディフューズ色相)。 水の薄い層が覆っているため、サーフェスには光沢があります (ラフネス)。
ウェット ルックのロジックをビルドするには、次の手順を実行します。
Dynamic Mat Ref 変数を EventGraph にドラッグし、リストから Get を選択します。
出力ピンからドラッグして Set Scalar Parameter Value を作成します
同じ出力ピンからドラッグして Set Scalar Parameter Value を作成します
M_Surfacesで公開したパラメータを覚えていますか? [Roughness (ラフネス)] は スカラー (単一の値) であり、[Diffuse Hue (ディフューズ色相)] はベクター (3 つの値、RGB) です。Set Scalar Parameter Value ノードで、[Parameter Name (パラメータ名)] を右クリックして [Promote to Variable (変数へ昇格)] を選択します。 変数の名前を「
Roughness」とします。Set Vector Parameter Value ノードで、[Parameter Name (パラメータ名)] を右クリックして [Promote to Variable (変数へ昇格)] を選択します。 変数の名前を「
Diffuse Hue」とします。ブループリントをコンパイルし、各パラメータ名に値を入力します。
Roughness 変数を選択し、デフォルト値として「
Roughness」と入力します。Diffuse Hue 変数を選択し、そのデフォルト値として「
Diffuse Hue」と入力します。デフォルト値は
M_Surfacesの対応するパラメータと一致している必要があります
Set Scalar Parameter Value ノードの出力 Exec ピンから Set Vector Parameter Value ノードの入力 Exec に接続します。
ドライからウェットに変えるだけでなく、ロジックを使用して、変化するスピードを制御できます。 物質の飽和には時間がかかるため、マテリアル プロパティ間の移行は徐々に進みます。 これは、線形補間 (lerp) ノードを使用して行うことができます。
Lerp ノードは、2 つの値の間でスムーズにブレンド (補間) します。 カラー、テクスチャ、またはエフェクトから別のものにフェードする場合に便利です。
線形補間を作成するには、次の手順を実行します。
Scalar Parameter ノードの [Value (値)] 入力からドラッグして、Lerp ノードを作成します。 これはラフネスを制御します。
[Lerp (線形補間)] で A 値を
1.0に設定します。 これはドライ ルックのラフネスの値です。 B 値は0.0のままにします これはウェット ルックの値です。前回のチュートリアルでは、ラフネスの設定値が 1 であれば光沢がなくなり、0 であれば光沢が出ることを学びました。 水には光沢を出すべきです。
Set Vector Parameter Value ノードの Value 入力からドラッグして、Lerp (Linear Color) を作成します。 これは、ディフューズ色相を制御します。
新しい Lerp の A 値からドラッグして、[Promote to Variable (変数に昇格)] (線形カラー) を選択します。 変数の名前を「Unsaturated」とします。
Lerp の B 値からドラッグして [Promote to Variable (変数に昇格)] を選択します。 変数の名前を「
Saturated」とします。ブループリントをコンパイルします。 詳細パネルで、Unsaturated のデフォルト値を
CDDAFFFFに設定します。詳細パネルで、Saturated のデフォルト値をより暗い色 (例:
656C7FFF) に設定します。
EventGraph は次のようになります。
これで、ブループリント ロジックを使用して、フロアのまったく新しい外観を作成できました。 しかし、このロジックを強化するエンジンがまだありません。そこで、Timeline の出番です。
タイムラインでロジックを強化する
Timeline ノードはアニメーション ソフトウェアのタイムラインとよく似ており、時間の経過とともにキーフレーム間で値をドライブします。 このノードを使用して、指定した期間中にドライ ルックとウェット ルックの間の補間を行いましょう。
タイムラインを作成するには、次の手順を実行します。
EventGraph 内で右クリックし、「Add Timeline」を検索して作成します。
Timeline ノードをダブルクリックして、Timeline_Template タブを開きます。
[Track (トラック)] をクリックし、リストから [Add Float Track (フロート トラックを追加)] を選択します。
トラックの名前を「
Alpha」とします。 このトラック名は、Timeline ノードに出力ピンとして表示されます。タイムラインの [Length (長さ)] を
3.0秒に設定します。タイムライン内で右クリックして [Add Key (キーを追加)] を選択します。
キーを選択して青くハイライトした状態で、このキーの [Time (時間)] と [Value (値)] を
0.0に設定します。2 つ目のキーを作成し、その [Time (時間)] と [Value (値)] を
1.0に設定します。最初のキーを右クリックして [User (ユーザー)] を選択します。
保存してコンパイルします。
これで、このタイムラインは、3 秒間で 0 から 1 までブレンドされる値を出力します。 これで、残りのノードを Timeline に接続できます。
EventGraph に戻り、Call Wet Look 出力を Timeline の Play 入力に接続します。
Timeline の Update 出力を Set Scalar Parameter Value の Exec 入力に接続します。
Timeline の Alpha 出力を、両方の Lerp の Alpha 入力に接続します。
ノードを選択し、C キーを押してコメントします。 コメントボックスの名前を「
Lerp Dynamic Materials」とします。保存してコンパイルします。
完成した EventGraph は次のようになります。
作業をテストするには、レベル内で右クリックし、[Play From Here (ここからプレイ開始)] を選択します。 ウォーター ボールを部屋中に押し動かすと、床が「浸水」するはずです。
濡れた表面の反射は、昼間は少し見づらくなります。 床の反射性を示すために、レベルをより暗くし、エミッシブ マテリアルを使用してライティングを追加します。
エミッシブマテリアル
エミッシブ マテリアルなら、自己発光を手軽に作成できます。 これは、キャラクターの SF アーマーの LED や車のブレーキライトなど、より複雑なマテリアルに組み込まれた輝きを作成するために使用できます。
エミッシブ マテリアルは、Lumen のグローバル イルミネーションおよび反射システムとインタラクトすることもできます。つまり、エミッシブ マテリアルはその周囲の環境とインタラクトすることもできます。
エミッシブ マテリアルの輝度は、0 (ライトなし) から 1 (エミッシブ ライト) まで、または 1 以上 (ブルームを発生させるエミッシブ ライト) の範囲の浮動小数値を使用して制御できます。
エミッシブ マテリアルと反射は、暗いレベルでより顕著になります。 レベルの全体的なライティングを変更するには、次の手順を実行します。
[Outliner (アウトライナー)]で [Directional Light (ディレクショナルライト)] を選択します。
[Viewport (ビューポート)] で Ctrl + L キーを押し、マウスを動かしてレベル内のディレクショナルライトの位置と相対的な時間帯を調整します。
エミッシブは通常、環境ライティングには推奨されません。 エミッシブ マテリアルを光源として使用すると、意図しない結果が生じることがあります。 代わりに、環境用の光源を使用することをお勧めします。
エミッシブ マテリアルを作成する
このチュートリアルでは、レベルの周囲に配置すると濡れた石に反射するネオン サインを作成します。 これを行うため、次のパラメータを子インスタンスに反映できる柔軟な親マテリアルを作成します。
エミッシブカラー
エミッシブ輝度
テクスチャ マスク
エミッシブ マテリアルを作成するには、次の手順を実行します。
コンテンツブラウザで、パス[All (全て)] > [Content (コンテンツ)] > [AdventureGame] > [Artist (アーティスト)] > [Materials (マテリアル)] の [Materials (マテリアル)] を選択します。
マテリアルの名前を「
M_EmissiveSign」とし、ダブルクリックしてマテリアル エディタで開きます。[Material Graph (マテリアル グラフ)]で、マテリアルのルート ノードの Emissive Color 入力をドラッグし、選択リストから Multiply ノードを追加します。
Multiply ノードの A 入力からドラッグし、Constant3Vector を追加します。
Constant3Vector を右クリックし、[Convert to Parameter (パラメータに変換)] を選択します。
パラメータの名前を「
Color」に変更します。色見本をダブルクリックして、エミッシブの色を選択します。
Multiply ノードの B 入力をドラッグし、選択リストから Constant ノードを追加します。
定数をパラメータに変換し、名前を「
Brightness」とし、その [Value (値)]を25に設定してください。
マテリアル グラフは次のようになります。
クランプを使用してパラメータを制限する
エミッシブ輝度に上限はありませんが、クランプを使用することで、親マテリアルの最小輝度と最大輝度に独自のカスタム制限を設定できます。 クランプを使用することで、特に小さな数値や微妙な調整を扱う場合に、スライダーを使用した値の調整が容易になります。
他のパラメータと同様に、クランプはマテリアル インスタンスに反映されます。
輝度を一定に保つには、次の手順を実行してください。
マテリアル グラフで、[Brightness (輝度)] パラメータを選択します。
詳細パネルで [Slider Max (スライダ最大)] の値を
50に設定します
次に、テクスチャ マスクを使用して、サイネージのコンテンツを作成します。
単純なマスクを作成する
テクスチャ マスクは、グレースケール (アルファ) または単一チャンネル テクスチャ マップであり、マテリアルの特定の領域を表示または非表示にするために使用されます。 アルファ マスクをレイヤーのようなものとして描画できます。マスクの白い領域には下のレイヤーの情報が現れ、黒い領域ではそれが非表示になります。
エミッシブ マテリアルでは、アルファ マスクを使用して発光グローの領域を表示またはブロックし、ネオン サインのコンテンツを作成します。
M_Emissive 親マテリアル内にマスクを作成するには、次の手順を実行します。
ノードが選択されていない状態で、詳細パネルに移動します。 [Blend Mode (ブレンド モード)] の隣のドロップダウン メニューを開き、[Masked (マスク済み)] を選択します。
EventGrap で右クリックしてテクスチャ サンプルを作成します。
詳細パネルの [Texture (テクスチャ)] で「
T_UE_Logo_M」を検索します。このテクスチャは Unreal Engine に付属しているため、ダウンロードしたり作成したりする必要はありません。
テクスチャ サンプルの RGB 出力をマテリアルのルート ノードの Opacity Mask 入力に接続します。
テクスチャ サンプルを右クリックし、[Convert to Parameter (パラメータに変換)] を選択します。 パラメータの名前を「
LED Sign」とします。
マテリアル グラフは次のようになります。
ネオン サインを模倣するマテリアルを作成しました。 次に、マスクを反転することで、親マテリアルの柔軟性をさらに高め、作成できる独自のアセットの数を増やします。
これを達成するには、反転されたマスクと反転されていないマスクに対して独自のマテリアル インスタンスを作成する必要があります。 代わりに、スタティック スイッチを使用して、M_EmissiveSign から作成された任意のマテリアル インスタンス内で反転を切り替えます。
スタティック スイッチでパラメータを切り替える
前回のチュートリアルでは、マテリアルの反映階層について学びました。子インスタンスは親マテリアルからプロパティを継承します。
インスタンスは継承されたパラメータをカスタマイズできますが、スタティック スイッチを使用する場合を除き、その継承を無視できません。 親マテリアルで設定されたスタティック スイッチにより、子インスタンスでパラメータをオンまたはオフに切り替えることができます。
オフに切り替えられたパラメータはコンパイルされないため、静的スイッチによってランタイム時のパフォーマンスが向上する可能性があります。 ただし、各ブール値は新しいシェーダー順列を作成するため、(マテリアルの複雑さに応じて) コンパイル時間が大幅に増加する可能性があります。 スイッチの有用性は、使用方法やプロジェクトの開発ニーズによって異なります。
ランタイムとは、ゲームが実行されている状態を指します。 コンパイル時間とは、ランタイムの前にゲームをコンパイルしている段階を指します。
マスクの反転を制御する静的スイッチを作成するには、次の手順を実行します。
マテリアル グラフで LED Sign ノードを選択し、Ctrl + D キーを押して複製します。
新しいノードの名前を「
Screen」に変更します。Screen の RGB 出力からドラッグして、「One Minus」を検索します。
グラフ内で右クリックして「Static Switch Parameter」を検索します スイッチの名前を「
Flip Mask?」とします。One Minus の出力をスイッチの False 入力に接続します。
LED Sign の RGB 出力をスイッチの True 入力に接続します。
スイッチの出力をマテリアルのルート ノードの Opacity Mask 入力に接続します。
マテリアルを保存します。
マテリアル グラフは次のようになります。
これにより、輝度、色、テクスチャ マップ、またはマスクの反転を独自に制御するマテリアル インスタンスを M_EmissiveSign から作成できるようになりました。
M_EmissiveSign のインスタンスをレベル内の新規または既存のメッシュに適用して、選択したシーンを作成します。 レベル内でウォーター ボールを転がすと、Lumen のグローバル イルミネーションおよび反射システムが使用され、サインが濡れた床に映し出されます (デフォルトで有効)。 Lumen とその他の反射システムの詳細については、次のチュートリアルで学習します。
次の内容
次のチュートリアルでは、ポストプロセス ボリューム内の反射、イルミネーション システム、およびさまざまなインカメラ エフェクトをレベルに適用する方法について学習します。