PCゲームのプレイ動画配信は娯楽の一大ジャンルとしてすっかり定着したが、配信者にとって配信画質をいかに上げるかは頭の痛い問題だ。
これまでPCゲーム動画を高画質で配信するには、CPUパワーを利用したエンコードが良いとされてきた。一方で、GPUを使ったエンコードは技術のひとつとして選べるが、画質がいまひとつという理由で避けられがちだった。
しかし、CPUを使ってエンコードすると本来PCゲームで使うはずのパワーまで食われてしまうため、配信用PCをゲームプレイ用PCと別にするのがベストプラクティスとされてきた。
もちろん、高性能なメニーコアCPUを搭載するPCにキャプチャカードなどの装備をキッチリ整えれば、ゲームプレイも配信もPC1台でまかなえる。しかしそれでは、下手をすると20万円近い追加出費が必要になるだろう。
そんな中、NVIDIAがPCゲーム動画配信コミュニティーに新たな一石を投じた。今年初頭のCES 2019における基調講演において、定番配信ツール「Open Broadcaster Software」、すなわち「OBS」を用いた高画質配信とGeForce RTX 20シリーズ(Turing)の関連について触れた。Turingに実装された新しいNVENCを利用することで、1台のPCでも2台体制と同等クオリティーの配信が可能になるという。
2月25日、OBSの最新バージョン“23.0.0”が公開され、GeForce RTXシリーズ及びGTXシリーズ向けの最適化が盛り込まれたことが正式にアナウンスされた。Turingと最新OBSで高画質配信が可能になるという話は果たして本当なのか? 実際どの程度画質が違ってくるのかなどを検証する。
GeForceの世代間におけるNVENCの仕様の違い
検証に入る前に、NVENCはTuringでどう変わったかを確認しておきたい。まず前提知識として、NVENCとはKepler以降のGPUに内蔵された(一部例外あり)ハードウェアエンコーダーユニットのことだが、CUDAコアとは別の領域に設置されているため、CUDAコア数の規模にあまり関係なく高速に動画エンコードできる。
また、NVENCとは逆に動画のデコードを実行するユニットも存在しており、これは「NVDEC」と呼ばれる。そして、アプリとNVENC/NVDECの橋渡しをするのが「NVIDIA Video Codec SDK」である。
ちなみに、各GeForce世代におけるNVENCの仕様の違いを簡単にまとめておくと、以下のようになる。
Kepler世代:H.264のYUV 4:2:0のみ対応
Maxwell世代:H.264で対応色空間追加
Maxwell世代(GTX 970以上):H.265 4Kに一部対応
Pascal世代(GT 1030以外):H.265 4Kで色空間追加及びH.265の8K対応
Volta世代:変更なし
Turing世代:H.265におけるBフレームのサポート
TuringではH.265においてもBフレームがサポートされ、同ビットレートならより高画質な映像が得られるようになった。だが残念ながら、この変更点は今回のOBS最適化とは関係ない……。
新SDK対応により高画質&高速化
H.265のBフレームサポートはハードウェア的なTuringの強化ポイントだが、今回のOBSでは違うところが重要になる。
OBS v23.0.xで盛り込まれた最適化は、H.264用の新しいNVENCエンコーダーとして選択可能になっている(エンコード設定を“詳細”とした場合)。注意点としてはこの新エンコーダーはTuringのNVENCを意味するのではなく、最新のNVIDIA Video Codec SDK v9.0対応という意味となる。つまり、Turingでなくとも新しいNVENCエンコーダーは選べるのだ。
この新しいNVENCエンコーダーでは、画質劣化を抑えつつデータ量を減らす“Rate Distortion Optimization”(RDOと略)、和訳すれば“レートひずみ最適化”手法が追加された。OBSでは「心理視覚チューニング」(英語版だとPsycho Visual Tuning)という項目がこれに該当し、エンコード結果の画質改善に寄与する、とNVENCのドキュメントには記されている。
そして、Video Codec SDK v9.0では、TuringベースのGPUにおいてRDOのハードウェアサポートが追加されているため、Turingのほうが従来のGPUよりも有利であることは言うまでもないが、そもそもTuringより前のGPUで心理視覚チューニングがソフトウェア的に効くのかは明らかにされていない。
さらに重要な点として、これまではGPUがレンダリングした映像を一度メインメモリーに読み込み、それをNVENCに戻すという非効率的な作業を行なってきたが、新SDKではGPUでレンダリングした映像がVRAMからNVENCに直接送られ、メインメモリーの帯域を消費せずにストリームされたデータだけを取り出せるようになった。これによりエンコード時のパフォーマンス低下を抑えることが可能になるのだ。
もうひとつOBSの新しいNVENCに追加された画質オプション「Look-ahead」についても解説しておこう。これはエンコード処理前に次以降のフレームの情報を参照し、Bフレームを必要に応じて入れる設定となる。ただし、Bフレームはデータ量が増える、すなわち実質ビットレートを下げてしまう効果もあるので使わないほうが良い場合もあるだろう。
つまり、OBS v23.0.xでより画質の良い映像を得るには、Turingと新しいNVENCエンコーダーの組み合わせがベストで、続いて旧世代GeForceと新しいNVENC、そしてパフォーマンスが劣る従来のNVENCを使ったエンコードと続く。
ちなみに、OBSには本家OBSのほかに、StreamLabs社が機能やUIを独自に発展させた「StreamLabs OBS」(SLOBS)の2つがあるが、SLOBSにはまだ新しいVideo Codec SDKの要素はない。とはいえ、今後組み込まれてくるだろう。
また、「XSplit」や「Wirecast」といった他の配信ツールもVideo Codec SDK v9.0に準拠すれば同様の効果が期待できる。だがNVIDIAの弁によると、OBSは配信用ツールとして80%程度の大きなシェアを握っているとのこと。つまり、OBSでの存在感を高めればゲーム配信における定番の座をより強固にできるわけだ。これがNVIDIAの戦略なのだ。
OBSの設定はどうするか?
では新しくなったOBS(本稿執筆時にはv23.0.1)で高画質配信をする設定のコツを交えつつ、今回検証に使った設定を解説しておこう。
ゲームプレイも配信も1台で行なうということは、ゲームの裏でOBSを動かし続ける必要がある。ただし、Windows 10のゲームモードはバックグラウンド処理の優先度を下げてしまうため、1台でゲームプレイも配信もする場合は、必ずゲームモードをオフにしておこう。
次にOBSの設定ウインドウを出し、まずは解像度やフレームレートなどを決める。当然、解像度とフレームレートを下げればそれだけエンコードの負荷も回線への負担も軽くなるため、これはPCの性能やネット環境と相談して決めよう。
とはいえ、高画質かつ滑らかなゲーム配信を考えるなら、解像度はフルHD(1920×1080ドット)、フレームレートは60fpsにしたいところ。フィルターは解像度を落とす場合に有効だが、負荷自体はそれほど高くないので「ランチョス」(Lanczos)で良い。
続いてはエンコーダーの設定だ。「基本」モードの状態でNVENCを選べば、そのまま新SDK準拠のNVENCになるが、明示的に新旧を選択できる「詳細」モードでの作業をオススメしたい。ビットレートの最適値は個人のネット環境に依存するが、TwitchやYouTubeなどに流すなら“8000”、すなわち8Mbps(8000Kbps)あたりが良いだろう。
今回の検証ではキーフレームは「2」、プリセットは「Max Quality」、プロファイルは「high」で検証している。ちなみに、Max Qualityでは2パスエンコードになるのに対し、それより下の設定では1パスエンコードとなる。
ここで大事なのが新たに追加された「Look-ahead」だが、ゲーム配信ではオフのほうが良いようだ。次フレームの内容を参照する作業で若干GPUパワーを取られるのに加え、FPS/TPSやレーシング系といったゲームでは画面の書き換えが激しく、配信時のコマ落ちにつながりやすい。
一方で、書き換わる範囲が比較的限定されている「Hearthstone」などのボードゲーム系、あるいは定点から演者のバストショットを撮り続けるようなスタイルの配信ではオンが良いようだ。もうひとつの心理視覚チューニングは画質向上に寄与するため常時オンで良いが、負荷が重すぎると判断したらオフも試してみよう。
検証環境は「エンコード時の性能が良いのはGPUパワーのせいか?」となるのを防ぐために、描画性能が控えめなGeForce RTX 2060をチョイスした。一応Pascal世代のGPUも用意したが、ほぼ同等性能のGTX 1070 Tiが調達できなかったため、やや格上のGTX 1080を使用している。ドライバーは検証時点での最新版419.35である。
検証環境
CPU Intel「Core i9-9900K」(8C/16T、3.6~5GHz)
CPUクーラー NZXT「Kraken X72」(簡易水冷、360mmラジエーター)
マザーボード GIGABYTE「Z390 AORUS MASTER」(Intel Z390)
メモリー G.Skill「F4-3200C14D-16GTZR」(DDR4-3200 8GB×2、DDR4-2666で運用)
グラフィックス NVIDIA「GeForce RTX 2060 Founders Edition」、NVIDIA「GeForce GTX 1080 Founders Edition」
ストレージ Western Digital「WDS100T2X0C」(M.2 NVMe、1TB SSD、システムドライブ運用)、Crucial「MX300 CT1050MX300SSD4/JP」(M.2 SATA、1.05TB SSD、データドライブ運用)
電源ユニット SilverStone「SST-ST85F-PT」(850W、80 PLUS Platinum)
OS Microsoft「Windows 10 Pro 64bit版」(October 2018 Update適用)
新しいNVENCではフレームレートへの影響が少ない
まずは画質云々より先に、OBSでNVENCを利用することで、ゲームのフレームレートにどの程度の影響が発生するかをチェックする。OBSの新しいNVENCはメインメモリーを経由せずにGPUとVRAMのやり取りだけでエンコード作業を行なえる。つまり、新しいNVENCのほうが負荷が軽くなることが予想できる。
最初のテストはDirectX 11ベースの「Far Cry New Dawn」を試してみたい。このゲームを選択した理由はベンチマークモードがあり、異なる録画条件での比較がしやすいためだ。ベンチマークを再生し、その模様をOBSでMP4形式で“録画”する。設定は前ページの通り。
なお、ゲーム内解像度は1920×1080ドット、画質は「最高」に設定した。OBSを起動せず、ベンチマークモードだけを回した時の結果とも比較してみよう。
NVENCの新旧差は意外と大きく、平均フレームレート比較で4~7fps違ってくる。メインメモリーを経由せずにエンコード処理できる新しいVideo Codek SDKは、かなり効率が良いようだ。新しいNVENCで選択できるLook-aheadはCUDAコアを使うため性能に影響が出ることを予想していたが、今回の実験ではフレームレート上で実感できるほどの数値ではなかった。
GPUがRTX 2060でもGTX 1080でも、CPUのみ(x264)のエンコード時よりは新しいNVENCを使ったほうがフレームレートが高い、という点も予想通りだ。
ここで両者の画質を比較してみよう。録画したデータを再生し、なるべく同じシーンで違いがわかる部分を切り出してみた。ただし、動き回るキャラは毎回微妙に動きが違うし、録画スタートを手動で行なう関係上、完璧に同一フレームでの比較にはならない。
本来なら「FFmpeg」などのツールに同一の動画ソースを変換させて違いを見るのが正確だが、FFmpegの現行バージョン(v4.1.x)はVideo Codek v8.1がベースなので実際のPCゲームタイトルでの比較となった。
【編集注】記事内の画質比較はクリック・タップすると2.5MB以上の大きいサイズで表示します。LTEや3G回線で閲覧されている方はご注意ください。
旧NVENC(上の比較では中央)では、「WEAPONS」の文字やヘリの機体に書かれている文字の輪郭が眠く、ヘリの機体のグラデーションにブロックノイズが出ている程度で、正直なところ新しいNVENCとx264は見分けがつかない。
NVIDIAが主張するようなわかりやすい差異は見られなかったが、少なくとも旧NVENCよりは画質が改善されている。そして、x264 fastやmediumと同等レベルになった、と言えるだろう。
ただし、録画した動画のクオリティーに関して言えば、新しいNVENCでLook-aheadを有効にすると、建物から外に出るような書き換わりの激しいシーンでわずかにコマ落ちが確認できた。GPUパワーを使って処理するためだと思われるが、FPS系ゲームでゆっくりフライバイするようなシーンでもLook-aheadは無効が良いようだ。
続いては録画のビットレートをVBR 40Mbpsにした時のフレームレートを見てみよう。
GTX 1080のほうが描画性能が高いので最高フレームレートはわりと差がつくが、平均フレームレートはRTX 2060がわずかに下になる程度。フレームレート差から導き出せる負荷の度合いで言えば、新しいNVENCが最も低く、次いで旧NVENC、x264の順となる。また、8Mbpsでも40Mbpsでも、x264を使い1台のPCでプレイと録画を同時に処理させると、60fps以上を維持できなくなる点も共通している。
VBR 40Mbps時の画質比較もしてみよう。建物の看板のシーンはまったく見分けがつかなかったので、ヘリコプターの機体マーキングまわりだけを比較する。
このビットレートになるとほぼ見分けることはできない。強いて言えば、旧NVENCではマーキングのシルエットがやや眠いとか、ドア縁の黒い部分のモヤモヤ感が強いかなという気もするが、ほぼ難癖に近いレベルだ。とはいえ、ここまで画質を上げても普通にベンチマークで60fps以上がキープできているのだから、NVENCはx264に比べて効率が良いことは確かだろう。
では録画中のCPU占有率はどうなっているのだろうか? タスクマネージャーで観察してみた。
x264で高画質録画するためには数年前ならHEDT向けの強力なCPUが必要だったが、ここ2年ほどでメインストリームにも8コア/16スレッド駆動のCPUが降りてきた。そういったCPUを使っているなら、NVENCを使わなくてもCPUパワーでなんとかできるだろう。だが、裏でなにか別の処理が始まったら、x264は非常に危うい状態になることは間違いない。
Forza Horizon 4では優劣の傾向が異なる
続いては「Forza Horizon 4」でも試してみよう。Far Cry New DawnはDirectX 11ベースだが、こちらはDirectX 12ベース。CPUやGPUの使われ方もFar Cry New Dawnとは対照的で、Forza Horizon 4のほうがマルチスレッドに最適化されている。
テストはFar Cry New Dawnと同様、ベンチマークモードをOBSで録画する。画質は「ウルトラ」、解像度は1920×1080ドットとした。グラフ中の「GPU-」で始まる項目はGPU内部で処理しているフレームレートで、実際にユーザーに観測される平均フレームレートは「Avg」で示す。
非常に興味深い結果が得られた。旧NVENCよりも新しいNVENCのほうがフレームレートが高いところは同じだが、CPU(x264)を使って録画したほうがより高いフレームレートが出たのだ。
ベンチマーク結果をよく観察してみると、NVENCを使った時はベンチマークと録画ともに微妙なカクつきが発生していた。順序的にはベンチマークでスタッターが発生し、それがNVENCで微妙なコマ落ちとして現われるといったところだろう。これについては後ほど原因を追求する。
こちらも同様に、VBR 40Mbpsで録画した際のフレームレートも比較する。
8Mbps時と同様、NVENCを使った場合はスタッターが発生するため若干フレームレートが落ち、むしろx264を使ったほうがゲーム上のフレームレートが高いという結果を得た。
しかし、録画したものの品質をチェックすると、NVENCは微妙なスタッターは出ているものの全体としては鑑賞に耐えるものなのに対し、x264で録画した場合はfastでもmediumでも派手にコマが飛んでしまい、とても観られたものではない。高ビットレート録画ではCPUを使わないNVENCが圧倒的に有利なのだ。
それでは画質比較といこう。上から順番に新NVENC(心理視覚エフェクト+Look-ahead)、新NVENC(心理視覚エフェクト)、旧NVENC、x264 fast、x264 mediumとなっている。
8Mbpsで比較した場合はエンコーダーの癖がハッキリとわかるシーンがあった。特に顕著なのはアスファルトのテクスチャーや車の輪郭、そして高速で通過する看板の文字の3点だ。
NVENCだと中距離にあるアスファルトのテクスチャーが完璧に消えてしまっているが、看板の文字は比較的しっかりとしている。また、旧NVENCよりも新NVENCのほうが車のディテールや看板の文字の輪郭がよりハッキリと描かれる。
これに対し、x264は中距離にあるアスファルトの質感が辛うじて(ややブロックノイズぽくなっているが)残されている反面、車のディテールや看板の文字に滲みが見られる。特にx264 fastではそれが顕著だ。アスファルトのテクスチャーを表現しようとするあまりビットレートを消費してしまい、他の部分がおろそかになったという感じだ。この辺はエンコーダーのバランス感の違いとも言えるだろう。
続いて40Mbpsでは、どのエンコーダーも中距離のアスファルトの質感がよく再現できており、ディテールもパキッとしている。しかし、x264はまだ文字の輪郭が微妙に甘い感じだし、何よりコマ落ちが激しくて鑑賞には適さない。
この理由は簡単で、Forza Horizon 4はCPUのマルチスレッド化が進んでおり、各コアの占有率が元々高いからだ。そのため、x264ではCPUパワーに余裕がなくなってしまい、激しくコマ落ちするのだ。Forza Horizon 4に関しては言えば、高ビットレート録画するならNVENCが圧倒的に強いことになる。
低めのビットレートではTuringに軍配が上がる
最後にRTX 2060とGTX 1080で、新しいNVENC(心理視覚チューニング)を使用した時に画質に差ができるのかどうかを見て画質比較は終わりにしたい。差がわかりやすかったForza Horizon 4を使い、8Mbpsと40Mbpsの場合を比較する。
まず顕著な違いが見られたのが8Mbpsでの録画だ。コース上に落ちる建物の影のように、超高速で動くコントラストの強い物体の輪郭はRTX 2060でもGTX 1080でも漏れなくブロックノイズが出る。しかし、ブロックノイズの大きさを観察すると、GTX 1080のほうが大きめのブロックになることが多いのだ。さらに、ナンバープレートの数字や各種メーター類のディテールなども、GTX 1080のほうがRTX 2060よりも崩れて見える。
ビットレートを40Mbpsまで上げると違いはほとんどわからなくなるが、それでもメーターや地図の輪郭などに微妙なクオリティーの差が出る。こちらもRTX 2060のほうが上だが、ここまで上げるとTuringもPascalもあまり違いは出ない。ライブ配信に使うような8Mbps程度のビットレートで差がつくようだ。
Forza Horizon 4でのスタッターは「GPU占有率」が原因
さて、Far Cry New Dawnではうまく機能していたNVENCだが、Forza Horizon 4ではNVENCを使うとスタッターが出てしまった。これではx264のほうがまだ良いではないか……? ジサトラKTU #97放送時点ではドライバーやOBSの熟成が原因と考えていたが、これは筆者の考え違いだった。結論から言うと、GPU負荷が高すぎてエンコード処理の足を引っ張っていたことにある。
GPU負荷を下げるには画質を下げるのも手だが、フレームレートを制限してしまったほうが劇的に下がる。これは画質を下げて負荷が低くなったぶん、余計にフレームレートを出そうとする場合もあるからだ。
制限方法としては、ゲーム内のフレームレート制限機能を有効にしたり、V-Syncを有効にする、あるいはEVGA「Precision X1」などの外部ツールで強制的にフレームレートに上限を設けるなどのやり方がある。今回のテストのように安定してリフレッシュレート(60Hz)を大きく上回るフレームレートが出ているなら、V-Sync有効が一番手軽で確実だ。
フレームレートを制限することでNVENCがエンコードする際にGPUやVRAMのバス負荷が軽減され、エンコード処理がゲームの処理の足を引っ張ることはなくなる。試しにV-Syncを有効にして60fps上限にしたところ、新しいNVENCを使ってもスタッターが抑えられ、よりスムースな録画結果を得られた。
ざっと試してみたが、NVENCを利用すると10%程度GPU負荷が増えるようだ。つまり、エンコードをしない状態でGPU負荷が90%未満に抑え込めることができれば、GPU負荷の高いゲームでもスタッターの発生、ひいては録画や配信の微妙なコマ落ちを抑制できるようだ。
新しいNVENCが輝くのはCPU次第
これまでの検証で、40Mbps設定での高画質録画では新しいNVENCでないと録画したデータがコマ落ちすることが観測されたが、8Mbps設定だとx264も新しいNVENCと大差ない画質だということがわかった。しかし、x264はCPUパワーを使う。今回は検証に8コア/16スレッドのCore i9-9900Kを使ったが、それよりコア数が少ない場合はどうなるのだろうか?
今回は第9世代Coreプロセッサーの下位モデルが手元になかったため、BIOS設定を利用して下位のCore i5-9600K及びCore i7-9700K相当のスペック(ターボブースト時の倍率も実際の製品に準拠)に合わせた“仮想Core i5/i7”でもテストしてみたい。
さらに、コア6基+HT有効の6コア/12スレッド、すなわち“並列度だけRyzen 5相当”の環境も用意した(クロックはCore i5-9600Kと同じに設定)。現実のGPUよりもL3キャッシュなどの点で有利になっているが、仮にこの状態でコマ落ちが発生すれば、それは本文のCPUを持ってきてもコマ落ちするだろうということは想像に難くない。
テストは前述の検証と同じくFar Cry New DawnとForza Horizon 4を利用し、OBS側はCBR 8Mbps&Look-aheadなしの設定とした。以下、単純に録画された動画にコマ落ちが見られたか否かを記す。V-Syncは両ゲームともに無効化している。
前述した通り、GPU占有率の関係で新しいNVENCはForza Horizon 4でコマ落ちが確認できたものの、非常に軽微でじっくり見ないとわからないレベルだが、x264でエンコードする場合は論理コア数が減るほどにコマ落ちの激しさが増していく。
CPU負荷の軽いFar Cry New Dawnのほうがコマ落ちはやや軽減されたものの、6コア/6スレッド(Core i5-9600K相当+α)程度の並列度では、ほぼ紙芝居状態となった。
さらに、CPU負荷の高いForza Horizon 4では、6コア/12スレッドであっても常時コマ落ちが目につく状態だ。とても視聴できる状態ではない。結局、x264 fast設定でまともに録画できたのは8コア/16スレッド時のみだった。つまり、現行のメインストリームなら、Core i9-9900KかRyzen 7 2700X及び2700以外のCPUでは、Turing+新しいNVENCの組み合わせが安定して高画質な結果を得られると言える。
まとめ:少し遅かった感はあるが、多くの配信者にとって非常に有益
以上で検証は終了だ。実際に動画でお見せできない部分が多々あるため、いつものGPUレビューのような歯切れの良い結論は出しづらいが、OBS v23.0.xで追加された新しいNVENCは非常に高性能で、x264のfast設定でエンコードした時と同等の画質が得られる。そして、そのx264 fastで満足なエンコード結果を得るためには、メインストリームCPUなら8コア/16スレッドは必要になる。
つまり、この新しいNVENCが一番“刺さる”のは、GPUはTuringでも、CPUがCore i7以下(もしくはRyzen 5)であるというユーザーだ。CPUの並列度が足らないため、x264では画質を犠牲にしなければまともにエンコードできないが、新しいNVENCを使えばCPUの並列度が少々低くても高画質でエンコードできる。GPU負荷に気を払う必要はあるが、そこさえクリアーできれば配信専用のPCは不要になる。
もちろん、配信専用PCを用意するということのメリットを否定するわけではない。環境を分けて、ゲームは配信ソフトの、配信ソフトはゲームの不具合に巻き込まれないのはメリットだろう。むしろメニーコアCPUを搭載した配信専用PCにもTuringベースのGeForceを載せれば、CPUでエンコードしてもGPUでエンコードしても良しの最強配信PCとして運用するのもアリだ。
ライバルが価格勝負に出たこと、さらにマイニング崩れの中古カードが自作PCパーツ市場に流入しているため、RTX 20シリーズやGTX 1660 TiといったTuringベースのGeForceは順風満帆とは言い難い状態である。しかし、DXRやDLSSに続き、配信者向けの実用的な機能を組み込んできたNVIDIAの挑戦姿勢については、素直に賛辞を送りたい。あとは製品の値段がもう少し落ち着けば、話はとてもラクなのだが……。
■関連サイト
NVIDIA OBS関連ニュース
NVIDIA Video Encode and Decode GPU Support Matrix