Last Updated 2023.12.18
今回はUnityでアンチエイリアスを実装した際に調べたことや、気になったこと、触った箇所などについてです。あとから確認するための注釈も兼ねているため、あくまで『自分なりに』まとめたものになります。ご了承下さい。
はじめに
そも「アンチエイリアス」とはなんぞや?というお話なんですが、ざっくり言ってしまうと画面表示上のギザギザを、見た目上滑らかにする機能です。
ゲームとかでよく目にする単語なので、ご存じの方が多いとは思います。自分もそうでした。
当然、美味しいことばかりではなく、使えば処理が増えるので負荷が増します。見た目と処理速度のトレードオフになりますね。自分の場合、オンゲとかでは設定で切れるなら切ってることが多かったです。
Unityで実装してみようとするも…
カメラコンポーネントの中にアンチエイリアス設定する項目があるという情報があちこちにあったのですが……自分が使っているバージョンのせいなのか
ないですね。うん、ない。
あれか、応募とか予約とかするのか(´・ω・`)
出だしからこんな調子ですが、個人の独学でやってると割とよくあることなので(それが問題なのですが)、公式を中心に再確認していきます。
ProjectSettingsから設定する
自分が実際にやってみて、一番簡単だったのがこの方法です。
[Edit] → [ProjectSettings] → [Quality] 内に、そのまんま [AntiAliashig] という項目があるので、そこを「Disabled」から変更するだけで適用できます。「2x MultiSampling」が一番処理が軽く、数字が増えるほど重いです。
なお、自分のUnityのバージョンは2021.3.16f1で確認しています。
恐ろしくあっさり実装出来たんですが、自分の環境だと4x以降は、明らかにfpsの低下が気になるレベルになりました。個人的な考えとしては「グラよりもゲーム挙動の快適さ」の方が重要で、なるべく古い端末や旧スペックでも問題なく作動するのを目標にしているため、2x以上の採用は難しそうです。見た目だけなら4xとか、かなり好みな感じになるんですけどね……
あと、これはあくまで予想なんですが、プロジェクト内全てのオブジェクトに適用される気がするので、今後背景にオブジェクトを設置する度に負荷が増すような気もしてます。
fpsが重要じゃなかったり、3Dモデルの撮影とかの用途ならこれで十分だと思います。
PostProcessingによる実装
次に、特定のオブジェクトにだけアンチエイリアスをかければ負荷の増加は最小限で済むのではと考え、別の方法も調べました。今回の場合、キャラだけキレイに表示されればそれで充分という側面もあります。
前述の [ProjectSettings] からの実装でも、負荷が気にならない場合はむしろキレイな仕上がりになるので、この辺は自己の判断でお願いします。2度手間になる可能性があるので。
ヒエラルキー欄下部、[AddComponent] から「post~」で検索しても見つからない場合は、[PackageManager]からインストールする必要があります。
PostProcessingをインストールしたら、メインカメラオブジェクトに、[AddComponent] から [Post-processLayer] を追加し、設定していきます。
アンチエイリアスをかけるレイヤー設定に「Default」が含まれていると、ガッツリ黄色警告が出ます。いちおうこのままでも動作はしたのですが、気になる方や、手間でない方は、アンチエイリアスをかけたいオブジェクトのレイヤーを改めて追加、および設定する方がいいでしょう。自分はお試しだったのでこのままいきましたが。
[Anti-aliasing] の [Mode] 設定を変更すると、指定したレイヤーのオブジェクトにアンチエイリアスが適用されます。
比較してみる
実は、ここからが割と自分的に重要なのですが、ここで設定するModeについて。
公式のマニュアルや技術的な解説とかも確認し、実際に試してみた上で自分視点からの感想とか、後から確認用の覚え書きになります。
Fast Approximate Anti-aliasing (FXAA)
ポストエフェクトとして処理するアンチエイリアス。3つの中では一番処理負荷が小さい。適用されると滲んだ仕上がりになるのが特徴的。一発で違いが解るレベルだったのでサンプル撮り忘れました…
Subpixel Morphological Anti-aliasing (SMAA)
負荷は重めだが高品質の評価通り、拡大表示するとかなり滑らか。アニメ的表現やフラットな見た目を目指すなら、コレが一番向いている。ProjectSettingsから設定するアンチエイリアスも、これと同じ計算方法っぽい。
Temporal Anti-aliasing (TAA)
モーションベクトルを必要とする高度な技術うんたんはさておき、動きが早すぎるとズレが生じるらしく、解説をみてると初心者が格ゲー制作で扱うには不向きと感じました。品質は本当に高いのですが負荷も大きめ。
実際に自分の環境で試してみたところ、採用するなら見た目の仕上がりと動作のバランス的に、ProjectSettings設定からの 2x か、FXAA のどちらか。というのが現在の印象です。同じSMAA方式でも、PostProcessingから設定した場合と比較して、2xの方が若干軽かったです。
設定次第ではfpsが10~20くらい低下するので、使うなら別の部分で軽量化が必須ですね。
おわりに
アンチエイリアスの実装方法や、設定ひとつ勉強するだけで結構苦労したのですが(技術的な話はやっぱり判らないことの方が多いです)、新しいことに触れたり学習したり出来たこと自体は良かったかなぁ……と。3Dモデルを綺麗に魅せる表現方法として、コレとBloomは避けて通れないっぽいですしね。
ここまでやっておきながら、なるべく端末スペックに依存せずに60fpsを維持する方法としては、「アンチエイリアスをかけない」が結論になりそうなのが……いやいや、なるべく見た目も頑張ります。
冒頭で言ってますけど、自分は快適な挙動の為なら容赦なく切る派なので、オプションで任意に設定できるようにするのが無難なのかもしれませんね。