環境とポストプロセッシング

Godot 3.x は、再設計された環境(Environment/エンバイロメント)リソースと、すぐに使用できる多くのエフェクトを備えた真新しいポストプロセッシングシステムを提供します。

環境

Environment(環境)リソースには、レンダリング環境の制御に必要なすべての情報が格納されます。これには、空、環境光、トーンマッピング、エフェクト、調整が含まれます。それ自体は何もしませんが、次の場所のいずれかで使用されると、優先度順に有効になります:

Cameraノード

環境はカメラに設定できます。他の設定よりも優先されます。

../../_images/environment_camera.png

これは、既存の環境をオーバーライドする場合に最も役立ちますが、一般的には以下のオプションを使用することをお勧めします。

WorldEnvironmentノード

WorldEnvironmentノードはどのシーンにも追加できますが、アクティブなシーンツリーごとに1つしか存在できません。複数追加すると警告が表示されます。

../../_images/environment_world.png

追加された環境は、デフォルトの環境(以下で説明)よりも高い優先度を持ちます。つまり、シーンごとにオーバーライドできるため、非常に便利です。

デフォルトの環境

デフォルトの環境を設定できます。これは、環境がCameraノードまたはWorldEnvironmentノードに設定されていない場合のフォールバックとして機能します。 [プロジェクト設定] → [Rendering ] → [Environment]に進みます:

../../_images/environment_default.png

プロジェクトマネージャーから作成された新しいプロジェクトには、デフォルトの環境(default_env.tres)が付属しています。作成する必要がある場合は、ここで参照する前にディスクに保存してください。

Environment(環境)のオプション

以下は、すべてのEnvironmentのオプションとそれらの使用方法の詳細な説明です。

Background(背景)

Backgroundセクションには、背景(オブジェクトが描画されなかった画面の一部)を塗りつぶす方法に関する設定が含まれています。Godot 3.0では、背景は画像や色を表示するだけでなく、環境光や反射光によるオブジェクトへの影響を変えることもできます。

../../_images/environment_background1.png

背景を設定するには多くの方法があります:

  • Clear Color は、プロジェクトで定義されているデフォルトのクリアカラーを使用します。背景は一定の色になります。
  • Custom Color はクリアカラーに似ていますが、カスタムカラー値を持ちます。
  • Sky では、パノラマの空(360度の球体テクスチャ)または手続き型の空(グラデーションとオプションの太陽を備えたシンプルな空)を定義できます。オブジェクトはそれを反射し、そこから環境光を吸収します。
  • Color+Sky では(上記のように)空を定義できますが、背景の描画には一定の色値を使用します。空は反射光と環境光にのみ使用されます。

Ambient Light(環境光)

Ambient(ここで定義)は、同じ強度ですべてのジオメトリに影響するライトの一種です。これはグローバルであり、シーンに追加される可能性のあるライトとは無関係です。

環境光には2つのタイプがあります: Ambient Color (マテリアルのアルベドに乗算する一定の色です)、および Sky から取得したもの(前述のように、これを有効にするには、空を背景として設定する必要があります)。

../../_images/environment_ambient.png

Sky を背景として設定すると、Sky Contribution 設定を使用して環境色と空をブレンドできます(便宜上、この値はデフォルトでは1.0であるため、空のみがオブジェクトに影響します)。

異なる環境光がシーンに与える影響の比較は次のとおりです:

../../_images/environment_ambient2.png

最後に、Energy 設定があります。これは乗数であり、HDRで作業するときに便利です。

一般に、環境光は、最高の照明品質を提供しないため、単純なシーン、大きなエクステリア、またはパフォーマンス上の理由(環境光はレンダリングコストが安い)に対してのみ使用する必要があります。 ReflectionProbeまたはGIProbeから環境光を生成すると、間接光がどのように伝播するかをより忠実にシミュレートできます。以下は、均一な環境色とGIProbeを使用した場合の品質の比較です:

../../_images/environment_ambient_comparison.png

上記の方法のいずれかを使用すると、オブジェクトは一定した環境光をプローブからの環境光に置き換えます。

Fog(霧)

霧は、実生活と同様に、遠くのオブジェクトを均一な色にフェードアウトさせます。物理的な効果は実際にはかなり複雑ですが、Godotは適切な近似を提供します。 Godotには2種類の霧があります:

  • Depth Fog: これはカメラからの距離に基づいて適用されます。
  • Height Fog: これは、カメラからの距離に関係なく、特定の高さの下(または上)のオブジェクトに適用されます。
../../_images/environment_fog_depth_height.png

これらの霧のタイプは両方とも、カーブを微調整して、トランジションを多少シャープにすることができます。

霧の効果をさらに面白くするために、2つのプロパティを調整できます:

1つ目は Sun Amount で、霧のSun Colorプロパティを使用します。指向性ライト(通常は太陽)を見ると、フォグの色が変わり、フォグを通過する日光をシミュレートします。

2つ目は Transmit Enabled で、より現実的な光透過率をシミュレートします。実際には、霧の中で光をより際立たせます。

../../_images/environment_fog_transmission.png

Tonemap(トーンマップ)

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

映画およびゲーム業界で使用される標準曲線の短いリストから、シーンに適用されるトーンマッピング曲線を選択します。トーンマッピングは、結果がそれほど強くない場合でも、明るい領域と暗い領域をより均一にすることができます。トーンマッピングオプションは次のとおりです:

  • Mode: トーンマッピングモード、Linear、Reindhart、Filmic、またはAcesのいずれかです。
  • Exposure: トーンマッピング露出は時間の経過に従って受信する光の量(露光量)をシミュレートします。
  • White: トーンマッピングの白。スケールの白の位置をシミュレートします(デフォルトでは1.0)。

自動露出(HDR)

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

ほとんどの場合、照明とテクスチャリングはアーティストによって厳しく制御されますが、Godotは自動露出メカニズムを備えたシンプルなハイダイナミックレンジの実装をサポートしています。これは一般に、暗い場所や屋外で屋内エリアを組み合わせるときにリアリズムのために使用されます。自動露出は、明るい場所と暗い場所、および異なる光量の間を適応させるために、カメラ(または目)をシミュレートします。

../../_images/environment_hdr_autoexp.gif

自動露出を使用する最も簡単な方法は、屋外の照明(または他の強い照明)のエネルギーが1.0を超えるようにすることです。これは、(ライト自体の) Energy 乗数を微調整することによって行われます。通常、一貫性を持たせるために、Sky も指向性ライトと一致させるためにエネルギー乗数を使用する必要があります。一般的に、屋内と屋外の状態をシミュレートするには、3.0〜6.0の値で十分です。

自動露出と Glow ポストプロセッシング(詳細は下記)を組み合わせることにより、トーンマップの White を超えたピクセルがグローバッファー流れ込み、典型的な写真のブルームエフェクトを作成できます。

../../_images/environment_hdr_bloom.png

Auto Exposureセクションのユーザーが制御可能な値には、適切なデフォルトがありますが、微調整ができます:

../../_images/environment_hdr.png
  • Scale: 照明をスケールする値。明るい値は明るい画像を生成し、小さい値は暗い画像を生成します。
  • Min Luma: 自動露出の調整対象となる最小輝度。輝度は、画面のすべてのピクセルの光の平均です。
  • Max Luma: 自動露出の調整対象となる最大輝度。
  • Speed: 輝度が補正される速度。値が大きいほど、より速い補正が行われます。

中間およびポストプロセッシングエフェクト

環境(Environment)では、広く使用されている大量の中間プロセッシングおよびポストプロセッシングエフェクトがサポートされています。

スクリーンスペース反射(Ss Reflections/SSR)

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

Godotは3つの反射データソース(Sky、ReflectionProbe、GIProbe)をサポートしていますが、すべての状況に対して十分な詳細を提供するわけではありません。スクリーンスペースの反射が最も意味のあるシナリオは、オブジェクトが互いに接触している場合です(床の上、テーブルの上、水に浮いているオブジェクトなど)。

../../_images/environment_ssr.png

もう1つの利点は(最低限しか有効にしない場合でも)、リアルタイムで機能することです(他の種類の反射は事前に計算されます)。これを使用して、キャラクター、車などが動き回るときに周囲の表面に反映させることができます。

いくつかのユーザー制御パラメーターを使用して、この手法を微調整できます:

  • Max Steps は、反射の長さを決定します。この数値が大きいほど、計算にコストがかかります。
  • Fade In では、接触領域を柔らかくために役立つフェードイン曲線を調整できます。
  • Fade Out で、フェードアウト曲線を調整できるため、ステップの限界は柔らかくフェードアウトします。
  • Depth Tolerance は、ギャップに対するスクリーンスペースレイヒット許容値の調整に使用できます。値が大きいほど、無視されるギャップが多くなります。
  • Roughness は、スクリーンスペースのぼかしを適用して、このマテリアル特性を持つオブジェクトの粗さを近似します。

スクリーンスペース反射は不透明なジオメトリを反射する場合にのみ機能することに注意してください。透明なオブジェクトは反射できません。

スクリーンスペース・アンビエントオクルージョン(Ssao/SSAO)

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

Ambient セクションで述べたように、Lightノードからの光が(その範囲外にあるか、遮られているといった理由で)到達しない領域は環境光で照らされます。 Godotは、GIProbe、ReflectionProbe、Sky、または一定の環境色を使用してこれをシミュレートできます。しかしこれらの方法はすべて、小さなジオメトリ・レベルではなく、より大きなスケール (大きな領域)にて効果が表れるという欠点があります。

一定の環境色とSkyはどの場所でも同じですが、それに比べてGIおよびReflectionプローブはより局所的な詳細度を持つとはいえ、光が中空または凹面の形状を照らすことができない状況をシミュレートするには不十分です。

これは、スクリーンスペースアンビエントオクルージョンでシミュレートできます。下の画像でわかるように、その目的は、光が入る狭い経路をシミュレートして、凹面領域がより暗くなるようにすることです:

../../_images/environment_ssao.png

よくある間違いとして、このエフェクトを有効にし、ライトをオンにしても、結果が確認できないというものです。これは、SSAOが直接光ではなく、環境光のみに作用するためです。

これが、上の画像で、直接光の下(左側)では効果が目立たない理由です。 SSAOを直接光でも機能させる場合は、Light Affect パラメーターを使用します(これは正しくありませんが、一部のアーティストはこの見た目が好きです)。

SSAOは、GIProbeのような間接光の実際の光源と組み合わせたときに見栄えがします:

../../_images/environment_ssao2.png

SSAOの調整は、いくつかのパラメーターで可能です:

../../_images/environment_ssao_parameters.png
  • Radius/Intensity: オクルージョンの半径または強度を制御するために、これら2つのパラメーターを使用できます。半径はワールド(メートル)単位です。
  • Radius2/Intensity2: 第二の半径/強度を使用できます。一般に、半径の大きいAOと小さいAOを組み合わせるとうまくいきます。
  • Bias: これはセルフオクルージョンを解決するために微調整できますが、通常はデフォルトで十分に機能します。
  • Light Affect: SSAOは周囲光のみに影響しますが、このスライダーを大きくすると、直接光にも影響します。この効果を好むアーティストもいます。
  • Ao Channel Affect: ゼロの値を使用すると、マテリアルのAOテクスチャのみがアンビエントオクルージョンに使用されます。 SSAOは適用されません。 0より大きい値は、AOテクスチャにSSAOエフェクトをさまざまな度合いで掛けます。これは、AOテクスチャのないマテリアルには影響しません。
  • Quality: 品質に応じて、SSAOは、すべてのピクセルについて球体上のサンプルをより多く取得します。High qualityは、最新のGPUでのみ有効です。
  • Blur: 使用されるブラーカーネルのタイプ。 1x1カーネルは、局所の詳細度をより良く保つ単純なぼかしですが、それほど効果的ではありません。一方、3x3は画像をより柔らかくしますが(ディザリングのような効果が少しあります)、局所の詳細度を保ちません。
  • Edge Sharpness: エッジのシャープネスを維持するために使用することができます(折り目にAOのない領域を避けます)。

被写界深度(DOF)/遠方ぼかし(Far Blur)

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

このエフェクトは、ハイエンドカメラの焦点距離をシミュレートします。特定の範囲の背後にあるオブジェクトをぼかします。**Transition**(遷移)領域(ワールド単位)を持つ 開始 **Distance**(距離) を持っています:

../../_images/environment_dof_far.png

Amount パラメーターは、ぼかしの量を制御します。大きなぼかしの場合、アーティファクトを回避するために Quality の調整が必要になる場合があります。

被写界深度(DOF)/近方ぼかし(Near Blur)

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

このエフェクトは、ハイエンドカメラの焦点距離をシミュレートします。カメラに近いオブジェクトをぼかします(遠方ぼかしとは反対方向に作用します)。**Transition**(遷移)領域(ワールド単位)を持つ 開始 **Distance**(距離) を持っています:

../../_images/environment_dof_near.png

Amount パラメーターは、ぼかしの量を制御します。大きなぼかしの場合、アーティファクトを回避するために Quality の調整が必要になる場合があります。

両方のぼかしを一緒に使用して、特定のオブジェクトに視聴者の注意を集中させる使い方が一般的です:

../../_images/environment_mixed_blur.png

Glow(にじみ/発光)

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

写真やフィルムでは、光量がメディアでサポートされている最大値(アナログまたはデジタル)を超えると、一般に画像の暗い領域に向かって外側ににじみます。これは、Glow エフェクトを使用してGodotでシミュレートされます。

../../_images/environment_glow1.png

デフォルトでは、エフェクトが有効になっていても、効果が弱いか見えません。実際に表示するには、次の2つの条件のいずれかが必要です:

    1. ピクセル内の光が HDR Threshold を超えている(0はすべてのライトを超え、1.0はトーンマッパー White の値を超えています)。通常、この値は1.0であると予想されますが、より多くの光を放出できるように下げることができます。また、HDR Scale という追加のパラメーターがあり、しきい値を超える光のスケーリング(明るくまたは暗くする)を可能にします。
../../_images/environment_glow_threshold.png
    1. Bloomエフェクトの値が0より大きい値に設定されている。値が大きくなると、画面全体がグロープロセッサーに大量に送信されます。
../../_images/environment_glow_bloom.png

両方とも、明るい部分から光がにじみ出始めます。

Glowが表示されたら、いくつかの追加パラメーターで制御できます:

  • Intensity はエフェクトの全体的な尺度であり、より強くまたはより弱くすることができます(0.0に設定すると削除します)。
  • Strength ガウスフィルターカーネルが処理される強度です。値を大きくすると、フィルターが飽和して外側に拡張します。一般に、Levels でサイズをより効率的に調整できるため、これを変更する必要はありません。

エフェクトの Blend Mode も変更できます:

  • Additive は、ブレンドを行わずに画像にグロー効果を加算するだけなので、最も強力です。一般的に使用するには効果が強すぎますが、低強度のブルームでは見栄えがよくなります(夢のような効果が得られます)。
  • Screen がデフォルトです。それはGlowがそれ自体よりも明るくならないことを保証し、すべての周囲で素晴らしい働きをします。
  • Softlight は最も弱いもので、オブジェクトの周囲にわずかな色の乱れしか生じません。このモードは暗いシーンに最適です。
  • Replace は、画面全体をぼかす、または効果をデバッグするために使用できます。下地の画像なしでグローエフェクトを表示します。

グローエフェクトのサイズと形状を変更するために、Godotは Levels を提供します。小さなレベルはオブジェクトの周りに現れる強い輝きであり、大きいレベルは画面全体を覆うかすんだ輝きです。

../../_images/environment_glow_layers.png

ただし、このシステムの本当の長所は、複数のレベルを組み合わせてより興味深いグローパターンを作成することです:

../../_images/environment_glow_layers2.png

最後に、小さなぼかした画像を引き伸ばすことによって最上位のレイヤーが作成されるため、何らかのブロックが見える可能性があります。Bicubic Upscaling を有効にすると、最小限のパフォーマンスコストでそれが削除されます。

../../_images/environment_glow_bicubic.png

Adjustments(調整)

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

処理の最後に、Godotはいくつかの標準的な画像調整を行う可能性を提供します。

../../_images/environment_adjustments.png

1つ目は、一般的なBrightness(明るさ)、Contrast(コントラスト)、Saturation(彩度)を変更できることです:

../../_images/environment_adjustments_bcs.png

2つ目は、色補正のグラデーションを指定することです。次のような通常の黒から白へのグラデーションでは効果がありません:

../../_images/environment_adjusments_default_gradient.png

しかし、カスタムのものを作成すると、各チャンネルを異なる色にマップすることができます:

../../_images/environment_adjusments_custom_gradient.png