madVRの最大の特徴は、様々な高画質なスケールアルゴリズムを
設定できることです。
よって、scaling algorithms の設定は、madVRの 設定の肝 と呼べます。
どれにするかは、「実際に見て、好みの画質になる設定を選択する」
のが基本ですが、予備知識がある方が良いでしょう。
基本的な事
映像は、輝度(luma)と彩度(chroma)で構成されています。
ディテールレイヤーとカラーレイヤーの2つのレイヤーがあり、
この2つのレイヤーを重ねて映像にしている。 というイメージです。
(実際は、luma・Cb・Crの3つのレイヤー)
クロマ・アップスケール(chroma upscaling)は、彩度をアップしてくれる機能です。
要は、色鮮やかにしてくれる機能です。
YCbCr 4:2:0 のような色差が抑えられているデータを
RGB変換する前に YCbCr 4:4:4 にアップスケールします。
動画を拡大する・しないに関わらず、色差が抑えられている動画の彩度を
上げてくれます。
実際は、色が濃くなるというより、グラデーションがより細かくなり、
解像度が上がったかのように見えます。
イメージ・アップスケール(image upscaling)は、リサイズした映像と元の映像の差を
少なくするための機能です。
例えば1280*720の動画を3840*2160に拡大しても、
3840*2160の動画を再生しているかのように映すのが、この機能の目的です。
動画をリサイズした時に、補間するドットのluma(輝度) や chroma(彩度)の
計算アルゴリズムを選択することになります。
人間の目は、色より明るさに敏感です。
YCbCr 4:2:0の映像ソースが多いのは、
データを少なくするために、クロマ情報を間引いて、輝度優先のデータにしています。
madVRのイメージアップスケールも輝度優先になっています。
もし、処理時間がかかり、クロマアップスケールかイメージアップスケールのいずれかを
ダウングレードする場合は、クロマアップスケールをダウングレードさせます。
なお、madVRの出力はRGB形式に変換されますが、
GPUカードからディスプレイへの出力は、GPUカードのドライバーで決められます。
NVIDIAカードの場合は、RGB/YCbCr ともに設定可能です。
YCbCrでの出力は、限定レンジ(16~235)にされる場合が多く、
YCbCr4:4:4以外は、Chromaデータを劣化させるので、
ディスプレイドライバは、RGBフルレンジで出力するように設定します。
madVR レンダリング プロセス
madVR(旧バージョン)のレンダリング プロセス
旧バージョンのプロセスも参考になる。
旧バージョンも 現在とプロセスはほぼ同じ。 NNEDI3がNGUに代わった。
NGU luma doubling と chroma doubling → RGB変換 → upscaling refinement →
image upscaling / image downscaling
の流れになる。
super-xbrは、RGBのまま処理される。
scaling algorithms
用語説明
aliasing:エイリアシング。線がギザギザになる。シャギーのようなもの。
ringing:エッジに沿うように出現する映像処理のオーバーシュート。
いわゆるゴースト/ハローのこと
other artifacts:その他の副産ノイズ
chroma upscaling
chroma upscalingでYCbCr4:4:4にアップスケールされ、
RGBデータに変換された後、
image downscaling・image upscaling・Upscaling Refinementは
RGBデータで処理されます。(NGU系を除く)
できれば、リンギングが発生しない NGU系を設定します。
NGU Anti-Alias (NGU-AA)は、NNEDI3の代替えになります。
後は、ノイズ要素が少ない Jinc + AR(anti-ringing filter)がいいですかね。
super-xbr はシャープになりますが、ノイズが多い気がします。
super-xbr +AR の場合は、sharpness: 75 以下にした方がノイズが出にくくなります。
最小処理:
Nearest Neighbor
Bilinear
低処理:
Cubic sharpness: 50 - 150 (anti-ringing filter)
中処理:
Lanczos 3 - 4 taps (anti-ringing filter)
Spline 3 - 4 taps (anti-ringing filter)
Bilatera old - sharp
高処理:
Jinc 3 taps (anti-ringing filter)
super-xbr sharpness: 25 - 150
高-最大処理:
NGU系 low - very high
Reconstruction soft - placebo AR
activate SuperRes filter:クロマアップスケールの後、クロマレイヤーにsharpen edgesを適用します。
リンギングが発生する可能性があるので、オーバー設定は推奨されません。
クロマアップスケールの比較
https://forum.doom9.org/showthread.php?p=1817934#post1817934
image downscaling
出力解像度よりソースの解像度が大きい場合、RGBデータをダウンスケールします。
基本的には、image doubling(image upscaling の doubling) と組み合わせて使用します。
scale in linear light は、光学スケーリングのシュミレーションで一番近い線形光を使用したらしいです。
(かなり意味不明な訳です。。。)
luma scaling の一種でしょうか?
画質的には少しマイルドになります。
低処理:
DXVA2 (madVRの処理とクロマアップスケールを上書きします。)
Nearest Neighbor
Bilinear
中処理:
Cubic sharpness: 50 - 150 (scale in linear light) (anti-ringing filter)
高処理:
SSIM 1D strength: 25% - 100% (scale in linear light) (anti-ringing filter)
Lanczos 3 - 4 taps (scale in linear light) (anti-ringing filter)
Spline 3 - 4 taps (scale in linear light) (anti-ringing filter)
最大処理:
Jinc 3 taps (scale in linear light) (anti-ringing filter)
SSIM 2D strength: 25% - 100% (scale in linear light) (anti-ringing filter)
image upscaling
madVRの核の中の核と言える、大きさを拡大したときの処理。
NGU系は、YCrCb4:4:4に再変換した後に、lumaとchromaをそれぞれ処理を行います。
scale in sigmoidal light は、アップスケール時に問題があった linear light の改良版です。
動画を見て効果があればONにします。
image upscalingには、upscaling と doubling があります。
doublingは、単純に2倍拡大です。
doublingは、オブジェクトのエッジ検出と保持に非常に優れており、シンプルなリサイザーによって引き起こされるエイリアス(シャギー)を排除します。
さらに、NGU系は、目に見えるリンギングを発生させずに非常にシャープにすることができます。
upscaling
最小処理:
DXVA2 (madVRの処理とクロマアップスケールを上書きします。)
Bilinear
低処理:
Cubic sharpness: 50 - 150 (anti-ringing filter)
中処理:
Lanczos 3 - 4 taps (anti-ringing filter)
Spline 3 - 4 taps (anti-ringing filter)
高処理:
Jinc 3 taps (anti-ringing filter)
doubling
高処理:
super-xbr sharpness: 25 - 150
RGBにてアップスケール。lumaとchromaは、一緒にアップスケールされます。
高いシャープネス、低いエイリアシング、中程度のリンギング。
高-最大処理:
NGU Anti-Alias low - very high
NGU Soft low - very high
NGU Standard low - very high
NGU Sharp low - very high
RGBからYCbCrに再変換後、lumaとchromaを独立してアップスケールします。
中-高シャープネス、低エイリアシング、リンギングなし。
Anti-Alias以外は、直接4倍アップスケールが可能。
https://i.postimg.cc/bwtLPB1Z/Scaling-Algorithms-Chart.png
doublingと組み合わせるダウンスケールランキング
SSIM 2D
SSIM 1D
Bicubic150
Lanczos
Spline
Jinc
DXVA2
Bilinear
Nearest Neighbor
NGU系の説明
NGU Anti-Alias
NNEDI3の代替え。
ほとんど自然な線ですが、NGU Sharpよりもぼやけており、ディテールが低くなっています。
エイリアスを含む低品質から中品質のソース、またはNGU Sharpが気に入らない人に最適です。
NGU Soft
NGUの最もソフトでぼやけたNGU派生アルゴリズム。
ノイズの多い貧弱なソースや、シャープすぎる映像が嫌いな人に最適です。
NGU Standard
NGU Sharpと同様の鮮明さですが、少しぼやけており、ディテールが低くなっています。
NGU Sharpによるプラスチック感な映像を低減するために、低品質のソースに適用される大規模なアップスケールに最適です。
NGU Sharp
最もシャープなアップスケーラーで最もディテールが高いですが、
低品質のソースと非常に大きなアップスケールでプラスチック感な映像になります。
きれいなラインの高品質ソースに最適です。
doubling使用時の設定
super-xbrはRGBデータにて処理を行うため、lumaのみの設定になります。
(lumaとchroma共通になります。)
activate doubling / quadrupling... については、
HD(1280*720) → FHD(1920*1080)などの1.5倍アップスケールを例にします。
1.5倍のアップスケーリングの方法は、以下の2通りあります。
image doubling → image downscaling
2倍アップスケール → 0.75倍ダウンスケール
image upscaling
単純に1.5倍のアップスケール
activate doubling を...only if scaling factor is 2.0x (or bigger) に設定すると、
upscaling algo で設定した image upscaling が動作します。
activate doubling を...only if scaling factor is 2.0x (or bigger)以外に設定すると、
image doubling + downscaling algo で設定した image downscaling が動作します。
algorithm quality
luma doubling: 輝度のdoublingを設定します。
ここの設定が何よりも重要です。
luma quadrupling: 4倍アップスケール時の設定。
NUG系は、直接4倍アップスケール可能。
chroma: 彩度のアップスケールを設定します。
なお、このchroma の設定は、クロマアップスケールとは異なります。
クロマレイヤーは本質的にソフトで細かいディテールがありません。
ほとんどの場合、chroma doublingはオーバー設定か不要な機能になります。
Bicubic60 + AR が 処理速度との兼ね合いでバランスが良いとされています。
activate doubling / quadrupling...
実際にアップスケールする倍率で、doubling / quadrupling するかどうかを設定します。
...only if any upscaling is needed:アップスケール時に必ずdoublingが実行されます。
...always - supersampling::アップスケールしなくても必ずdoublingが実行されます。
if any (more) scaling needs to be done
3倍アップスケールなど、2倍・4倍のアップスケール以外で
さらに動作させるアップスケール・ダウンスケールを選択します。
upscaling refinement
アップスケール後に行うエッジ・シャープ処理。
内容は、processing の image enhancements と同じ。
SuperRes(スーパーレゾリューション)の設定は、chroma upscaling と同じです。
LumaSharpenは、アップスケールによってもたらされる ソフトさを抑える手段です
シャープな映像であっても、アップスケールによってシャープな映像に保つことはできません。
低処理:
soften edges / add grain
NGU Sharp用のオプション。低解像度をアップスケールするときに使用します。
add grainは、粒子感を強調します。
enhance detail
テクスチャをシャープにします。平坦な部分の細部をより見やすくします。
エッジ部分の処理はされません。
ノイズや粒子もシャープ(より顕著に表示)になります。
中処理:
LumaSharpen
輝度シャープニング。ぼかし処理をした後、ぼかし処理を減算してシャープにします。リンギングなどのノイズは乗りにくい。
crispen edges
エッジの輝度を上げる処理を行い、明るいエッジを鮮明にします。
これにより、より高精細に見える映像が得られます。
中高処理:
thin edges
アップスケールは、エッジ・線を太くします。
thin edgesは、大規模アップスケールに使用すると、線があまり太くなりません。
sharpen edges
エッジ・線をシャープにする。
LumaSharpen や AdaptiveSharpenと同様の機能ですが、
線が太くなりにくいシェーダーです。
AdaptiveSharpen
リンギングを抑える為に、エッジに近いほどシャープにするシェーダー。
SuperRes
アップスケーリングを逆ダウンスケーリングとして扱うことによって、
高解像度を得ようとしています。
なお、SuperResをONにすると、直接4倍アップスケールはキャンセルされます。
中処理:
activate anti-bloating filter
線が太くなるのを低減します。
anti-ringingよりパワーを使いますが、オーバー設定されたシャープさをぼかしてより自然に、背景により溶け込むという利点があります。
LumaSharpen, sharpen edges, Adaptive Sharpenに適用可能。
低処理:
activate anti-ringing filter
エッジに沿うように出現するハローを低減します。シャープニングのオーバー設定を低減します。
LumaSharpen, crispen edges, sharpen edges ,AdaptiveSharpenに適用可能。
なお、SuperResには、独自のactivate anti-ringing filterを持っており、個別に設定します。
refine the image after every ~2x upscaling step
2倍リサイズ毎に適用されます。これは、映像が非常にソフトになる4x以上の大規模なアップスケールに最も役立ちます。
映像の鮮明度を少し改善します。
こちらを選択すると、直接4倍アップスケールはキャンセルされます。
refine the image only once after upscaling is complete
リサイズ後にシャープニングが1回適用されます。
参考:
https://forum.kodi.tv/showthread.php?tid=259188
参照: