連載初回である前回は,マイクロソフトのリッチ・クライアント技術について概観を説明しました。いよいよ今回から,個々の技術について解説していきましょう。まずは,Vistaの目玉機能の一つである「Windows Presentation Foundation (以下,WPF)」からです。WPFは名前の通り,プレゼンテーション機能に特化したテクノロジーであり,まさにユーザー・エクスペリエンスを実現するために最適なテクノロジーです。

WPFの主な機能

 WPFは,Windows Vistaが搭載するアプリケーション開発・実行環境「.NET Framework 3.0」が備える機能の一つで(図1),高度なユーザー・インタフェースを実現するためのグラフィックサブシステムです(*1)。Flashと同様に,画像,動画,音楽を同時に扱うリッチ・コンテンツの再生を行うことが可能です。さらに,ベクターデータの3Dオブジェクトや,動画の加工描画,オブジェクトの透過などの処理が容易になります。WPFアプリケーションそのものは.NET Framework 3.0 がインストールされていれば実行可能であるため,Windows XPでも動作可能です。

図1 Windows Vistaのアーキテクチャ

 WPFはComposition Engineで各種メディアやベクターデータをネイティブに扱えるほか,Desktop Windows ManagerやDirectXなどハードウエアに近い技術と連携できるので,Windows Vistaの能力を最大限に発揮させることができます。

 さらに,レンダリングにグラフィック (特に3Dグラフィック) を高速化するために開発されたプロセサである「GPU (Graphics Processing Unit)」を利用します。GPUはグラフィックデバイス上に実装されており,グラフィックに関する処理はCPU (Central Processing Unit) を利用する場合に比べて圧倒的に高速になります(ただし,GPUが利用できない場合は,CPUを使用してレンダリングを行います)。比較でよく引き合いに出されるFlashなどはCPUで動作しているため,どうしてもレンダリングのためにCPUに負荷がかかります。

 WPFは,XMLベースのユーザー・インタフェース記述言語「XAML (Extensible Application Markup Language:ザムル) 」や,プラットフォームに依存しない汎用ドキュメント「XPS (XML Paper Specification)ドキュメント」(*2)などの新しい技術をサポートします(図2)。

図2 Windows Presentation Foundation アーキテクチャ

 WPFのアプリケーションは,ロジック部分はC#,Visual Basic .NETなどCLR(Common Language Runtime)上で実行されるプログラミング言語を使用して作成し,ユーザー・インタフェース部分にはXMLベースの記述言語であるXAMLを使用して記述します。ユーザー・インタフェース部分とロジック部分を分離して記述できるので,開発者とデザイナの分業が可能になります。また,WPFはDirect3Dを使って開発するのに比べ,非常に短時間で作成できるのも特徴です。

 WPFにはユーザー・インタフェースを実装するためにButton,TextBox,ComboBox,Menuなど多くのユーザー・コントロールが提供されています。これらのコントロールは,拡大・縮小,回転,アニメーションなどスタイルを自在に設定できます。これらの基本的なユーザー・インタフェース機能に加えて,WPFは以下のような機能も備えています(表1)。

表1:WPFが備える機能
ドキュメントXPSドキュメントやフロー・ドキュメントを表示できます。また,属性を指定することで,1ページの表示ページ数を指定したり,ウィンドウ・サイズに合わせてドキュメントの段組みを自動的に選択するなど環境に応じたドキュメントを表示することが可能です
グラフィックス2D (図形,ブラシ,ペンなど) や3D (光源やカメラ位置情報の割り当てなど) のベクター・グラフィックを作成できます。グラフィック処理をGDI+など別のテクノロジーに任せていたWindowsフォームなどの従来のテクノロジーとは異なり,WPFに含まれているため,他のWPFユーザー・コントロールと組み合わせて使用できます
イメージJPEGやGIFなど多様な形式のイメージを表示できます。WPFは,Windows Imaging Component (WIC) を使用して,コーデック(イメージを表示および格納するソフトウエア)の標準フレームワークを提供します。このコントロールも他のWPFユーザー・コントロールと組み合わせて使用できます
メディアWMV,AVI,MPEGなど多様な形式のビデオやオーディオを表示できます。このコントロールも他のWPFユーザー・コントロールと組み合わせて使用できます
アニメーションタイムラインを含むストーリーボードを定義することで,ほとんどの場所でアニメーションを連動させられます
データバインディングオブジェクトや他のデータソースに対してマッピングするデータバインディングを実行できます。また,データを表示する前にソートしたり,フィルタリングしたりできます

WPFで出来ないこと

 WPFは.NET FrameworkとDirect3Dをベースとしているグラフィックサブシステムですが,あくまでユーザー・インタフェースを作成するためのフレームワークです。高速な3Dゲームや高品質なビデオ再生アプリケーションを開発するためのフレームワークではありません。

 そのため,インタラクティブなユーザー・インタフェースを作成するためのコンポーネントが提供されておりますが,Direct3Dを直接扱うことはできません。それに伴って以下のような制約があります(表2)。

表2:WPFの制約
パフォーマンスハードを直接扱うDirect3Dと違って,WPFはソフト部分を扱うため,対象とするレイヤが異なります。そのため,Direct3Dと比べるとオーバーヘッドがあり,Direct3Dよりはアプリケーションの実行に要する負荷が高くなります。また,WPFはDirectX 9 対応ですので,DirectX 10対応のグラフィックボードであってもパフォーマンスが向上するということはありません
シェーダWPFは内部的にシェーダを使用していますが,開発者がWPFからシェーダを使用することはできません。そのため,頂点単位やピクセル単位の制御やトゥーンレンダリングができません
スキニングWPFではスキニングができませんので,滑らかな関節を持つアニメーションはできません。サポートするのは剛体アニメーションのみです
環境マッピングWPFではキューブ環境マッピングも球状環境マッピングも使用できませんので,物体に周囲の景色が反射しているような効果は表現できません
リアルな影を生成するにはシャドウ・ボリュームやシャドウ・マッピングなどを使用する必要がありますが,WPFではステンシル・バッファやシェーダを使用できないため,生成できません
テクスチャフィルタリングポリゴンにテクスチャをマッピングする際に視点の関係で,ポリゴンを構成するピクセルにテクセルが一対一に対応することはほとんどありません。そのため,マッピングする際にはテクスチャを拡大/縮小してり,変形したりするフィルタが必要となりますが,WPFからフィルタを指定することはできません