読者です 読者をやめる 読者になる 読者になる

AKIBAX 記事より

Vista

PC Watchより.

AKIBAXの会場で、自作系ハードウェア関連の話を、マイクロソフト Windows本部 コンシューマWindows製品部 シニアプロダクトマネージャ 森洋孝氏にお伺いする機会があったので、ここで紹介したい。

おもしろかった部分について拾い読み.

--DirectX 10はいつ頃搭載されるのでしょうか

森 大きく発表はしていませんが、実は既にVistaにはDirectX 10がプリインストールされています。これは現在NVIDIAGeForce 8800シリーズで採用されているUnified-Shaderにも対応したバージョンです。後はDirectX 10を活用するアプリケーションおよびハードウェアの登場に期待してください。ただし、VistaではDirectX自身をOSの機能として搭載しているため、今後は“DirectXバージョンいくつ”という呼び方はしません。また、XP向けのDirectX 10の提供も現在のところ未定です。

確認してみましたが,これはある意味で真実のようです.Vista RTM 版には,いずれも RTM 版の d3d10.dll と d3d10core.dll が搭載されていました.また,DirectX SDK には DirectX のバージョンを取得するサンプルプログラムが付属していますが,DxDiag API 経由で得られた DirectX バージョンは確かに 10.0 (Version Letter 32) となっていました.
一方,「ある意味で」と書いたのは,この Vista RTM 版には D3DX10 のランタイム・ライブラリが含まれていないからです.近年の Direct3D 開発で,D3DX への依存性を 0 にするというのは中々大変な作業であり,『DirectX SDK - December 2006』を使用して作成されたアプリケーションは恐らく d3dx10.dll への依存関係を持つことになるでしょう.
となると,『DirectX End-User Runtime Web Installerhttp 』などで追加のインストール作業は必須になります.
また,「今後は“DirectXバージョンいくつ”という呼び方はしません。」というのも本当です.詳しくは id:NyaRuRu:20061017#p3 参照のこと.
「XP向けのDirectX 10の提供」については,今までも散々否定され続けてきましたが,個人的にはやはり無いだろうと思っています.もちろん,それを実現しなければ会社を分割されるといった非常事態になれば是が非でも実現はしてしまうでしょう.しかし,DirectX Graphics Infrastructure (DXGI) のエミュレーションが死ぬほど面倒そうとか,現時点の WDK レベルでそういった動きが一切見えないとか,ネガティブな状況証拠から考えれば,今から実装を初めても XP がまともな市場価値を持っているうちに実現されそうには思えません.

--3D関連のベンチマークで、スコアが低下しているものもあるようですが

森 Vistaでは3D関連の仕様がかなり変更されているので、それはベンチマーク側の問題ではないかと認識してます。もしVistaの仕様にあわせてベンチマークを開発されたのでしたら、間違いなくVistaで走らせたほうが高速です。また、ベンチマークは一種の指標でしかないので、実際のアプリケーション環境の体感上ではあまり変わらないか、むしろVistaの方が快適だと実感できるはずです。

現在の Windows Vista RTM とドライバで,Windows XP よりも Direct3D のパフォーマンスが減少しているという事例があるのは事実のようです.例えば id:Kazzz さんのところ.

Windows Vista上でいろいろと試してきたが、DirectXのゲームを含むいくつかのお気に入りのアプリケーションの性能が、どうしてもWindows XPを使っていた時のと同等にはならない。

ただ,個人的には,必死に最適化したらすごく速いというハードウェアよりも,そこそこのコードで遅くはないというハードウェアの方が好印象だったりします.そんなわけで,記者にはぜひこういう質問をしていただきたかったのです.
WDDM による User Mode Driver の導入で,ドライバ処理のオーバーヘッドが減少すると聞きましたが,それは D3D10 のみではなく D3D9 にも有効ですか?」
背景事情についてちょこっと書いておきましょう.
以前から何度も書いてますが,近年の 3D 描画技術は,GPU の性能向上が速すぎて,至る所で CPU が足を引っ張るという現象が普通に現われています.DDB 相手の GDI 描画なんて XP 時代ですら 10 % も GPU 性能を出せていなかったでしょう.下手をすると 1 % 以下なんて数字も普通に出てくるかもしれません.
そして,バッチ処理を意識していた Direct3D ですら CPU 律速が起きていると言われるようになって久しいのです.

Triangles/Call(=描画命令1回当たりのポリゴン数が「8」)のときは、CPU時間を100%消費するにもかかわらず、GPUはトップスピードの20%以下の性能しか出せていない。一方で32768 Triangles/Call(=描画命令1回当たりのポリゴン数が「32768」)のときは、1%以下のCPU時間でGPUのトップスピードを実現している。

一般に、凝った画面はそれだけ重いだろうという印象を受けやすい。Windows Vistaの3Dを利用したデスクトップについて、「きっとシンプルな方がCPU負荷は軽いに違いない」と考えるのも仕方がないかもしれない。しかしこのベンチマーク結果は、出力結果の画面の複雑さではなく描画命令数が大きくCPU時間に影響し得ることを示している。

例えば、1000個のアイコンを一度に描画する方法と、100個のアイコンを1つ1つ描画する方法では、CPU使用率という点ではパフォーマンスの逆転が起きても不思議はないということだ。CPU視点での描画コストを、描画結果である画面内容から推し量るのは案外に難しい。

これは @IT の記事からの引用ですが,Mobile 用の GPU ですらこんなありさまです.描画命令 1 回あたり 8 ポリゴンしか描画しないようなアプリケーションは,実は性能 20 % の GPU で十分なのです.
デスクトップ向けのハイエンド GPU になると,一体どれだけのポリゴンを 1 回に描画すれば CPU より先に GPU のパイプラインを満たせるのか,想像もつきません.
このように,現在のリアルタイム 3D 描画の世界は,完成した絵の内容から負荷を測るのは非常に難しく,プロファイラで実測したり,ソースコードを調べたりしないと,GPU 性能をどれだけ利用できているか,あるいは CPU 負荷がどれぐらいかかっているかが分からなくなってしまっています.
プログラムとドライバの間の層が薄い OpenGL に比べ,Direct3D はバッチ投入コストが高いといわれ続け,Microsoft はそのたびに「Vista で改善する」という回答を繰り返してきました.
現状,私のようにアマチュアレベルでゲームを作ろうと思ったら,下手に GPU 性能を 100 % 引きだそうと思わない方が良いのです.一度に描画するポリゴン数を用もなく増やしていったり,Geometry Instancing といったテクニックを駆使して GPU 性能を引き出すより,CPU 性能で可能な範囲だけ描画 API を呼び,その回数で描画できる範囲内でゲームを考える,というスタイルの方が多分健全なのでしょう.
個人的には Vista ではこういった状況が少しでも改善され,以前の Direct3D APIでも低バッチサイズのパフォーマンスが改善するというのを期待していたのですが,どうも風向きが怪しいなぁと.
User Mode Driver の恩恵が,D3D10 での API 変更とセット (つまりソース資産の破棄と再実装) によってのみ確認できるレベルの改善だとすれば,割と残念な話です.個人的に,雑誌等での検証記事でいま一番期待しているのはこの部分についてなんですがね.

--オーバーレイ対応のTVキャプチャのサポートはどうでしょうか

森 Vistaのデスクトップ画面自身がいわゆるオーバーレイ表示なので、残念ながらオーバーレイのみに対応したTVキャプチャはお使いいただけません。今後はVista対応のTVキャプチャが各メーカーより出荷されるので、そちらに期待していただきたいですね。

これはちょっと誤解を生みそう.「DWM とオーバーレイは両立しないので,DWM をオフにして改善するか確かめるか,今後増えて来るであろう Vista 対応のキャプチャボードを購入してください」という感じでしょうかね.