ポストプロセッシング機能を理解する

確認済のバージョン: 2017.3

-

難易度: 中級

その名前から想像できる通り、ポストプロセッシングとは、レンダーされた既存のシーンを基にしたレンダリングエフェクトです。ポストプロセッシングによるエフェクトは通常、シーンビューに依存しているか、レンダーされたシーンの上に最終的なレンダーの生成前にレイヤー化されます。この機能の利点のひとつは、ビジュアルフィードバックがその場で得られることと、既存のコンテンツに変更を加えることなくシーンを劇的に向上できる点です。 ポストプロセッシング内には、現実のようなビジュアルを作成するために必ず必要となるベースラインの機能だけでなく、その他の機能も数多く含まれています。シーンの品質を一層向上できる非常に効果的なエフェクトですので、時間をかけてでも習得する価値があります。このセクションでは、プロジェクトの状況にどのポストプロセッシングエフェクトが合っているかを判断し、高度な機能に伴った問題を回避するために必要な情報を提供します。 詳細は以下のリンクからご覧ください。 https://docs.unity3d.com/ja/current/Manual/PostProcessingOverview.html

  • アンチエイリアシング(AA) 3D ポリゴンを 2D 画面に、制限された解像度でラスタライズする場合、 最終的なピクセルに階段状のエフェクト(エイリアシング)が表れます。リアルタイム 3D におけるアンチエイリアシングの技法は数多く存在します(Supersampling、MSAA、FXAA、 SMAA、Temporal、あるいはこれらの組み合わせやその他の新しい方式)。今日、最も一般的な技法は FXAA と Temporal です。効果的で比較的パフォーマンス性が高いことが理由となっています。

上の画像では、一部の目立ったエイリアシングエフェクトが FXAA によってうまく修正されています。しかし Temporal ではそれが更に改善されており、電車の線路に大幅な向上が見られます。

FXAA は純粋なポストプロセス・アンチエイリアシングです。簡単に言うと、ラスタライズされたシーンがキャプチャーされ、エッジが分析され、平滑化のアルゴリズムが実行されます。FXAA は単純で、複雑な依存関係を持たず、処理も迅速です。

Temporal AA はこれよりずっと複雑です。Temporal は、ブレンドする付加的データとしてジッターと直前のフレームを使用します。Temporal は、最終的なフレームをレンダーする際にどのピクセルを除外してどのピクセルを含めるか、モーションベクターを使用して予測します。目的は、最終的な解像度より大きなシーンをレンダーすることなしに、より多くのデータを使ってフレームの有効解像度を高めることです(Supersampling)。つまり、アンチエイリアシングが格段に滑らかになり、パフォーマンスに大きく影響することなく、SuperSampling を使用した場合とほぼ同程度の画質を得ることができます。

リアルタイムレンダリングの全てに関して言えることですが、ここでもトレードオフが生じます。Temporal AA が機能するためにはモーションベクターが必要で、FXAA よりもパフォーマンスのコストが高くなります。Temporal が最終的な画像を予測する仕組みが複雑であるため、動きの速いオブジェクトやテクスチャのボケがある場合にアーチファクトが発生することがあるので、全てのアプリケーションに適した方式ではありません。

  • アンビエントオクルージョン アンビエントオクルージョン・ポストプロセッシングは、スクリーンスペースデータ(主に深度)に基づいたアンビエントオクルージョンの近似であるため、通常「スクリーンスペースアンビエントオクルージョン」(SSAO)と呼ばれます。ライティングの設定に関するセクションで説明した通り、SSAO は、環境光ライティングのシェーディング時に、特に動的オブジェクト(静的シーンと動的シーンとの間におけるオクルージョンのインタラクションが通常は一切ない)には、高いリアリティが得られます。

基本的に SSAO はシーンの環境光シェーディングに役立つものですが、オクルージョンを大量に発生させることがあります。オブジェクトごとにベイクされたアンビエントオクルージョンをオフラインの DCC ソフトウェアから取り入れ、ライトのベイキングによる付加的なアンビエントオクルージョンを含めると、SSAO が 3 つ目のアンビエントオクルージョン・レイヤーとして扱われます。

SSAO の設定は最終的な出力を考えながら行い、他の AO ソリューションとのバランスを取るようにしてください。

AO を多く追加し過ぎて内部が非常に暗くなってしまっている例

  • スクリーンスペースリフレクション SSAO と類似して、スクリーンスペースリフレクションも現在のシーンビューを使用してレイトレーシング経由でリフレクションを近似します。現実のようなビジュアルを実現するためには、ほとんどの場合はこの機能を有効にすることが推奨されます。スクリーンスペースリフレクションは、通常のキューブマップによるリフレクションを補足する高精度なリフレクションを追加します。ただしこの機能を有効にすると、レンダリングがディファ―ドレンダリングのみに制限され、パフォーマンスに影響します。SSR のもうひとつの短所は「スクリーンスペース」で、画面上にないものは一切リフレクションを発生させないため、リフレクションの欠落が起こる場合には画面のエッジの描画が破綻したり、ノイズが入ったりすることがあります。

  • 被写界深度 デジタルコンテンツ制作者が被写界深度エフェクトと言うとき、その意図しているところは単に被写界深度を浅くする(あるいはそのように見せかけるだけの)効果のことであることがほとんどです。被写界深度というとまず頭に浮かぶのは、空間内の小さな一点にのみ焦点が合った、手前と奥がぼやけた画像だと思います。このエフェクトは大型センサーカメラのシネマティックな雰囲気を表現できますが、シーンのスケール感を変化させるために使用することもできます([例]ティルトシフトカメラのレンズによるミニチュア効果)。

上の画像では、通常の写真が疑似的な被写界深度によってミニチュアのように見えています。

  • モーションブラー モーションブラーは乗り物酔いや認知感覚の乱れを引き起こすと言う人もいれば、絶対的な信頼を置いている人もいます。モーションブラーは有効にすべきか?その答えは、求めるエフェクトやアプリケーションによって変わります。微かなモーションブラーは、ひとつのフレームから別のフレームへの遷移をブレンドする場合に大変効果的です。これは、(一人称視点や三人称視点のカメラで一般的に見られるような)大きな差異のあるシーンの遷移に特に適しています。例えば、広角ビューでプレイヤーが左から右へカメラを素早く振ったりするような場合は、たとえ 60FPS でレンダーされていたとしてもモーションブラーがないとカクカクしてしまいます。

上の画像の例では 180 度のシャッター角でモーションブラーを実行しています(完全な 360 度のシャッター角だとフレーム時間一杯に軌跡が出て、それより小さい角度の場合は軌跡が少なくなります)。これを踏まえた上で、ストップモーション的な表現を作りたい場合は、モーションブラーを無効にすると良いでしょう。

  • ブルームと Emissive 現実世界のブルームは、光線が適切にフォーカスされていない場合に起きるレンズのアーティファクトで、通常、低性能なカメラレンズや一部のカメラフィルターの特殊グロー効果に見られるものです。

ブルームは通常、霞がかったような柔らかい画像(上の画像ではしきい値の設定は 0)を作る目的か、高強度ライトの要素と高輝度ライトの要素を識別する(下の画像参照)目的で使用されます。

この機能を多用し過ぎると、参考画像(強度のしきい値が早々にブルームし始め、高強度ピクセルが多くなっている)のように逆効果になる可能性があります(しきい値がガンマ 1.0 の場合、現在の露出で 1.0 より大きい値になるとブルームが強くなります)。 しきい値の選択は、Emissive サーフェスの値、シーンのライティング設定、Eye Adaptation の有効・無効に応じて行います。

  • Tonemapper のタイプ Tonemapper は、入力データのリニア HDR バッファを処理し、それを指定の色空間にレンダリングし戻して最終的な出力を行います。これはカメラが機能する仕組みに似ています。Unity のポストプロセッシング内には、Neutral および ACES(アカデミー色符号化仕様 / Academy Colour Encoding System)の 2 種類の Tonemapper があります。 ACES に関する詳細はウィキペディアをご覧ください(英語)。 一見すると、この 2 つの Tonemapper の違いはデフォルトのコントラストであるように見えます。しかし重要な違いはそれではありません。Neutral のコントラストを ACES に近くなるように調整することも可能だからです(下の画像では 2 つの画像がほとんど同じであることが確認できます)。

上の Neutral の設定は、Black が 0.02、White が 10、Black Out が -0.04、White Out が 10、White Level が 5.3、White Clip が 10 になっています。 2 つの Tonemapper の重要な違いは、色付きライトや Emissive エフェクト([例]爆発のエフェクトや火炎)などの強度の高い色値の扱い方にあります。

上の画像では、高強度色のノーマライズ方法が ACES Tonemapper と Neutral Tonemapper でどのように違うか確認できます。

  • 色収差、グレインおよびビネット これらは現実世界のカメラの仕組みが生むアーティファクトをシミュレートするポストプロセスエフェクトです。この乱用を防ぐためには、それぞれのエフェクトが現実世界のカメラで起こる仕組みを理解することが役立ちます。

    • 色収差(Chromatic Aberration / CA)エフェクトは、カメラのレンズが全ての色を同じ収束点に収束できない場合に画像に表れる、色の分散です。これは通常、正常にキャリブレーションされていないレンズや低品質レンズに見られます。時としてこれがデジタルシーンに現実感を与えることもありますが、低品質レンズのような印象を与える仮想カメラになるということでもあります。

    • 現実世界の写真や映画の画像上に見られるグレインは通常、センサーに入って来るライトの量が足りないサインです([例]暗いシーンや ISO 感度の高いカメラセンサーやフィルムが発生させるノイズ)。このエフェクトは、純粋でクリーン過ぎる 3D レンダーシーンに現実感を与えるために、現実世界のカメラの制約をシミュレートして加えるものです。ただし、シーン内のノイズが多過ぎると、見ている側に動いているような錯覚を与えて気を散らすこととなり、また、レンダーされた最終的な画像のコントラストにも影響します。

    • ビネット効果は色収差(CA)効果と似ており、レンズがカメラのセンサー / フィルムの中央から縁にかけてライトを均一に配分できない時に発生するアーティファクトです。これは、シーンの中心に焦点を合わせたような効果与えますが、乱用するとシーンの見た目がアマチュアの画像処理ソフトで処理されたようになってしまう可能性もあります。

以上、ポストプロセッシングの基礎を説明しましたが、重要なポイントは、チェックリストのように次々とポストプロセッシングを有効にしていくような大雑把なことを行わず、目的意識を持って効果的に機能を使用することです。エフェクトをひとつシーンに加えるごとに、パフォーマンスコストが掛かるからです。

ここで触れていないポストプロセッシングは、Eye Adaptation、(Tonemapper 以外の)Colour Grading、User Lut(Lookup Table)です。これらのエフェクトに関してはより詳しい説明が必要となります。詳細は下記のリンクからご覧ください。 https://docs.unity3d.com/ja/current/Manual/PostProcessing-EyeAdaptation.html

https://docs.unity3d.com/ja/current/Manual/PostProcessing-ColorGrading.html

https://docs.unity3d.com/ja/current/Manual/PostProcessing-UserLut.html