WPF と 3D

3D が WPF を殺す

『IT戦記』より.

そもそもWPFとは?WPFで何ができるのか? - 春日井良隆

飲み会の時にいらっしゃった竹内洋平様にもいろいろ教えていただきました。
最近はほとんどの作業がブラウザで済んでしまいますが、想定している使われかたは、どんなものがありますか?
  • 3D なコンテンツ
  • バリバリ 3D なゲームもぜんぜん作れる
WPF を自社でクロスプラットフォーム化することは考えていますか?
WPF に出来て Apollo に出来ないことはなんですか?
  • DirectX の機能をフルに使った描画性能
うーん,Vista のマーケティングでもそうでしたが,未だに WPF も 3D との抱き合わせ販売から逃れられませんか…… 以前も書きましたが,世間で思われているほどには,少なくともいわゆる 3D 系のプログラマが期待すべき程には,WPF は 3D が得意ではないと思ってよいでしょう.

また,この辺りは誤解の元になりそうなので予め書いておきますが,DWM や WPF は,最新の 3D ハードウェアの機能を 100 % 引き出すわけではない,と私は考えています.PIX for Windows で見た WPF の動作は,動的頂点バッファと大量のテクスチャによる力業の描画でした*2.アルゴリズム的には,10 年前のゲームで既に確立していたものをブルートフォース化したものと言えるでしょう*3.しかし,それでも今までに比べれば遙かにレスポンスタイムが向上し,スケーラビリティが改善する,というのが私にとっての Vista の意義です.

有名な WPF デモである『ドミノ軒』の開発日誌でも同様の指摘があります.

しかし、最初のテストの段階で、WPFの3Dコントロールの簡単さは、パフォーマンスとのトレードオフだという事実に突き当たります。ゲームで実現しているようは複雑な3D描画はほぼ不可能だと。

また,高橋さんと川西さんの執筆された『XAMLプログラミング WPFアプリケーションの概要と開発』も,変な期待を煽らないように配慮したあとが見えます.

しかし注意してほしいのは、WPFは高性能グラフィックス専用のAPIではなく、ユーザーインターフェイスを作成するためのAPIだということです。これは、WPFは高速な3Dゲームや高品位なビデオ再生アプリケーションを開発するためのものではないということを意味します。

XAMLプログラミング WPFアプリケーションの概要と開発

XAMLプログラミング WPFアプリケーションの概要と開発

WPF がリアルタイム 3D に向かない 10 の理由

一瞬そんなものを書いてみようかと思いましたが,3 つ以上の数を数えるのが面倒なのでまた今度. しかし WPF に限らず,最近世間向けに語られている「GPU の機能をフルに使う」ことと,実際に現場の開発者にとっての「GPU の機能をフルに使う」がどんどん乖離していることがどうも気になっています. (追記)いや,WPF 自体はリアルタイム (というか高 FPS なタイムライン的) 処理には向いていて,いまどきの GPU のフィルレートと巨大な VRAM を力業で振り回した結果 2D 処理との相性は抜群に良いです.ただ,3D の世界はまた別の最適化手法でスーパーサイヤ人化するのが当たり前なので,そういうのには向いてないですよと.

サーバサイドで WPF は使える?

結局のところ,サーバサイドな人が集まるならこんな感じの話でも十分立つ瀬はあるんじゃないでしょうかねぇ? ただまあスレッド絡み (STA 絡み) の問題はあるかも知れないので,その辺は要調査ですが. 以下適当にでっちあげた脳内 PowerPoint 箇条書き.

Web 時代の WPF の使い方

  1. Web は今までどおり.簡単な UI を提供して,とにかく参加してもらう
    • 入り口でいきなり WPF を使う必要なんてまったく無い
    • コンテンツは提供してもらう.パラサイト上等.
    • Web API によるマッシュアップ
  2. 集めたコンテンツに対して WPF でできることはないか?
    • サーバサイドでの画像生成 *1
      • 技術系日記にはもっと湯水のようにイラストを入れたい,というか入れるべき.
      • XPS,PDF,PNG 等での可視化・ダウンロードサービス
    • ブラウザによるホスト
      • 動画のサポートはなにげに役立つかも?
        • WPF を使えば,例えば動画に文字を重ねたり*3,自由に描き込んだり*4できる (はず).
    • サーバサイドでの XAML 生成.
      • XAML の手書きに快感を覚える変態 (褒め言葉) はごく一部.
      • そもそも今の HTML ってほとんど自動生成だし.
  3. みんなでこっそり使っていれば,そのうち根付くかもしれない
とまあこんな感じでアウトラインを書くと,それが裏で WPF によって処理され PowerPoint 風のコンテンツになって出てくるとか.(というメタな例)

おまけ

とりあえず『InputMan for WPF デモンストレーション (ClickOnce)』みたいなのから,まったり行くのがいいんじゃないかなと. 結構おもしろいのでおすすめ. http://www.grapecity.com/japan/demo/wpf/

*1:これだとクライアントにランタイムは不要.

*2:劣化 TeX

*3:流行への安易な追従

*4:折角タブレットサポートがあるので.安易な脳開発ものも可