Adobe Reader 8 と Direct3D 描画
id:Kazzz さんのところより.
NVIDIA、GeForceでPDFファイルの2D表示を高速化〜Acrobat 8/Adobe Reader 8に対応
最新のAdobeReader 8では、なんとGDIではなくGPUのプログラマブルシェーダを使って、2Dアクセラレーションを可能としているらしい。
ちょっとワクワクしてきたので、実際に自宅のPCにAdobe Reader 8をインストールしてみた。今回の"GPU 2D アクセラレーション"はnVIDIA GeforceシリーズとAti Radeonシリーズで有効なので、自宅のPCでも、同記事のようにチェックボックスは設定できたが、実際にはPDF描画時の画質が目に見えて落ちるだけでスクロールやズームインの応答性が改善されることは無かった。Windows Vistaへの適用はまだ先ということなのだろう。
同じ記事を読んで私も昨日試してみたところです.Google Earth や iTunes のジャケット表示など,ゲーム以外でも徐々に Direct3D の利用が増えてきましたね.
んで,結果ですがこんな感じでした.
- ATI Mobility Radeon X1400 + Windows XP SP2
- アクセラレーションは可能.ただし何度か操作しているとブルースクリーンが発生
- ATI Mobility Radeon X1400 + Windows Vista
- アクセラレーションは可能.ただし何度か操作しているとAdobe Reader 8.0 がクラッシュ.(スタックトレースからは,ドライバ内ではなく,CoolType の処理中にクラッシュした模様)
- NVidia GeForce 6800 + Windows XP SP2
- 使用中の非 WHQL ドライバではアクセラレーション不可だった.ドライバ更新で使用可能に.
何となくデフォルトでオフなのも納得体験.
正直,使用感とか画質とかはすぐにはよく分かりませんでした.画質については,後から色々表示するファイルを変えてみると,"GPU 2D アクセラレーション" ON のときは CoolType (いわゆる ClearType) によるサブピクセル・レンダリングが使用できていないことに気付きました.以下,比較図.
実行環境は Windows Vista RTM (WPF Tier 2).上から,
- Adobe Reader 8.0 GPU 2D アクセラレーション ON
- Adobe Reader 8.0 GPU 2D アクセラレーション OFF
- XPS Viewer
となっています.
ちなみに表示しているのは『Sequential File Programming Patterns and Performance with .NET』という論文の一部.
まあ Adobe Reader 8.0 のこの機能がすぐに売りになるかどうかはちょっと微妙な気もします.実験材料としてはおもしろいので,開発者としては歓迎ですが.
んで,サブピクセルレンダリングの話ですが,数年前から GPU を利用した ClearType 描画を研究していた Microsoft と比較するのはちょっと酷かもしれません.Microsoft の場合,ClearType を露骨に意識した API とサーフェイスフォーマットを Direct3D に追加するなんて裏技も使っていますしねぇ.(非公開 API ではないですけど)
公約通りなら,XPS ビューアの ClearType はハードウェアベースのはずです.とはいえ,むちゃくちゃ軽くなったという実感があるほどのものでもないですが.差を見るには,数万文字から数十万文字のレンダリング時間を見てみるぐらいのことは必要かもしれません.
また,PIX for Windows で Adobe Reader 8 "GPU 2D アクセラレーション" ON 時の Direct3D 9 プロファイリングも調べてみました.WM_PAINT 発生時にのみ描画するタイプはログが少なくて楽ですね.
ざっと見た感じ,Adobe Reader は Vertex Shader / Pixel Shader ともに 2.0 しか使っていなくて,明確に Shader Model 3.0 を要求している部分を見つけることはできませんでした.ちょっと肩すかし.複数の Shader を使用していたので全てはチェックしていませんが,見た感じ Shader はアンチエイリアスに使用しているようでした.
まあこの辺りは文章読むより PIX for Windows で実際に試してみた方が何倍も楽しいと思うので,興味がある方は IF さんの記事を参考にチャレンジしてみてはいかがでしょうか?
http://www.t-pot.com/program/131_PIX/index.html
「GPU を利用したテキストレンダリング」については,以前日記で紹介した(id:NyaRuRu:20060301#p2) WinHEC 2004 のスライドと,WHDC サイトのホワイトペーパーが参考になります.わたしゃ本業じゃないのでウォッチしていませんが,もしかしたら論文等もでてるんじゃないかと思います.
単なるユーザーには関係ありませんが,3D 屋さんは是非一読をおすすめします.
以下妄想 ----
Vista以降、GDIがソフトウェアレンダリングしか出来ないのであれば、GDIの命令を今回のようにDirectXのShaderの命令にマッピングする新しい技術(API)が現れて、結局GDIも元々の性能を取り戻していくのではないだろうか。
妄想終り ----
いやー,それはきついんじゃないかと.蜜のように甘い響きではあるんですがね.WinFX 構想の「全ての API を .NET に!」と似たものがあります.目的が目的化するというか.
まあ目指すにしても GPU でやるより CPU に専用命令追加するとかコプロセッサを載っけるとかして,メインメモリ上で完結する仕組みを新しく作る方が健全なんじゃないかなと.あるいは NVidia の CUDA でも悪くはないでしょう.しかし,Direct3D だけはまずいというか,思想の段階で GDI とは性格が違いすぎかと思う次第です.