マテリアルをデカールとして投影する

「デカール」はレベル内のメッシュにカラー テクスチャ、法線マップ、放出カラー エフェクトを投影します。

デカールを使用すると、さまざまな効果を実現することができます。たとえば、次のようになります。

上の図では、レベル内の平坦な白い壁がいくつかのデカールにより高度なものになっています。ここで使われているデカールは、レンガのテクスチャの法線マップ、2 つの半透明のカラー塗りつぶし、アルファ透明が使用されたカラー テクスチャ、カラー情報と法線情報の両方を追加する弾痕です。

手順 1. デカール プロジェクタを作成する

デカールは通常、デカール プロジェクタ ユニットを使用して投影されます。これは Stingray のコア リソース フォルダ(core/stingray_renderer/helper_units/decals/decal_box)にあります。

レベルで新しいデカール プロジェクタを作成するには

  1. Create パネルを開きます。

  2. Rendering カテゴリで Decal Projector アイコンを選択し、Place ツールをアクティブにします。

  3. レベル内で新しいプロジェクタ ボリュームを配置する場所をクリックします。Place ツールを有効にすると、必要な数だけボリュームを追加できます。

  4. 完了したら Decal Projector アイコンをもう一度クリックするか、別のビューポイント インタラクション ツールに切り替えます。

手順 2. プロジェクトに新しいマテリアルを作成する

新しいデカール プロジェクトはいずれも Stingray コア リソースにある既定のマテリアルを使用します。このプレースホルダは、テクスチャが欠落している箇所にデバッグ テクスチャ(疑問符または黄色の背景)を投影します。デカール用の新しいマテリアルを作成して、独自のテクスチャを投影するよう設定することができます。

  1. Asset Browser で、新しいマテリアルを保存するフォルダに移動します。

  2. Asset Browser でフォルダを右クリックします。コンテキスト メニューでCreate > Material (Empty) または Create > Material (Standard) を選択します。

  3. 新しいマテリアルの名前を入力して、OK をクリックします。

  4. Asset Browser でマテリアルを選択し、Property Editorを開いてプロパティを表示します。

  5. Parent Material グループで、Name フィールドが既定のデカール マテリアル(core/stingray_renderer/helper_units/decals/decal)を参照するように設定します。

    これにより、そのマテリアルが適用されるすべてのメッシュが、通常のライティングがされたメッシュとしてではなく、デカール プロジェクタとしてシェーディングされます。

  6. 親マテリアルの設定を行うと、新しい Color Map プロパティが Property Editor に表示されます。この設定を使用して、既定の疑問符カラー テクスチャを、適用するデカール イメージに置き換えます。投影テクスチャのカラー値やアルファ値は、ここで設定するテクスチャから継承されます。

法線マップまたは放出テクスチャを投影する場合は、マテリアルのシェーダ グラフを変更する必要があります。以下を参照してください。

手順 3. プロジェクタに新しいマテリアルを適用する

  1. レベルでプロジェクタを選択し、Property Editor を開いてプロパティを表示します。

  2. Materials グループで、プロジェクタのデカル マテリアル スロットが新しいマテリアルを参照するように設定します。

手順 4. プロジェクトを移動、スケーリング、方向付けする

プロジェクトのデカールは、ボリュームと交差するメッシュにのみ適用されます。プロジェクタ ユニットを移動およびスケーリングして、投影先のメッシュと交差させることにより、投影先となるメッシュを設定することができます。

テクスチャは常にプロジェクタ ボックスのローカル前方軸に沿って垂直に投影されます(下図の緑色の矢印)。このとき、テクスチャの上部はプロジェクタ ボックスのローカル上方軸の方向に位置合わせされます(青色の矢印)。プロジェクタを前方軸を中心に回転させると、投影を横方向や縦方向に回転させることができます。

また、テクスチャは前方軸の負の方向に沿って投影されますが、水平方向に反転します。プロジェクタを交差しているメッシュから離れた方向に向けると、テクスチャを反転させることができます。

投影テクスチャは、ローカル右方軸および上方軸に沿って、プロジェクタ ユニットの寸法と一致するようにスケーリングされます。これらの軸に沿ってプロジェクタ ボックスのスケールを調整することにより、投影するテクスチャの幅と高さの比率を変更できます。

プロジェクタを回転して、プロジェクタと投影先のメッシュとの間の入射角を変更することにより、投影の「傾斜」を制御できます。

(オプション) マテリアル シェーダ グラフをカスタマイズする

法線テクスチャまたは放出テクスチャを投影する場合、またはカラー テクスチャの解釈方法を変更する場合、マテリアルのシェーダ グラフを変更できます。

  1. Asset Browser でマテリアルを選択してから、Property Editor を開いてプロパティを表示します。

  2. Property Editor で、Make Unique ボタンをクリックします。これにより、マテリアルが親からでタッチされ、編集可能になります。

  3. Open Shader Graph ボタンをクリックするか、Asset Browser でマテリアルをダブルクリックします。

Shader Graph Editor が開き、マテリアルのグラフがロードされます。必要に応じて、マテリアル ノードを再接続できます。たとえば、次のグラフでは、Property Editor で法線マップを設定したりマテリアルの不透明度をマッピングすることができます。法線マップから取得したアルファ チャネルはDecal Base ノードの Mask 入力に渡されます。これにより、他のデカールにより追加されたサーフェス法線とフラット領域の競合を防ぐことができます。

(オプション) カスタム デカール プロジェクタ ユニットを作成する

任意のユニットを、シェーダ グラフが Decal Base 出力ノードを使用しているマテリアルを使用するよう設定することにより、このユニットをデカール プロジェクタにすることができます。Create パネルから配置したコア リソースのデカール プロジェクタ ユニットは、デカール マテリアルを使用するよう事前設定された単なる立方体メッシュです。それ以外に特別な要素は何もありません。

同じテクスチャを多くの場所で投影する必要がある場合、既定のデカール ヘルパーではなく独自のカスタム デカール ヘルパーを作成するほうが便利な場合があります。

これを行う方法のひとつとして、Unit Editor でベース デカール·ボックスを開き、別のリソース名を付けて保存することがあげられます。また、投影するマテリアルを使用するよう事前設定しておくと、レベルでユニットをスポーンする際の調整を少なくすることができます。

デカール プロジェクタを動的にスポーンする

デカール プロジェクタは基本的には単なるユニットでしかないため、デカール プロジェクタのスポーンとスポーン解除は Flow または Lua でゲームのランタイムで動的に行うことができます。これは他のユニットのスポーンやスポーン解除と同じ方式です。ユニットの配置とサイズ設定を行い、そのユニットが投影先となるメッシュに投影されるようにする必要があります。また、ユニットが正しいマテリアルに投影されるよう設定することが必要となる場合があります。

たとえば、次のようになります。

-- spawn the unit
local my_projector = stingray.World.spawn_unit(SimpleProject.world, "core/stingray_renderer/helper_units/decals/decal_box")
-- set a new material for the decal slot
stingray.Unit.set_material(my_projector, "decal", "content/materials/my_texture")
-- move, scale, resize
stingray.Unit.set_local_position(my_projector, 1, wanted_position)
stingray.Unit.set_local_rotation(my_projector, 1, wanted_rotation)
stingray.Unit.set_local_scale(my_projector, 1, wanted scale)
...
-- unspawn the unit
stingray.World.destroy_unit(SimpleProject.world, my_projector)

制限事項