englishjapanesefrench
http://akihiko.shirai.as

[Shortcuts]

メインメニュー

blog[RDF]

検索

Recent Documents

新着ダウンロード

ログイン

ユーザ名:

パスワード:


パスワード紛失

新規登録

オンライン状況

2 人のユーザが現在オンラインです。 (1 人のユーザが documents (wiki) を参照しています。)

登録ユーザ: 0
ゲスト: 2

もっと...

アクセスカウンタ

今日 :4040
昨日 :103103103
今週 :444444444
今月 :3521535215352153521535215
総計 :1947076194707619470761947076194707619470761947076
平均 :457457457
taquino.net


Top / DirectX

Documents > Development? > Programming > DirectX

DirectX

mixiのDirectXコミュで「DirectXって何ですか?」というトピックがあったのに、全く的を得た回答をしている人がいなかったので、ちゃんと書いてみようと思いました。



このページはDirectX関係のプログラミングに関するメモ。はっきりいって一般の人の使い方と全然違うので、役立つかどうかは貴方次第。


概要

DirectXは(旧来の手法に比べて)ゲーム向きの2Dグラフィックスや3D、サウンドや通信を高速に制御する手法を提供しています。

インストールするべきものはSDKとランタイムがあり、遊ぶだけ、使うだけの人はランタイムだけでかまいません。

またWindowsXPなどには最初からDirectX8がインストールされていますので、それをつかっているWindowsMediaPlayer?などは皆が気がつかないうちに使っているというわけです。

3DシューティングゲームなどはDirectX9など最新のランタイムが必要ですが、その場合は起動時にエラーが出ます。

「インストールすると速くなる」というのはATIやnVIDIAが提供するビデオカードのドライバー類のことです。最新のDirectXが出るとそれに合わせたドライバーがダウンロードで提供されます。

MayaやMaxでも速くなることは速くなりますが、多くの場合、レンダリングはCPUを使っていますので、マウスで操作するときだけDirectXという場合も多くあります。よって最終的なレンダリング速度が飛躍的に高くなるということではありません(もちろん、VRAMが多くなったりして、ないよりはよいです)。

DirectXのコミュなので、ちょっとだけ深い話をしますが、これは多くのモデラーが各々独自のソフトウェアレンダラーを使っているからだと思われます。同じアルゴリズムをDirectXに移植できれば速くなるのですが、リアルタイム用のハードウェアレンダリングは、メモリや速度に制限されないソフトウェアレンダリングのアルゴリズムとは設計思想が一致しないこともあり、また各ハードウェアで対応している機能に違いがあるのでなかなかうまくいきません。

DirectXで恩恵を受ける、もしくは違いを目で見て取れるモデラー環境としては「Metasequoia」(フリーソフト)が挙げられます。 http://www.metaseq.net/metaseq/index.html

歴代DirectXの機能の変遷

うろ覚え箇所あり。修正指摘希望。

DirectX

WinGとGDIに代わる、VRAMをAPI経由で「直接(Direct)制御」することを目的としたDirectShowを中心としたAPI群だった。「X」というのはDirect〜の後ろにDraw、Sound、Imputといったものがくるという意味でXだったはず。

DirectX2

OpenGL.DLLがWinNT4.0に配布され、3DグラフィックスがWindowsプラットフォームで実現可能になった。 DirectX2でも3Dグラフィックスが扱えるようになったが、時代はGWS+OpenGLであり、あまり注目されてはいなかった。

このバージョンでDirectX3Dが実装されており、イミディエイトモード(IM)とお任せモードであるリテインドモード(RM)があったようだ。

DirectX3

時代はWin3.1からWindows95に移行した直後で、DirectXの知名度はそれほど高くはなかったが、確実にユーザ数は増えていた。

DirectX4

DirectX4は存在しないが、この間にRenderWare?などが候補に上がっていたらしい。運命の分かれ道である。

DirectX5

1997年頃。DirectXが3Dグラフィックス用APIとして一躍有名になったバージョン。日本語ドキュメントも初めて翻訳された。日本国内でもDirectX Meltdownイベントなどが開催され一気に知名度が上がる。この頃はDirectXを使う、野武士プログラマが多く、非常に楽しかった時期でもある。

動的な頂点と直接制御のライティングをサポートするIMと、当時業界最大かつマイクロソフトグループだったSoftimageから書き出し可能なXファイルで構築可能な使いやすいRMが両方あり、パフォーマンスや映像クオリティ、プログラミング難易度が大きく違っていた。

Direct3D の描画コマンドはOpenGLを意識してBegin/End、DrawPrimitive?DrawIndexedPrimitive?が追加された。

ハードウェアによるアクセラレーションもこのころからの流行である。

Dreamcastプラットフォーム用WindowsCEにも採用されているが、ほとんどのタイトルがWindowsCEそのものを採用していない(知っている限りでは国産タイトルはハドソンの「北へ。」しかない)。しかしSEGAのDC開発環境にはDirectXのAPIプログラミング手法はかなり生かされており、追従するPS2時代のAPIプログラミング環境とは大きく異なっていることを記しておく。

DirectX6

1998-99年頃。DirectX6.1でDirectMusic?等のMIDI機能が一気に増えて、APIも整理された。3DはVertexBuffer?(頂点バッファ)がサポートされた。しかし多くの新機能はCPU側での処理。

DirectX7

3DはハードウェアT&L(Transforming &Ligting=変形処理及び光源処理)をサポートした。これによりGeForece2以降のサポートハードウェアでは動的頂点などのハードウェアアクセラレーションでポリゴン数が多いモデルなどで劇的なパフォーマンスを見せるようになり、ハードウェアはポリゴン数を誇るのが潮流になった。 実際にはT&Lは人物などのリアルタイムスキンデフォメーションやフェイス(顔面)アニメーションに有効な技術であったといえる。動的ライティングの高速化により、FPS(一人称視点シューティングゲーム)の画質も一気に向上した。

DirectX8

大きな変化を遂げたバージョン。PlayStation2のエモーションエンジン(EE)とグラフィックスシンセサイザ(GS)の登場により、マルチコアハードウェア側でグラフィックス処理を行なう方式が脚光を浴びる。グラフィックスプロセッサ(GPU)という言葉もこのあたりから浸透し始める。

また、トゥーンシェーダーや様々なレンダリングエフェクト、スキン&ボーンなどの動的頂点をリアルタイムグラフィックスに実装するのが流行ったおかげで、DirectXにもさまざまなハードウェア処理が求められるようになる。DirectX7でもアセンブラにより特殊なレンダリングが実現できたが、基本的には固定パイプラインであり、DirectX8世代のハードウェアではカスタマイズ可能なパイプラインが採用されたが、さらに柔軟なAPI提供が求められていた。動的頂点に寄与する「頂点シェーダー」と、テクスチャやラスタライズに寄与する「ピクセルシェーダー」という形でカスタムパイプラインが利用できるようになった。

ちょうどこの頃、マイクロソフトはXBoxをラウンチ直前でありDirectX8は大きな機能強化というよりも、DirectXで育てたAPI技術を100%生かせるようなハードウェアプラットフォームとしてのXBOXを立ち上げたに過ぎない、という表現もできる。

実際のところ、PCのように個々人の予算環境などでハードウェア環境が星の数ほどありえるプラットフォームでは、アプリケーション開発者、特に日本のゲーム市場のように品質にうるさいユーザ&開発者を相手では浸透が難しい、というのは事実といえるだろう。その分、ハイパフォーマンス&固定のプラットフォームが提供できるXBOXはPCゲーム開発者にとっては安楽の土地であったと言えるかもしれない。

DirectX8.0,8.0a,8.1とあるが、WindowsXPにはDirectX8.1のランタイムDLLが標準添付されており、最も利用者人口の多いDirectXと言っても過言ではないのではないだろうか。

このバージョンで、当初、「グラフィックスハードウェアを直接制御する」目的であったDirectXはDirectDraw?を完全に整理し、DirectGraphics?となった。

DirectX9

DirectX8まではアセンブラで書いたマイクロコードをGPUに送りつける必要があったが、DirectX9から上位シェーダー言語HLSL (High Level Shader Language)がサポートされた。上位というのはプログラミングが難しい、という意味ではなく、ハードウェア層から数えた「上位」の言語でプログラミングできる言語という意味。C言語に近い(C++言語ではない)記述のテキストファイルを書き、実行時に実装ハードウェアとAPIバージョンに合わせたマイクロコードにコンパイルしてGPU側に送られる。

なお同様の言語環境をnVIDIAはCgとして提供している。言語仕様はHLSLに非常に近いが、OpenGLと各社モデラーとの親和性を重視している。

DirectX9は息が長く、2002年の登場から、SummerUpdate2003、SummerUpdate2004、OctoberUpdate2004、DecemberUpdate2004、FebraryUpdate2005、AprilUpdate2005、JuneUpdate2005、AugustUpdate2005、October2005、DecemberUpdate2005などほぼ3-4ヵ月毎の更新を行なっている(ランタイムもDirectX9cなどバージョンが上がっているが、ユーザ側は一度MediaPlayer?などのためにDirectX9をインストールしていればWindowsUpdate?で自動更新されているはずである)。

対応シェーダモデルはShader2.0〜3.0であるが、短期間に行なわれたSDKの激しいアップデートについていけなくなった一般開発者も多いと思われる。DirectShowは一部のソースが公開され、サポート外になった。他にもD3DではRMと固定機能レンダリングがなくなったり、と整理されたものは多い。

DirectX10

WindowsXPの次期OSとなるWindowsVista?(コードネームLonghorn)においてプラットフォームは長年使われてきたWin32APIからWinFXというAPIに代わりWindows Presentation Foundation(WPF)というフレームワークでデスクトップGUIやグラフィックスプログラムを書くことになる。そこで、旧来のDirectXは今までのような「ゲーム用APIとドライバ・ミドルウェア」という位置づけからOSのインフラ、エクスペリエンス(体験)を実現する存在に大きく生まれ変わることになる。

SDKはMSDN内には既に公開されており(2006年2月現在)、WindowsVista?には標準搭載されるバージョンであるが、技術的な革新が大きく、どのように移行するのかについては話題が尽きない。LinksにあるGDNやMSエバンジェリスト、マネージドコード関連の情報を追ったほうがよい。


Links


Notice

このドキュメントは無保証です。また間違いも沢山あると思います。応援・ご指摘はお気軽にお寄せください。


Comment Please!

Show recent 10 comments. Go to the comment page.

  • DirectXの項、WinXはWinGのことかな?と思いました。 -- guest? 2006-03-15 14:35:07 (水)
  • おお、ご指摘有難うございます。覚え違いでした。通りで検索しても見つからないはずだ…。 -- aki? 2006-03-15 19:28:03 (水)
Name:

#Page created at 2005-12-08 01:32:46

Counter: 1270, today: 1, yesterday: 1

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Counter: 1270, today: 1, yesterday: 1
Last-modified: Sat, 09 Sep 2006 10:08:06 GMT (4056d)
Powered by XOOPS Cube The XOOPS Project / all rights are reserved by Akihiko Shirai / XOOPS Cube
Theme Designed by OCEAN-NET