- 作業環境
- 始まり
- Subpixel Morphological Anti-Aliasing (SMAA)
- 動作確認
- 動作確認(ディザ越し)
- リポジトリ
- 実装
- Engine/Config/BaseEngine.ini
- Engine/Config/BaseScalability.ini
- Engine/Content/EngineResources/AreaTexture.uasset
- Engine/Content/EngineResources/SearchTexture.uasset
- Engine/Shaders/Private/SMAA/SMAABlendingWeightCalculation.usf
- Engine/Shaders/Private/SMAA/SMAACommon.ush
- Engine/Shaders/Private/SMAA/SMAAEdgeDetection.usf
- Engine/Shaders/Private/SMAA/SMAANeighborhoodBlending.usf
- Engine/Source/Editor/HardwareTargeting/Private/HardwareTargetingModule.cpp
- Engine/Source/Runtime/Engine/Classes/Engine/Engine.h
- Engine/Source/Runtime/Engine/Classes/Engine/Scene.h
- Engine/Source/Runtime/Engine/Private/Scene.cpp
- Engine/Source/Runtime/Engine/Private/SceneUtils.cpp
- Engine/Source/Runtime/Engine/Private/SceneView.cpp
- Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp
- Engine/Source/Runtime/Engine/Public/SceneUtils.h
- Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessSMAA.cpp
- Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessSMAA.h
- Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp
- おわり!!!
- 参考
- 雑談
作業環境
- Windows 10
- Unreal Engine 5.4
- Visual Studio 2022 (17.8.3)
- Visual Studio Code
Subpixel Morphological Anti-Aliasing (SMAA)
そのうち書く。
Edge Detection Pass
そのうち書く。
Blend Weighting Pass
そのうち書く。
Neighborhood Blending
そのうち書く。
動作確認
そのうち書く。
動作確認(ディザ越し)
TSR | FXAA | SMAA | None |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
TSRは様式美のようなゴースティングで、FXAAはバイリニアなため前景オブジェクト(黒色)と混ざって見た目が暗いですね。SMAAはエッジ検出のお陰で前景オブジェクト(黒色)と混ざり過ぎず、色が比較的担保されていますね。気になる点としては、SMAAとNoneの違いがぱっと見分からないというぐらいでしょうか。
SMAA | None |
---|---|
![]() |
![]() |
SMAA | None |
---|---|
![]() |
![]() |
ぱっと見だとSMAAとNoneの違いが分からなかったのですが、拡大して見ると補間はされているみたいですね。
リポジトリ
最新バージョンのみ保守しています。
過去バージョンが動かないと言われても基本的には知らんがなスタイルです。
実装
紹介順はコミット履歴に準拠しているので順不同です。
※時系列に沿うのは結構面倒というのも理由。
Engine/Config/BaseScalability.ini
ScalabilityごとのSMAA品質を指定しています。
githubで実装を見る(L62)
githubで実装を見る(L75)
githubで実装を見る(L87)
githubで実装を見る(L99)
githubで実装を見る(L112)
Engine/Content/EngineResources/AreaTexture.uasset
]
テクスチャフォーマットはR8G8とR8ではなく、より圧縮率の高いBC5とBC4を選択しています。
圧縮したからといって目に見えるほどの品質劣化・差分はありません。
Non-perceptible quality decrease, marginal performance increase
Engine/Content/EngineResources/SearchTexture.uasset
Engine/Shaders/Private/SMAA/SMAABlendingWeightCalculation.usf
Engine/Shaders/Private/SMAA/SMAACommon.ush
Engine/Shaders/Private/SMAA/SMAAEdgeDetection.usf
Engine/Shaders/Private/SMAA/SMAANeighborhoodBlending.usf
Engine/Source/Editor/HardwareTargeting/Private/HardwareTargetingModule.cpp
ブレークポイントを張っても到達しなかったので、どこで呼ばれているのかいまいち分からない関数です。
Engine/Source/Runtime/Engine/Classes/Engine/Engine.h
AreaとSearchテクスチャのパスとリソースの所有者です。
Engine/Source/Runtime/Engine/Classes/Engine/Scene.h
SMAAをカスタム品質(r.SMAA.Quality 4)にした場合に採用される各パラメータはポストプロセスボリュームで設定するようにしています。
CVarで簡易的な整備でもいいですが、カメラ・ビューごとに設定を変えたい場合やシーケンサーからパラメータ調整したい場合には、ポストプロセスボリュームで用意してあげた方が汎用性が高いです。
Engine/Source/Runtime/Engine/Private/Scene.cpp
ポストプロセスボリュームで設定するSMAAパラメータの初期値です。
Engine/Source/Runtime/Engine/Private/SceneUtils.cpp
PCプラットフォーム以外でSMAAが選択された場合に、強制的にアンチエイリアスなし状態にしています。
Scalabilityの表示名の対応です。対応を忘れるとensureで落とされます。
Engine/Source/Runtime/Engine/Private/SceneView.cpp
コンソール変数のr.AntiAliasingMethodにSMAAを追加しています。
ポストプロセスパラメータの上書き対応です。
SMAAパラメータは線形補間せずにSETしています。
Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp
UnrealEngine起動時にAreaとSearchアセットを読み込んでいます。
不正なアセットパスやアセットが壊れている場合にはLoad関数でエラーが吐かれます。読込まわりは例外処理が組まれていないので、エラーが解消されるまでは永遠とエンジンが起動できなくなります。
Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessSMAA.cpp
Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessSMAA.h
Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp
SMAAパスの挿入位置は5.2と異なり、TAAと同様に被写界深度より前に変更しました。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/k/kafues511/20240522/20240522161005.jpg)
おわり!!!
次回はSMAA Reprojection (T2x)とComputeShader対応をして簡易的な負荷検証をしてみたいですね。
雑談
実装コメントの日付を見るとGWです。
なにを隠そう実装はGWに終わっていたのです。
なーのーでーすーがー。
筆が進まなかったのです。
メモ帳には要素ごとに書きたいことをチマチマ纏められる程度に順調だったのですが、いざ、はてなブログの編集画面を開くと不思議と冷めてしまいました。
大変困った筆者さんは、とりあえず公開するという暴挙に出ました。
リポジトリが存在する以上は文章はおまけです。一旦はこれで良しとします。
SMAAは5月に片づけたいことリスト最上位で且つ最後の項目なので、どんな手を使ってでも消化したかったのです。
という訳で未来の筆者さん。気が乗ったら、追記よろしく。
ここから先は年齢制限のかかっている作品を取り扱うページとなります。
表示する
5月22日
- オトメドメイン
- オトメセカイ
ぱっと見、姉妹作品に見えなくもないタイトルです。
シナリオさんと声優さんの並び的にも尚更姉妹作品感を強く感じます。
作品の世界観がどえらい違うので、区別はできそうですけど。
ちなみに筆者のユーザーIDの末尾番号は湊くんの誕生日を5月11日と誤記憶していたことが由来です。
数年間も勘違いし続けていたので、最早ひとつの思い出です。
SNSをやっていない唯一のデメリットが、こういう情報更新頻度がバカ低いことですね。
ネットサーフィンすればいい話ですが、これ以上興味のある分野を見つけてしまったら困るので。
とりあえず、予約しました。
ポイント還元期間と重なったのでちょっとお得な気分です。
やらかした点としては、予約はパッケージ版で買うと決めていたのですが、注文履歴を見返したらダウンロード版を買っていました。ソフマップでも頼もうかなぁ。悩ましい。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/k/kafues511/20240522/20240522184514.jpg)
それはさておき。
セレオブをきっかけに今年からはゲームを再開しようかなと思い始めて早々にClover Memory'sとオトメセカイ、惹かれるラインナップが多いです。
タイミングがいいのやら、悪いのやら。
略し方『オトメき』なのか。。。変換怠いな。辞書登録すればいいか。
喫茶(かふぇ)も当て字だしな。
ゲームを再開したい欲もありつつ、コードを書き続けないとベテランに追い付けない現実。
投資している年月に差があるのですぐに追いつけないのは当然ですが、それを堂々と理由にするのは、なんか癪なの。
両立できれば理想ですが、所詮は理想。
現実世界には物語の進捗度に関係なく刻まれ過ぎ行く時間という仕様があるから難しい。
セーブポイントでもありゃいいんだけどねぇ。
ふふ。
どうやって楽しく過ごすかという悩みは辛いけど、なんやかんや最終的には楽しいですね。
そんなわけで湊くんの誕生日でした。(ケーキもぐもぐ。)