特集:Vista買うのはまだ早い!

Vista買うのはまだ早い!(1)グラフィックス編

前のページへ 1 2 3 ゲームの互換性編へ

 

Direct3Dを利用すれば,GDIの制限にとらわれず,3Dグラフィックスを描画できる。画面は「Company of Heroes」より

 そんな遙か先に進んでいる機能を利用する方法として用意されたのが,もう一つのレイヤー,Direct3DやDirectDraw(現在は両者が統合され,「DirectX Graphics」という呼称になっている)である。

 

 GDIがサポートするのは,描画領域の転送(=領域のコピー)や直線,円弧,文字の描画など,非常に基礎的な2Dグラフィックスの描画機能に限られている。一方,Direct3Dでは,それこそ先ほど説明したアルファブレンディングを行ったり,あるいはハードウェアの性能をフルに生かした3Dグラフィックスの描画を行ったりできる。そして,これらの描画にはグラフィックスカードの高速なハードウェアアクセラレーションを利用できるので,処理も速い。
 だがこれらはもともとゲームのために組み込まれた機能なので,一般のアプリケーションからは利用しづらい……というより,事実上利用できなかった。というのも,Direct3DやDirectDrawを利用する場合,グラフィックスメモリなどといったリソース(≒PCのハードウェア資源)をアプリケーション側で管理する必要があり,あるアプリケーションが管理しているリソースを,ほかのアプリケーションと共有することが考慮されていなかったからだ。

 

ただデスクトップが派手になっただけに見えるAeroだが,よく見るとウインドウに対してアルファブレンディングが適用され,“ウインドウの向こう”が透けて見えている

 そのため,グラフィックスカード,そしてゲームのグラフィックスも進化しているのに,Windowsだけはその進化によるメリットを享受できず,一般のアプリケーションソフトは相変わらず古くさいGDIの機能を使わざるを得ない状況だった。Windows Vistaではこんな状況を一新しようということになったわけだが,Aeroデスクトップを見れば,何かが変わっていることはすぐに分かるだろう。

 

 Windows Vistaでは「デスクトップに3Dの機能が使われる」とよく言われるが,GDIをなくしてしまうと過去のすべてのアプリケーションソフトが機能しなくなる。そこで,マイクロソフトはかなりトリッキーな手法を採用した。
 Windows Vista上で,それこそWebブラウザなど,GDIベースのアプリケーションを実行したとしよう。そのとき,GDIベースの描画は,メインメモリの中に作られた仮想的な画面「オフスクリーンバッファ」(Off Screen Buffer)に対して行われる。そして,オフスクリーンバッファに描画された内容を,DirectXを利用して,デスクトップの3D画面「グラフィックスサーフェス」(Graphics Surface)に重ね合わせるという手法が採られているのだ。

 

Windows Vistaにおける描画の流れ。矢印は赤が命令,青が描画の流れを示している。簡単にまとめると,(1)ユーザーから見えない場所にDWMがGDIで描画,(2)オフスクリーンバッファの内容を,グラフィックスメモリ上のDirectXサーフェスに描画するようDWMがDirectX APIに指示,(3)DirectX APIによってGDIアプリケーションのイメージがグラフィックスメモリに置かれる,(4)GPUがその内容を実際のディスプレイ空間に描画する,といった感じ

 

 このマネージメントを行っているのが「DWM」(Desktop Window Manager)だ。DWMは,GDIとの互換性を提供しつつ,オフスクリーンバッファにアプリケーションソフトの描画を行い,その内容をDirectXのサーフェスに重ねて表示させるという仕事をしている。
 そのことがよくわかるのが,例の「フリップ3D」という機能である。

 

 Windows Vistaをアピールする,格好の宣伝材料でもあるフリップ3Dだが,画面に変化があるソフト(ゲームはもちろん,それこそFlashやアニメーションgifでもいい)を起動させた状態でフリップ3Dを表示させてみると,3D空間で斜めに表示されたウィンドウの内部でも画面がリアルタイムに変化し続けるのが見て取れる。これは,DWMがアプリケーションからのGDIの呼び出しを受け取り,それをオフスクリーンに描画しているためだ。オフスクリーンバッファの内容の変化が逐次反映されるため,3D空間にあるウィンドウの内部も表示内容が変わる,という仕掛けになっている。

 

視覚エフェクトを有効にした状態で「Windows Media Player 11」から音楽データを再生し,その状態でフリップ3Dを利用したところ。斜めになっている画面の中もリアルタイムに更新されている

 

 以上のように,Windows Vista(のAeroデスクトップ)では一般のアプリケーションの画面描画方法が大きく変わった。GDI互換は維持されているものの,従来は一般的にGDIから画面に直接描画されていたのに対し,「GDI→DWM→DirectX」という流れで画面が描画されているのだ。

 

 そのため,GDIアクセラレーションはもはや必要でない。そこでWindows VistaのWDDMでは,GDIのアクセラレーション機能が廃止されている。Windows XPまでのグラフィックスドライバには,2D,あるいはウインドウアクセラレーションとも呼ばれるGDIのアクセラレーションをサポートする機能が組み込まれていたが,WDDMでは組み込まれていないのだ。GDIはDWMがソフトウェアエミュレーションとして提供するため,グラフィックスドライバとしてのWDDMからサポートする必要がなくなったというわけである。

 

Windows Vista(上)とWindows XP(下)で,DirectXとGDIの処理について違いをまとめてみた。先ほど示した「Windows Vistaにおける描画の流れ」の図と比べながら見てみてほしい

 

GPUの機能を複数のアプリケーションが共有

 Windows Vistaでは,一般のアプリケーションがDWMを通じてDirectXを利用する。そしてもちろん,ゲームからもDirectXを利用しなければならないわけで,従来のDirectXのように複数のアプリケーションからの同時利用が難しい仕様では困ってしまう。

 

 したがって,WDDMでは複数のアプリケーションから3Dアクセラレーションなどの機能が利用できるよう,DirectXに大幅な変更が加えられている。
 先に述べたとおり,従来のDirect3DやDirectDrawではグラフィックスメモリをアプリケーション側で管理する必要があった。ゲームアプリケーションがDirectXに「使うからグラフィックスメモリを渡せ」と命令しても,例えばほかのアプリケーションが使用中だったら(グラフィックスカードは)渡せないし,渡さなくてもいい――その場合はアプリケーションの起動に失敗する――という仕様だったわけだ。

 

Windows XPまでのDirectXでは,アプリケーションがグラフィックスメモリを管理していたので,(ゲームなどの)あるDirectXアプリケーションがグラフィックスメモリを使っていると,別のDirectXアプリケーションはそれを利用できなかった

 

 だが,複数のアプリケーションが3Dを使うWindows Vistaにおいては,アプリケーションの要求に合わせて,WDDMがグラフィックメモリなどのハードウェアリソースの利用を調停する機能が組み込まれている。WDDMが都合をつけてくれるので,アプリケーションからは,いつでも3Dなどのグラフィックアクセラレーションが利用できるように“見える”のだ。これを,ときに「GPUの仮想化」と呼んだりする。

 

こちらがWindows VistaにおけるDirectXアプリケーションの使われ方を示したもの。ずいぶんと変わっている

 

 

オーバーヘッドは大きくないがしかし確実に存在する

 

 以上,長々と「Windows Vistaで変わったこと」を説明してきたわけだが,WDDMやDirectXの構造が大きく変わったことで,Windows XPよりも「オーバーヘッド」と呼ばれる直接/間接的な負荷は大きくなっているように思える。Windows XPのDirectX 9は一つのゲームがGPUの機能を独り占めする状態に近かったが,Windows Vistaではドライバ側でGPUを仮想化するなどの余計な処理が間に挟まっているからだ。
 また,ドライバがユーザーモードとカーネルモードの二つに分けられたこともオーバーヘッドの原因になり得る。ユーザーモードとカーネルモードの切り替えには数十クロックが必要で,頻繁な切り替えは時間のロスが大きい。
 では,そのロスは3Dグラフィックスの描画性能にどれだけ影響するだろうか? のとおりハードウェアの構成を一致させた状態で,Windows VistaとWindows XPからそれぞれ「3DMark06 v1.1.0」(1024×768ドット,標準設定)を実行した結果をグラフに示してみた。

 

 

 

 若干のスコアの低下が見られるものの,その割合は4%弱。パフォーマンスを低下させそうな要因がWDDM,DWMなどいろいろあるWindows Vistaだが,多岐にわたる変更が加えられた割に「がんばっている」といったところだろう。
 もっとも,この4%程度のパフォーマンス低下をどう評価するかは,利用しているグラフィックカードやCPUの性能などにもよる。高いパフォーマンスを持つPCを利用している人なら4%程度の低下も問題にはならないかもしれないが,そうでない人にとっては深刻なはずだ。オーバーヘッドは大きくはないとはいえ,存在する,ということは押さえておきたい事実である。そしてこの差は,GPUの仮想化によって「ゲームがDirectXを独り占めする」ことができなくなっている以上,ドライバのアップデートなどで解決する問題ではないということも,認識しておきたい。

 

 

ドライバの完成度に問題山積最低限ドライバの完成は待つべき

 

 ところで,フレームレートの低下より問題なのは,グラフィックスドライバの完成度だろう。グラフィックスドライバの構造が大きく変わったことで,各社ともWDDM準拠のドライバの作成にかなり苦戦しているように見受けられる。

 

 実際,NVIDIAはつい先日となる2007年2月20日に,ようやく正式版のForceWareを提供したばかり。ATI CatalystをWindows Vistaに合わせてリリースし,完成度ではNVIDIAの遙か先を行くAMDも,複数のゲームタイトルで(Windows XP時代にはなかった)問題を抱えていたりと,改良の余地はまだまだ少なくない。

 

 また,Windows Vista最大のウリであったDirectX 10に関しては,未だ何一つ対応タイトルの発売日が見えておらず,パッチレベルの対応もまったく進んでいない。鳴り物入りで登場したはずの対応タイトル「Microsoft Flight Simulator X」も,美麗になるというDirectX 10版のゲーム画面は公開されておらず,先行きは不透明だ。

 

 厳しいことを書けば,今のところ,ことグラフィックス周りに関して,ゲーマーがWindows Vistaへ移行したところで問題が生じることはあってもメリットは一つも生じない。問題が片付いてから,ゆっくりと移行を検討すれば十分だろう。どうしても移行したい場合でも,最低限グラフィックスドライバ周りの課題が解決するのを待つべきである。

 

 

次回予告

 近日中に掲載予定の第2回では,Windows Vistaにおけるゲームの互換性――Windows XP世代のゲームがWindows Vista上でどれだけ動くのか――を検証してみたい。

 

前のページへ 1 2 3 ゲームの互換性編へ

 

タイトル Windows Vista
開発元 Microsoft 発売元 マイクロソフト
発売日 2007/01/30 価格 エディション,入手方法による
 
動作環境 N/A

(C)2007 Microsoft Corporation.