yuniframe: Upscalerの調査
システム組込みのUpscalerを用意した方が良いんじゃないか説がある。まぁWebGLだとcomputeが無いから厳しいし。。
1枚絵方式 と 複数枚方式
基本的には2種類ある。1枚絵方式はアプリケーション側の修正はほぼ不要で、単に拡大する。複数枚方式はモーションベクタやdepth等も入力とする。
- 1枚絵方式
- WindowsのAutoSR(現時点ではSnapdragon専用、↓ GSRとは異なる、AIアップスケーラー)
- NVIDIAのImage Scaling SDK
- AMDのFSR 1 -- 良いLanczos
- QualcommのSnapdragon Game Super Resolution(GSR) -- 良いLanczos
- 複数枚方式
- DirectSRは以下のupscalerに対する共通インターフェースとして機能する
- NVIDIAのDLSS
- AMDのFSR2以降
- IntelのXeSS
- QualcommのSnapdragon Game Super Resolution 2(GSR2)
- Arm Accuracy Super Resolution ... はFSR2のカスタムらしい。現時点で未公開。
複数枚方式はいわゆるTemporal Anti Aliasing (TAA)と同じインターフェースを持つ。このため、一切のアップスケールを行わず単なるアンチエイリアスとして使うソリューションもある(NVIDIAのDLAA)。
NVIDIA(Image Scaling SDK / DLSS)
Image Scalingは1枚絵の拡大。GLSL/HLSLソースが提供されていて、他のGPUでも動く。
DLSSは超有名なAIベースソリューション。16Kとかのground truthを食わせてトレーニングした係数/ネットワークを持つ。NVIDIAのGPU専用。
- https://www.nvidia.com/ja-jp/geforce/technologies/dlss/ -- デモ動画等
- https://github.com/NVIDIAGameWorks/NVIDIAImageScaling -- Image Scaling
- https://github.com/NVIDIA/DLSS -- DLSS SDK
DLSS SDKはsubmoduleの形でImage Scalingリポジトリを含んでいる: Image Scalingはシャープ化フィルタも含んでいて、DLSS後にユーザーの好みに応じて掛けることが推奨されている。
AMD(FSR)
クロスプラットフォームにつきAIソリューションでない。
- https://www.amd.com/ja/products/graphics/technologies/fidelityfx/super-resolution.html -- 公式サイト
- https://gpuopen.com/fidelityfx-superresolution/ -- FSR1
- https://gpuopen.com/fidelityfx-superresolution-2/ -- FSR2
- https://gpuopen.com/fidelityfx-super-resolution-3/ -- FSR3
- https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK -- ソースコード
- https://gpuopen.com/manuals/fidelityfx_sdk/fidelityfx_sdk-page_techniques_super-resolution-temporal/ -- ドキュメント(FSR2)
FSR3ではフレーム生成が追加された。DLSSに加えてマスク等の入力が増えている。これらの増加はMSのDirectSRにも反映されている。
Intel (XeSS)
AI-Enhancedではあるが普通のコンピュートシェーダー実装なので他のGPUベンダでも使える。FSRとは違ってソースコードは公開されていない。
- https://www.intel.com/content/www/us/en/products/docs/discrete-gpus/arc/technology/xess.html -- 公式サイト
- https://github.com/intel/xess -- SDK(DirectX12専用)
- https://www.intel.com/content/www/us/en/developer/articles/guide/xe-super-sampling-developer-guide.html -- ドキュメント
入力パラメタは少い。フル解像度のモーションベクタがあるならdepthすら不要になっている。(DirectSRではDepth必須だけど)
Qualcomm(GSR)
ピクセルシェーダー実装もある非常に軽量なUpscaler。特にv1は1pass実装となっている。
- https://www.qualcomm.com/developer/blog/2024/10/introducing-snapdragon-game-super-resolution-2 -- blog
- https://github.com/SnapdragonStudios/snapdragon-gsr -- ソースコード
GSR2の入力はdepthとモーションベクタとレンダリングパラメタ。