HD レンダーパイプラインのアンチエイリアス
エイリアシング は、デジタルサンプラーがリアルワールドの情報をサンプリングし、デジタル化を試みる際のサイドエフェクトです。 例えば、オーディオまたは動画をサンプリングする際のエイリアシングとは、デジタル信号の形状が元信号の形状と一致しないことを意味します。
これは、最高周波数でオーディオ源の元信号とデジタル信号を比較するか、もしくはビジュアル源の最も微々たるディテールを比較すると、最も顕著です。通常の信号プロセスは ナイキストレート を使ってエイリアシングを防止しますが、リソースに負荷をかけるため画像レンダリングには実用的ではありません。
ラスタライゼーションプロセスがエイリアシングを起こしている例。
エイリアシングを防ぐため、High Definition Render Pipeline (HDRP) には複数のアンチエイリアス技法があり、それぞれ独自の効果とリソース強度を持ち合わせています。利用可能なアンチエイリアス技法は以下の通りです:
- Fast Approximate Anti-aliasing (FXAA)
- Temporal Anti-aliasing (TAA)
- Subpixel Morphological Anti-aliasing (SMAA)
- Multi-sample Anti-aliasing (MSAA)
アンチエイリアスの使用
アンチエイリアスは、各カメラごとに対するエフェクトです。つまり、異なるアンチエイリアス技法を使う複数のカメラを用いることが可能です。これは優先順位の低いサブカメラに、クオリティーが低く、リソースにかかる負荷が小さいアンチエイリアスエフェクトを用いることができ、便利です。
Fast Approximate Anti-aliasing (FXAA)
FXAA はピクセルごとのレベルでエッジを滑らかにします。これは HDRP の中で最もリソースにかかる負荷が少ない技法で、最終画像がややぼやけます。鏡面ライティングが多く含まれたシーンには不向きです。
カメラに FXAA を選択する:
- シーンビューまたはヒエラルキーでカメラを選択し、インスペクターで表示する。
- 一般セクションで、アンチエイリアスドロップダウンから Fast Approximate Anti-aliasing (FXAA) を選択する。
Temporal Anti-aliasing (TAA)
TAA は履歴バッファからフレームを使い、FXAA より効果的にエッジを滑らかに仕上げます。動きのあるエッジをスムーズにするのにより適していますが、これにはモーションベクトルを有効にしなければなりません。HDRP でモーションベクトルを設定する方法に関する情報は、モーションベクトル を参照してください。TAA は一時的であるため、例えばゲームオブジェクトがコントラストを成す表面の前で早く動くなどと、極限状態でアーティファクトがゴースティングすることがよくあります。
ノート: TAA を有効にすると、アンビエントオクルージョンやボリュメトリックといったエフェクトの質向上に役立ちます。
カメラに TAA を選択する:
- シーンビューまたはヒエラルキーでカメラを選択し、インスペクターで表示する。
- 一般セクションで、アンチエイリアスドロップダウンから Temporal Anti-aliasing (TAA) を選択する。
同じカメラゲームオブジェクトを複数のゲームビューに使うと、履歴バッファシステムの制限により、TAA が思い通りに機能しない場合があります。ただし、異なるカメラを使ったマルチゲームビューは正常に機能します。
制限
エディターで複数のゲームビューが同じカメラを使うと、履歴バッファシステムの制限により、TAA が思うように機能しない場合があります。ただし、各ゲームビューがそれぞれ異なるカメラを使う複数のゲームビューを使う場合には、TAA は正常に機能します。
Subpixel Morphological Anti-aliasing (SMAA)
SMAA は画像の境界線でパターンを見つけて、そのパターンに従い境界線上でピクセルを混ぜ合わせます。このアンチエイリアス技法は、FXAA よりもずっとシャープな結果が得られ、平らで漫画のようなもの、またはクリーンなアートスタイルに適しています。
カメラに SMAA を選択する:
- シーンビューまたはヒエラルキーでカメラを選択し、インスペクターで表示する。
- 一般セクションで、アンチエイリアスドロップダウンから Subpixel Morphological Anti-aliasing (SMAA) を選択する。
Multi-sample Anti-aliasing (MSAA)
MSAA は各ピクセル内の複数箇所をサンプリングし、これらのサンプルを組み合わせて最終ピクセルを作ります。これは他の技法よりもアンチエイリアス問題の解決に有効ですが、リソースにかかる負荷も大きくなります。最も大事な点は、MSAA が Spatial Aliasing 問題を解決するという点です。MSAA はハードウェアのアンチエイリアス技法で、ポストプロセスエフェクトであるその他の技法と一緒に使うことができます。例外は モーションベクトル を使う Temporal Anti-aliasing で、MSAA はサポートしません。
HDRP プロジェクトで MSAA を有効化する
- HDRP アセット を開く。
- レンダリングセクションで、Lit シェーダーモードを両方またはフォワードのみのいずれかに設定する。HDRP が MSAA をサポートするのは、フォワードレンダリングのみ。
- マルチサンプリングアンチエイリアスの質のドロップダウンから、HDRP が MSAA を評価する際に、ピクセルごとにいくつのサンプルを計算するかを定義する。なしを選択すると、MSAA のサポートが無効になる。
MSAA を使う際には、以下の点に気を付けてください。
- サンプル数を増やすと、MSAA エフェクトはよりリソースに負荷をかけます。
- MSAA を有効にした際、HDRP は次のエフェクトを無効にはするわけではありませんが、その代わり MSAA でない深度を使うためエッジに問題が生じます。
- MSAA は以下の機能とは使えません。MSAA を有効にすると、HDRP はこれらの機能を無効にします。
- スクリーンスペースリフレクション (SSR)
- スクリーンスペースシャドウ
- Temporal Anti-aliasing
- 歪み
- デカールごとの法線バッファパッチ
- MSAA は次の機能には影響を与えません。HDRP はこれらのエフェクトを無効にはするわけではなく、単純に MSAA プロセスを実行しません。
- レイトレーシングは MSAA をサポートしません。プロジェクトでレイトレーシングを使う場合は、MSAA を利用できません。
Unity プロジェクトで MSAA を有効にする際は、フレーム設定 でカメラに対しても有効化する必要があります。これはグローバルにも、個別のカメラにも実行できます。MSAA をグローバルに有効化する場合は、プロジェクト設定 > フレーム設定 > HDRP デフォルト設定に行きます。カメラごとに MSAA を有効化する場合は、フォワード Lit シェーダーモードを有効にしてからフォワードチェックボックス内で MSAA を有効にします。グローバルおよびローカルのフレーム設定の場所に関する詳細は、フレーム設定 のドキュメントを参照してください。
MSAA サンプリング数を増やすと、パフォーマンスを犠牲となり、アンチエイリアスがよりスムーズになります。以下は様々な MSAA サンプリング数のエフェクトの、ビジュアル例です。
MSAA サンプル数はなしに設定。
MSAA サンプル数は MSAA 2X に設定。
MSAA サンプル数は MSAA 4X に設定。
MSAA サンプル数は MSAA 8X に設定。