Spatial(空間)マテリアル

はじめに

SpatialMaterial は、シェーダーコードを記述する必要なしに、アーティストがマテリアルで探すほとんどの機能を提供することを目的としたデフォルトの3Dマテリアルです。ただし、追加の機能が必要な場合は、シェーダーコードに変換できます。

このチュートリアルでは、SpatialMaterial に存在するほとんどのパラメーターについて説明します。

オブジェクトに SpatialMaterial を追加するには3つの方法があります。メッシュの Material プロパティに追加できます。メッシュを使用するノード(MeshInstanceノードなど)の Material プロパティ、またはメッシュを使用するノードの Material Override プロパティに追加できます。

../../_images/add_material.png

メッシュ自体にマテリアルを追加すると、そのメッシュが使用されるたびにそのマテリアルが追加されます。メッシュを使用してノードにマテリアルを追加すると、マテリアルはそのノードでのみ使用され、メッシュのマテリアルプロパティもオーバーライドします。マテリアルがノードの Material Override プロパティに追加された場合、そのノードでのみ使用されます。また、ノードの通常のマテリアルプロパティとメッシュのマテリアルプロパティもオーバーライドします。

フラグ(Flags)

Spatialマテリアルには、マテリアルの一般的な使用を決定する多くのフラグがあります。

../../_images/spatial_material1.png

Transparent(透過)

Godotでは、特別に構成されていない限り、マテリアルは透明ではありません。この背後にある主な理由は、透明なマテリアルが異なる手法を使用してレンダリングされることです(背面から前面にソートされ、順番にレンダリングされます)。

この手法は効率が低く(多くの状態変化が起こる)、完全に不透明なジオメトリを必要とする多くの中間および後処理効果(SSAO、SSRなど)でマテリアルを使用できなくなります。

このため、特に指定しない限り、Godotのマテリアルは不透明であると見なされます。透過性を有効にする主な設定は次のとおりです:

  • Transparentフラグ(この項目)
  • "Mix"以外に設定されたブレンドモード
  • 距離または近接フェードの有効化

Use Shadow to Opacity(影を不透明度に使用)

ライティングはアルファを修正し、影のある領域は不透明になり、影のない領域は透明になります。 ARのカメラフィードに影を重ねるのに便利です。

Unshaded(影なし)

ほとんどの場合、マテリアルは照明(シェーディング)の影響を受けることが一般的です。

ただし、場合によっては、アルベド(色)のみを表示し、残りは無視したい場合があります。このフラグをオンに切り替えると、すべてのシェーディングが削除され、照明の影響を受けていない元々の色が表示されます。

../../_images/spatial_material26.png

Vertex Lighting(頂点照明)

Godotでは深度プリパスのおかげで、ピクセルあたりのコストはほぼ均一です。すべての照明計算は、すべてのピクセルで照明シェーダーを実行することによって行われます。

これらの計算にはコストがかかるため、いくつもの透明度を持つレイヤーを描画する場合などの、一部のコーナーケース(極まれで厄介なケース)ではパフォーマンスが大幅に低下する可能性があります(これはパーティクルシステムでは一般的です)。これらの場合、頂点ごとの照明に切り替えると役立つ場合があります。

さらに、ローエンドまたはモバイルデバイスでは、頂点照明(vertex lighting)に切り替えると、レンダリングパフォーマンスが大幅に向上します。

../../_images/spatial_material2.png

vertex lightingを有効にすると、指向性のライティングのみが影を生成できることに注意してください(パフォーマンス上の理由から)。

No Depth Test(深度テスト無し)

近くのオブジェクトを遠くのオブジェクトの上に表示するために、深度テストが実行されます。無効にすると、オブジェクトが他のすべての上(または下)に表示されます。

これを無効にすることは、ワールド空間でインジケータを描画する場合に最適で、Materialの Render Priority プロパティともに非常にうまく機能します(このページの下部を参照)。

../../_images/spatial_material3.png

Use Point Size(ポイントのサイズを使用)

このオプションは、レンダリングされるジオメトリがポイントで構成されている場合にのみ有効です(3D DCCからインポートされる場合、通常は三角形で構成されます)。その場合、それらのポイントのサイズを変更できます(以下を参照)。

World Triplanar(ワールド空間でのTriplanar)

Triplanarマッピングを使用する場合(UV1およびUV2設定で以下を参照)、Triplanarはオブジェクトのローカル空間で計算されます。このオプションは、ワールド空間でTriplanarを機能させます。

Fixed Size(固定サイズ)

これにより、オブジェクトは距離に関係なく同じサイズでレンダリングされます。これは主にインジケーター(深度テストなし、高いレンダリング優先度)および一部のタイプのビルボードに役立ちます。

Do Not Receive Shadows(影を受けない)

オブジェクトに影を付けないようにします。

Disable Ambient Light(アンビエントライト無効)

他のライトが無い場合でも照明を行うアンビエントライトをオブジェクトが受けないようにします。

Ensure Correct Normals(正しい法線を確保する)

不均一なスケーリングが使用されている場合の法線を修正します。

Vertex Color(頂点色)

This setting allows choosing what is done by default to vertex colors that come from your 3D modelling application. By default, they are ignored.

../../_images/spatial_material4.png

Use as Albedo(アルベドとして使用)

このオプションを選択すると、頂点色がアルベド色として使用されます。

Is sRGB(これはsRGBです)

ほとんどの3D DCCは頂点色をsRGBとしてエクスポートする可能性が高いため、このオプションをオンに切り替えると、正しく見えるようになります。

Parameters

SpatialMaterial には、レンダリングのさまざまな側面を微調整するための設定可能なパラメーターもいくつか用意されています。

../../_images/spatial_material5.png

Diffuse Mode(拡散モード)

光がオブジェクトに当たるときの拡散散乱で使用されるアルゴリズムを指定します。デフォルトは Burley です。他のモードも利用可能です:

  • Burley: デフォルトモード、オリジナルのDisney Principled PBS拡散アルゴリズム。
  • Lambert: roughnessの影響を受けません。
  • Lambert Wrap: roughnessが増すと、Lambertを90度以上に広げます。髪の毛や低コストのサブサーフェススキャッタリングのシミュレーションに最適です。この実装は省エネルギーです。
  • Oren Nayar: この実装は、(roughnessによる)マイクロサーフェシングを考慮することを目的としています。粘土のような素材やある種の布に適しています。
  • Toon: roughnessの影響を受けたスムージングで、照明にハードカットを提供します。より良い効果を得るには、環境の環境光設定から空の影響を無効にするか、spatialマテリアルの環境光を無効にすることをお勧めします。
../../_images/spatial_material6.png

Specular Mode(鏡面反射モード )

鏡面反射(スペキュラ)blob のレンダリング方法を指定します。鏡面反射blobは、オブジェクトに反射される光源の形状を表します。

  • ShlickGGX: PBR 3Dエンジンで最近使用されている最も一般的なblob。
  • Blinn: 前世代のエンジンで一般的。現在使用する価値はありませんが、互換性のためにここに残しました。
  • Phong: 上記と同じ。
  • Toon: トゥーンblobを作成します。これは、roughnessに応じてサイズを変更します。
  • Disabled: 時々blobが邪魔になります。なので立ち去りなさい!
../../_images/spatial_material7.png

Blend Mode(ブレンドモード)

マテリアルのブレンドモードをコントロールします。Mix 以外のモードでは、オブジェクトが強制的に透過パイプラインをスルーする(処理されない)ことに注意してください。

  • Mix: デフォルトのブレンドモード、アルファはオブジェクトの表示量(透け方)を制御します。
  • Add: オブジェクトは加算的にブレンドされ、フレアや火のようなエフェクトに適しています。
  • Sub: オブジェクトが減算されます。
  • Mul: オブジェクトが乗算されます。
../../_images/spatial_material8.png

Cull Mode(カリングのモード)

背面がレンダリングされるときにオブジェクトのどちら側が描画されないかを決定します:

  • Back: オブジェクトの背面は、表示されていないときにカリングされます(デフォルト)。
  • Front: 表示されていない場合、オブジェクトの前面がカリングされます。
  • Disabled: 両面オブジェクトに使用します(カリングは実行されません)。

Depth Draw Mode(深度描画モード)

深度レンダリングを実行する必要がある場合を指定します。

  • Opaque Only(デフォルト): 深度(奥行き)は不透明オブジェクトに対してのみ描画されます。
  • Always: 不透明オブジェクトと透明オブジェクトの両方に対して深度描画が描画されます。
  • Never: 深度描画は行われません(これを上記のNo Depth Test オプションと混同しないでください)。
  • ** Depth Pre-Pass:** 透明なオブジェクトの場合、まず不透明な部分で不透明なパスが作成され、次に透明度が上に描画されます。このオプションは、透明な草や木の葉で使用します。
../../_images/material_depth_draw.png

Line Width(線幅)

線を描くとき、描かれる線の幅を指定します。このオプションは、ほとんどの最新のハードウェアでは使用できません。

Point Size(ポイントサイズ)

ポイントを描画するときの、ポイントサイズをピクセル単位で指定します。

Billboard Mode(ビルボードモード)

描画するマテリアルのビルボード モードを有効にします。これは、オブジェクトがカメラに向く方法を制御します:

  • Disabled: ビルボードモードは無効です。
  • Enabled: ビルボードモードが有効になっている場合、オブジェクトの-Z軸は常にカメラに向かいます。
  • Y-Billboard: オブジェクトのX軸は常にカメラのX軸に合わせられます。
  • Particles: アニメーションオプションを指定できるため、パーティクルシステムに最適です。
../../_images/spatial_material9.png

上記のオプションは、Particle Billboardでのみ有効です。

Billboard Keep Scale(ビルボードキープスケール)

ビルボードモードでメッシュのスケーリングを有効にします。

Grow(成長/拡張)

法線が指す方向にオブジェクトの頂点を成長させます:

../../_images/spatial_material10.png

これは、一般的に安価にアウトラインを作成するために使用されます。2 番目のマテリアル パスを追加し、その色を黒にし、シェーディングなし、逆カリング(Cull Front)にして、Growをチックしたものをいくつか追加します:

../../_images/spatial_material11.png

Use Alpha Scissor(アルファシザーを使用)

0 または 1 以外の透明度が必要ない場合、しきい値を設定して、オブジェクトが半透明のピクセルをレンダリングしないようにすることができます。

../../_images/spatial_material12.png

これにより、不透明なパイプラインを介してオブジェクトがレンダリングされ、より高速になり、SSAO、SSRなどの中間および後処理効果を使用できるようになります。

マテリアルの色、マップ、チャンネル

パラメーターに加えて、マテリアル自体を定義するのは色、テクスチャ、およびチャンネルです。 Godotはそれらの広範なリストをサポートしています。以下で詳細に説明します:

Albedo(アルベド)

Albedo は、他のすべての設定に関連するマテリアルのベースカラーです。Unshaded に設定すると、これが表示される唯一の色になります。 Godotの以前のバージョンでは、このチャネルの名前は Diffuse でした。名前の変更を行った主な理由は、PBR(Physically Based Rendering)では、この色が単なる拡散照明パスよりも多くの計算に影響するためです。

アルベドの色とテクスチャは、乗算されて一緒に使用されます。

アルベド色とテクスチャの アルファチャンネル は、オブジェクトの透明度にも使用されます。色またはテクスチャで アルファチャンネル を使用する場合は、transparencyを有効にするか、*alpha scissoring* を有効にしてください。

Metallic(メタリック)

Godotは、そのシンプルさから、競合する他のモデルではなくMetalicモデルを使用しています。このパラメーターは、マテリアルの反射率を定義します。反射が多いほど、拡散光や周囲光が材料に影響を及ぼし、反射光が多くなります。このモデルは「省エネルギー」だといわれています。

Specular パラメーターは、反射率の一般的な量です(Metallic とは異なり、これはエネルギーを節約しませんので、0.5 のままにして、必要でない限り触れないでください)。

最小の内部反射率は 0.04 であるため、現実の世界のようにマテリアルを完全に無反射にすることはできません。

../../_images/spatial_material13.png

Roughness(粗さ)

Roughness は反射の発生方法に影響します。0 の値は完璧な鏡になり、1 の値は反射を完全にぼかします(自然なマイクロサーフェシングをシミュレートします)。最も一般的な種類のマテリアルは、MetaricRoughness の適切な組み合わせで実現できます。

../../_images/spatial_material14.png

Emission(発光)

Emission は、マテリアルから放射される光の量を指定します(これには、GIプローブ が使用されない限り、ジオメトリを囲む光は含まれないことに注意してください)。この値は、結果の最終画像に追加され、シーン内の他の照明の影響を受けません。

../../_images/spatial_material15.png

Normal map

Normal mapping allows you to set a texture that represents finer shape detail. This does not modify geometry, only the incident angle for light. In Godot, only the red and green channels of normal maps are used for better compression and wider compatibility.

../../_images/spatial_material16.png

注釈

Godot requires the normal map to use the X+, Y- and Z+ coordinates. In other words, if you've imported a material made to be used with another engine, you may have to convert the normal map so its Y axis is flipped. Otherwise, the normal map direction may appear to be inverted on the Y axis.

More information about normal maps (including a coordinate order table for popular engines) can be found here.

Rim(縁)

一部の布地には、周囲に光を散乱させる小さなマイクロファーがあります。 Godotは、これを Rim パラメーターでエミュレートします。Emissionチャネルのみを使用する他のリム照明の実装とは異なり、この実装では実際に光が考慮されます(光がない場合はリムが現れないことを意味します)。これにより、より真実味を作り出す効果がえられます。

../../_images/spatial_material17.png

リムのサイズはroughnessに依存し、色の付け方を指定する特別なパラメーターがあります。Tint*が ``0`` の場合、ライトの色がリムに使用されます。*Tint1 の場合、素材のアルベドが使用されます。通常、中間値を使用するのが最適です。

Clearcoat(クリアコート)

この機能は、GLES3バックエンドを使用している場合にのみ使用できます。

Clearcoat パラメーターは、透明なコーティングの2次パスをマテリアルに追加するために使用されます。これは、車の塗装やおもちゃでは一般的です。実際には、既存のマテリアルの上に追加される小さなスペキュラblobです。

Anisotropy(異方性)

この機能は、GLES3バックエンドを使用している場合にのみ使用できます。

これにより、スペキュラblobの形状が変更され、接線空間に位置合わせされます。異方性は一般に髪の毛に使用されるか、ブラシをかけられたアルミニウムなどの素材をよりリアルにするために使用されます。フローマップ(flowmap)と組み合わせると、特にうまく機能します。

../../_images/spatial_material18.png

Ambient Occlusion(アンビエントオクルージョン)

焼き込み(ベイク)処理されたアンビエントオクルージョンマップを指定することができます。このマップは、オブジェクトの各表面に到達する環境光の光量に影響します(デフォルトでは、直接光には影響しません)。スクリーンスペースアンビエントオクルージョン(SSAO)を使用してアンビエントオクルージョンを生成することは可能ですが、よく焼き込まれたAOマップの品質に勝るものはありません。可能な場合は、アンビエントオクルージョンを焼き込むことをお勧めします。

../../_images/spatial_material19.png

Depth(深度/奥行)

この機能は、GLES3バックエンドを使用している場合にのみ使用できます。

マテリアルにDepthマップを設定すると、光線方向のサーチが行われ、ビュー方向に沿った凹凸の適切な変位がエミュレートされます。これは実際に追加されたジオメトリではなく、奥行きの錯覚です。複雑なオブジェクトでは機能しない場合がありますが、テクスチャにリアルな奥行き効果をもたらします。最良の結果を得るには、Depth を通常のマッピングと一緒に使用する必要があります。

../../_images/spatial_material20.png

Subsurface Scattering(サブサーフェススキャッタリング)

この機能は、GLES3バックエンドを使用している場合にのみ使用できます。

この効果は、オブジェクトの表面を透過し、散乱してから出る光をエミュレートします。リアルな肌、大理石、色のついた液体などを作成すると便利です。

../../_images/spatial_material21.png

Transmission(トランスミッション)

これは、明るい側(光源から見える)からの光が暗い側(光源とは反対側)に透過される量を制御します。これは、植物の葉、草、人間の耳などの薄いオブジェクトに適しています。

../../_images/spatial_material22.png

Refraction(屈折)

この機能は、GLES3バックエンドを使用している場合にのみ使用できます。

Refractionが有効な場合、Godotはアルファブレンディングより優先して、レンダリングされるオブジェクトの背後から情報を取得しようとします。これにより、現実の屈折に似た方法で透明な部分を歪めることができます。

../../_images/spatial_material23.png

Detail(詳細)

Godot は、第二アルベドマップと法線マップを使用して、多くの方法でブレンドできるDetailテクスチャを生成することができます。これをセカンダリUV またはTriplanarモードと組み合わせることで、多くの興味深いテクスチャを実現できます。

../../_images/spatial_material24.png

There are several settings that control how detail is used.

Mask: The detail mask is a black and white image used to control where the blending takes place on a texture. White is for the detail textures, Black is for the regular material textures, different shades of gray are for partial blending of the material textures and detail textures.

Blend Mode: These four modes control how the textures are blended together.

  • Mix: Combines pixel values of both textures. At black, only show the material texture, at white, only show the detail texture. Values of gray create a smooth blend between the two.
  • Add: Adds pixel values of one Texture with the other. Unlike mix mode both textures are completely mixed at white parts of a mask and not at gray parts. The original texture is mostly unchanged at black
  • Sub: Subtracts pixel values of one texture with the other. The second texture is completely subtracted at white parts of a mask with only a little subtraction in black parts, gray parts being different levels of subtraction based on the exact texture.
  • Mul: Multiplies the RGB channel numbers for each pixel from the top texture with the values for the corresponding pixel from the bottom texture.

Albedo: This is where you put an albedo texture you want to blend. If nothing is in this slot it will be interpreted as white by default.

Normal: This is where you put a normal texture you want to blend. If nothing is in this slot it will be interpreted as a flat normal map. This can still be used even if the material does not have normal map enabled.

UV1 and UV2(UV1およびUV2)

Godotは、マテリアルごとに2つのUVチャネルをサポートします。第二UVは、アンビエントオクルージョンまたは放出(焼き込みライト)に役立つことがよくあります。 UVはスケーリングとオフセットが可能で、繰り返しテクスチャを使用する場合に便利です。

Triplanar Mapping(三面マッピング)

Triplanarマッピングは、UV1とUV2の両方でサポートされています。これは、テクスチャ座標を取得する代替方法であり、「オートテクスチャ」とも呼ばれます。テクスチャは、X、Y、Zでサンプリングされ、法線によってブレンドされます。 Triplanarマッピングは、ワールド空間またはオブジェクト空間で実行できます。

下の画像では、すべてのプリミティブがワールドTriplanarと同じマテリアルを共有する方法を確認できるため、レンガのテクスチャはそれらの間でスムーズに連続しています。

../../_images/spatial_material25.png

Proximity and distance fade(近接および距離でのフェード)

Godotでは、視点からの距離やマテリアル同士の近さに応じてマテリアルをフェードさせることができます。Proximity フェードは、ソフトパーティクルや、海岸に滑らかにブレンドされた水の塊などの効果に役立ちます。Distanceフェードは、特定の距離より後にのみ存在するライトシャフトまたはインジケーターに役立ちます。

これらを有効にするとアルファブレンディングが有効になるので、通常、シーン全体で乱用することはお勧めできません。

../../_images/spatial_material_proxfade.gif

Render priority(レンダリングの優先度)

オブジェクトのレンダリング順序は変更できますが、これは主に透明なオブジェクト(または、床の亀裂などの深さの描画は行うが色の描画は行わない不透明なオブジェクト)に役立ちます。