レビュー
Kaveriにおける動画再生の画質改善効果を検証する
~GPUによって画質が異なるのか
(2014/3/18 06:00)
AMDの新APU「Kaveri」(Aシリーズ7000番台)では、グラフィックスコアが従来Trinity/Richlandで採用されたVLIW4から、GCNアーキテクチャに置き換わっていることが既に明らかになっている。
Kaveriでは3Dグラフィックス周りの性能が向上し、新しいMantle APIのサポートが大きくフィーチャーされているが、実は動画再生における画質向上機能の強化も図っている。今回はこの動画の画質向上機能について検証していきたい。
そもそも、動画再生における画質向上は意味があるのか
検証に入る前に、そもそも動画再生時の画質向上機能に意義があるのか、それがきちんと機能しているのかというのを理解しなければならない。同じ動画を再生しても、AMDとIntel、NVIDIAのGPUの画質向上機能は異なっており、このため例えば同じエッジ強調に関する画質向上機能があったとし、同じ値に設定しても、得られる絵が同じだとは限らないからだ。
まずは、アップルの「iPhone 4S」で筆者が撮影した動画(1,920×1,080ドット、AVC/H.264 Baseline@4.1 Unspecified Progressive、29.53fps)を、Core i3-3217U内蔵のIntel HD Graphics 4000、GeForce GT 630ビデオカード、A10-7850K内蔵のRadeon R7の3つの環境において、全ての画質向上機能をOFFにした上で、再生ソフト「Media Player Classic」を用いて、EVR経由でハードウェア再生支援を用いながら動画を再生。同じフレームのところで一時停止し、PrintScreenキーで取得できた画像をBMPファイルで保存し、比較することにした。
ここで、筆者は驚くべき結果を知ることとなった。そもそも、この3種類のGPUの画質向上機能をすべてオフにしたところで、同じ画像が得られなかったのだ。例えばRadeon R7とGeForce GT 630で再生された画像をバイナリレベルで比較すると、合致率は71.6%。Photoshopで2つの画像の絶対値の差(差分を取り、差がない場合は0つまり黒、差がある場合は大きい方の値で上書きをする)をとってみても、やはりわずかに異なる場所が検出できる。
一方Intel HD Graphics 4000は、バイナリレベルで合致するのはGeForce GT 630で15%、Radeon R7で15.3%。絶対値を取ると、全体的にIntelのほうが明るい傾向が見られた。
同じ動画ファイルを再生しているし、画質向上機能をすべてオフにしているのに、なぜ画質が異なるのか。まず考えられるのは、AVC/H.264というファイルフォーマット自体が、完全な元データに戻ることができない不可逆圧縮方式だからだ。
これについて、NVIDIAでテクニカルマーケティング エンジニアを務める矢戸知得氏に尋ねてみたところ、「デコードのプロセスで用いられる量子化テーブルは、ハードウェアによって違うものを持つ可能性がある」ということを示唆された。
また、動画ファイルに詳しいLoiloの代表取締役CEO 杉山浩二氏に伺ったところ、「圧縮フォーマットの動画ファイルの輝度情報は、TVの互換性を配慮しているため完全ではなく、最低輝度が0、最大輝度が最大値である255ではない可能性がある。そこでPCで動画再生を行なう際、その値を255まで伸張するが、伸張のアルゴリズムの違いによって差異が生まれる可能性がある」という。
つまり、動画ファイルの形式が不可逆圧縮方式である限り、違うハードウェア上で同じ絵が得られない可能性が極めて高いということだ。
同じハードウェアで再生した場合の画像についても検証してみた。GeForce GT 630とRadeon R7両方で、1回目を再生してキャプチャした後、PCを再起動し、2回目同じところでキャプチャしてみた。結果的にバイナリレベルで完全一致した。さすがに不可逆圧縮形式でも、ハードウェアが同一ならば同じ画像が得られるということだ。また、まったく別のマシンのGeForce GT 640は、GT 630と同じ結果だった。
では、Microsoftが本来考える「リファレンスの画像」はあるのだろうか。GeForceとRadeonそれぞれのドライバをアンインストールし、Microsoft基本ディスプレイアダプタでハードウェア再生支援が得られない状態で同じファイルを再生してみたが、こちらは同じハードウェア構成でも、1回目と2回目の画像が異なっていた。ソフトウェアによるデコードの量子化テーブルは一定ではない、ということだろう。
「ビデオカードが違えば画質が異なる」というのは、もはやDVI-Dが登場する以前、RAMDACが存在するミニD-Sub15ピンを使っていた時代の話だと思っていただけに、現代においても不可逆圧縮方式の再生でGPUによって画質が異なるというのは、意外な話だった。
一方、そもそも「Windowsにおいて、PrintScreenキーが押された時の画像はどこから取得したものなのか」というのも気になった。筆者はWindowsの仕組みに詳しくないのだが、これがDVI-Dへ出力される前のビデオメモリの内容をそのままダンプしたモノだけならば問題ないが、ビデオドライバに渡される以前のデータだった場合、ビデオドライバ側でさらに画像に細工を施して、最終的にGeForceとRadeon、Inte HD Graphicsで表示される画像は共通、という可能性は無きにしもあらずだ。
PrintScreenの仕組みについてMicrosoftに問い合わせてみたが、Windows非公開の仕様のためか、回答が得られなかった。上記の検証の通りGPUによって画質は異なるし、画質向上機能のオン/オフでもきちんとした効果が得られたので、ここからさらなる画質補正が加わる可能性は少ない。よって今回の検証はいずれも「PrintScreenによる結果の比較」であり、「最終的に出力されるものの画質を保証するものではない」ことをお断りしなければならない。
それぞれの処理にちゃんとした意義があった
前置きが非常に長くなってしまったが、それではいよいよ画質向上機能のオン/オフによる違いを検証していく。比較しやすいよう、オンとオフの画像の絶対値をとった画像と、そのコントラスト比を高めてより分かりやすくした画像を掲載する。
まずはRadeon、GeForce、Intelに共通項目があるエッジ強調。いずれも50%前後の値に設定してキャプチャした。写真を見ればわかるように、いずれのGPUもコントラストの差でエッジを検出して、エッジ近辺の内側にある色を明るくすることで強調しているようである。Intelのエッジ強調は控えめだ。
ノイズ低減も、いずれも周りの色に応じて、均一化を図ろうとピクセルごとに色の補正を行なっていることが分かる。特に画素センサーが不得意な暗い部分において、かなりの効果があることが伺える。ただし、この機能も含めて、以降はコントラスト比をかなり高めないと分からない程度の差であることも事実だ。ちなみにGeForceでは以上の2つの機能しか備えていない。
Radeonのみにあるモスキートノイズ低減は、圧縮画像のエッジ近辺でよく見られるギザギザしたようなノイズを低減するもの。画像では、輝度差が大きい文字の周辺や人物の服のシワなどの輪郭近辺を中心に補正が入っていることが分かる。
またブロックノイズ低減もRadeonのみ存在する機能だ。適用してみたところ、確かにブロック状になっている画像の付近でのみ、補正がかかっていることが分かった。これは良く出来たアルゴリズムだろう。
さて、Kaveri専用とされるグラデーションのマッハバンドを消去するという「Contour Removal」だが、Catalyst Control Centerの英語では「De-contouring」、日本語ではどうやら「輪郭矯正解除」という謎の項目で実装されているようだ。これを適用したところ、差の絶対値による比較ではかなり複雑な補正が行なわれていることが分かった。今回用意した映像は、ドラムのライトなどにグラデーションがあるが、マッハバンドはそれほど目立たないほうだ。それでも独自のアルゴリズムによって補正しようとしているのが分かる。また、先述のいずれのアルゴリズムと比較しても処理量が多く、これがAPUのみで対応している理由であろう。
もう1つ、Kaveri専用で、低解像度動画のアップスケール時にディテールを強調する「Detail Enhancement」だが、英語のCCCでは「Enable upscaled artifact reduction」、日本語では「高度なアーチファクト除去を有効にする」というこれまた謎の項目となっている。こちらは検証に使ったディスプレイが1,920×1,080ドット表示対応で、先ほどのファイルと同解像度のためそのままだと効果が現れない(再生してもバイナリレベルで100%一致)。そこで1,280×720ドットのiPhone 4で撮影した別の映像を利用して検証した。
すると、主となる物体の明るい部分を中心に、赤と青で立体的に補正していることが分かった。正直赤と青だけだとディテール強調に繋がるのが分かりにくいが、カメラのピントが合っている物体を明るめに強調することで、背景との差別化を図り、立体的に見せようとしているのではないだろうか。
比較画像を見る限り、これまでのアルゴリズムとは異なり、立体的に物体を捉えようとしているのが分かる。これも確かに、高度にCPUとGPUが密接し、複雑な演算が可能なAPUでなければ、リアルタイム処理での実現が難しそうな機能だ。
動画の高画質関連ならKaveriがもっとも多機能
以上、Kaveriの動画再生に関する高画質化機能を検証してきたが、確かにAPUらしい高度な処理が実装されていることが分かった。正直エッジ強調以外、50%の設定値では、個々にオン/オフしてもあまり違いが分からない程度でしかないが、少なくともきちんと機能していることが今回の検証で証明されたわけで、これがAMDが目指す絵作りであることがよく分かる結果となった。
ただ、再度注意しなければならないのは、1つは、以上のデータがすべてPrintScreenキーによるキャプチャである点。既に述べた通り最終出力段でどうデータが変わっているのか知りようがなかったので、結果として3種類のGPUともにさらにデータを加工してしまう可能性がある。
もう1つは、近年はGPUによる絵作りよりも、ディスプレイやTVによる絵作りのほうが重視されているし、実際にユーザーの目に届くのはディスプレイのデータであるということだ。例えばLGやアイ・オー・データ機器、三菱電機、EIZOなどは超解像技術を搭載したディスプレイを発売しており、これらのディスプレイで最終的にユーザーの目に届く映像はGPUが絵作りしたものとは異なる。またパネルの特性やバックライトの特性、内蔵LSIの違いにより異なる。厳密に言えば、同じモデルでも異なる可能性も十分にある。
ただしユーザーがずっと同じディスプレイを使っているならば話は別であり、(PrintScreenで得られた絵が出力最終段の映像であることが前提だが)GPUによってビデオ画質が異なるというのは事実である。その中でKaveriは間違いなく画質向上機能がもっとも豊富であり、「なんかイマイチ動画がパッとしない」というユーザーなら、試してみる価値はあるだろう。