コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
Direct3Dのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Direct3D
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''Direct3D'''は、[[3次元コンピュータグラフィックス|3Dグラフィックス]]を描画するための[[アプリケーションプログラミングインタフェース|API]]である。[[マイクロソフト]]の[[DirectX]]の一部であり、様々な[[Microsoft Windows|Windows]](主に[[Microsoft Windows 95|Windows 95]]以上)で動作し、さらに、家庭用ゲーム機である[[Xbox]]、[[Xbox 360]]および[[Xbox One]]のグラフィックAPIのベースでもある。 == 概要 == Direct3Dはゲームのようなパフォーマンスが重要なアプリケーションで利用される。そのためもあり、ウィンドウ表示だけでなく全画面表示での実行も可能となっている。可能ならグラフィックボードの[[ハードウェアアクセラレーション]]を利用し、3Dのレンダリングパイプラインの全体または一部がハードウェアによって高速化される。Direct3Dは[[Zバッファ]]、[[アンチエイリアス]]、[[アルファチャンネル]]、[[ミップマップ]]、atmospheric effects、パースペクティブコレクト[[テクスチャマッピング]]といった3Dグラフィックハードウェアの先進的なグラフィック能力を表現する。他のDirectXのテクノロジとの統合により、インタラクティブなメディアタイトルで2Dと3Dを用いて、ビデオマッピング、2Dの[[オーバーレイ]]プレーンへのハードウェア3Dレンダリング、[[スプライト (映像技術)|スプライト]]といったような機能をDirect3Dは実行できる。 Direct3Dは[[3次元コンピュータグラフィックス|3D]] APIである。つまり、3Dレンダリングのための様々なコマンドが含まれるということであるが、Direct3Dのバージョン8より、古い[[DirectDraw]]のフレームワークと置き換えられ、また[[2次元コンピュータグラフィックス|2Dグラフィックス]]の機能も引き継いでいる<ref>[http://msdn.microsoft.com/directx/sdk/readmepage/default.aspx Microsoft DirectX SDK Readme (October 2006)] {{リンク切れ|date=2013年12月}}</ref>[http://msdn.microsoft.com/ja-jp/library/dd148689.aspx]。マイクロソフトは3Dグラフィックカードで利用できる最新のテクノロジをサポートすべくDirect3Dを継続して更新し続けている。Direct3Dは完全な頂点処理のソフトウェアエミュレーションを提供するが、ハードウェアがサポートしていないピクセル処理のソフトウェアエミュレーションはない。例えば、もしDirect3Dを使ってプログラムされたソフトウェアが[[ピクセルシェーダ]]を必要として、そしてユーザーのコンピュータのビデオカードがその機能をサポートしないなら、Direct3Dはそれを[[エミュレータ|エミュレート]]しない。代わりに、APIは一般的なグラフィックカードをCPUで完全エミュレートするリファレンスラスタライザ(またはREFデバイス)を定義する。ただし、[[ピクセルシェーダ]]をCPUでエミュレーションするのはどんなアプリケーションでも使用に耐えないくらい遅く、製品版アプリケーションでの使用は想定されていない[http://msdn.microsoft.com/ja-jp/library/ee417659.aspx]。一方、Direct3D 10.1 API以降は比較的高速なソフトウェアWARPデバイスが実装されており、グラフィックスハードウェアがDirect3Dの機能レベルを十分にサポートしない場合でもカジュアルな用途であれば実用に耐えうるDirect3Dアプリケーションを作成・実行できる[http://msdn.microsoft.com/en-us/library/windows/desktop/gg615082.aspx]。 Direct3Dの主な競合相手は[[OpenGL]]である。2つのAPIには考え方の合わない数多くの機能と問題がある。[[:en:comparison of Direct3D and OpenGL]]を参照のこと。[[Wine]]では、[[Unix系]]OSでDirect3Dを[[OpenGL]]を用いて実装している。 == アーキテクチャ == [[ファイル:D3D Abstract Layer (en).png|thumb|right|185px|抽象レイヤ]] Direct3DはMicrosoftの[[DirectX]] APIのサブシステムコンポーネントである。グラフィックスアプリケーションとグラフィックハードウェアデバイスの間の通信を抽象化することがDirect3Dの目的である。これは[[Graphics Device Interface|GDI]]と比較して薄い抽象化レイヤとなっている(図参照)。[[Component Object Model|COM]]ベースのアーキテクチャによりDirect3Dはディスプレイドライバと直接接続しており、GDIと比べてレンダリングのパフォーマンスで優れた結果を得られるところがGDIとDirect3Dの最も大きな違いである。なお、図は[[Windows XP]]/Direct3D 9までの古いモデル(XPDM)であり、[[Windows Vista]]/Direct3D 9Ex以降ではさらにDirectX/Direct3DがOSのグラフィックス根幹機能へと昇格され、GDIはすでにDirectX/Direct3Dと並列ではなくなり、DirectXランタイム([[DirectX Graphics Infrastructure|DXGI]]と呼ばれるDirect3Dベースのグラフィックス基盤)上にて動作することになる([[Windows Display Driver Model|WDDM]])[http://msdn.microsoft.com/ja-jp/library/bb173477.aspx]。 Direct3Dは''イミディエイトモード'' (IM: 直接モード) のグラフィックAPIである。これは各ビデオカードの3D機能(''[[平行移動]]''、''クリッピング''、''光源''、''マテリアル''、''テクスチャ''、''[[Zバッファ|深度バッファ]]''など)に低レベルなインターフェイスを提供する。また現在では廃止されている''リテインドモード'' (RM: 保持モード)という高レベルのコンポーネントもあった。 Direct3Dのイミディエイトモードは「デバイス」、「リソース」、「スワップチェイン」の3つの主要な抽象化を提供する(図参照)。「デバイス」は描画に必要な処理を行うソフトウェア・ハードウェアを指す概念であり、アプリケーションは「デバイスタイプ」を指定することにより、デバイスにアクセスすることができる。 ;'''HAL''' (''hardware abstract layer'')デバイス : ユーザーのコンピュータに搭載されたハードウェアアクセラレータを使用して処理を行う。ハードウェアアクセラレーションをサポートする場合、Direct3Dのコードはハードウェアの速度で動作可能。[[ファイル:D3D Device (en).png|thumb|right|190px|デバイス]] ;リファレンスデバイス : Direct3Dのほとんどの機能を忠実に実装しているが、パフォーマンスが非常に低いソフトウェアレンダラーを選択する。このデバイスタイプを利用するためにはDirect3Dの[[ソフトウェア開発キット|SDK]]を事前にインストールする必要がある。 ;ヌルリファレンスデバイス :これは何もせず真っ暗な画面を表示する。このデバイスはSDKがインストールされていないのにリファレンスデバイスが要求された場合に使用される。 ;プラグ可能ソフトウェアデバイス :ソフトウェアラスタライゼーションを実行するために利用される。ソフトウェアレンダラーはDirect3Dには内蔵されていないため、アプリケーションはこれを選択するには独自のソフトウェアレンダラーをDirect3Dに登録する必要がある[http://msdn.microsoft.com/ja-jp/library/ee421620.aspx]。マイクロソフトが公式にソフトウェアレンダラーを配布している<ref>{{cite web |url=http://www.microsoft.com/downloads/details.aspx?FamilyID=57d03491-6c49-4429-bff7-130408b5f410&DisplayLang=en |title=Software Rasterizer for DirectX 9.0 SDK|accessdate=2008-05-04 }} {{リンク切れ|date=2013年10月}}</ref>。 各デバイスは最低1つの''スワップチェイン''を含む。''スワップチェイン''は1つ以上のバック[[バッファ]]サーフェス(ピクセルデータの長方形の集合と、そのピクセルの色、深さ、ステンシル、アルファ、テクスチャなどの属性)で構成される。バックバッファのどこかにレンダリングされる。 さらにデバイスもまた''リソース''のコレクションを含む。''リソース''はレンダリング中に使用される特定のデータである。各リソースは4つの属性を持つ。 ;Type :サーフェス、ボリューム、テクスチャ、キューブテクスチャ、ボリュームテクスチャ、サーフェステクスチャ、インデックスバッファ、バーテックスバッファなど、リソースの種類を定義する。 ;Pool<ref>{{cite web |url=http://www.toymaker.info/Games/html/d3d_resources.html#MemoryPool |title=Direct3D Resources - [[Memory pool]]|accessdate=2008-05-04 }}</ref> :実行時にリソースがどのように管理され、どこに保存されるのかを定義する。'''Default'''プールはリソースがデバイスメモリ内にのみ存在することを意味している。'''Managed'''プールはリソースがシステムメモリに確保され必要時にデバイスへ送られることを意味している。'''System Memory'''プールはリソースがシステムメモリ内にのみ存在することを意味している。'''Scratch'''プールはシステムメモリプールと同一であるが、この場合はリソースがハードウェアの制約に縛られない。 ;Format :リソースのメモリ内でのレイアウト、主にピクセルデータのレイアウトを定義する。例えば''D3DFMT_R8G8B8''フォーマットは24ビットの[[色深度]]を意味する(赤8bit、緑8bit、青8bit)。 ;Usage:[[フラグ (コンピュータ)|フラグ]]ビットの集合によりアプリケーションがリソースをどのように使うのかを定義する。これらのフラグはリソースを動的にアクセスするのか静的にアクセスするのかを知るために利用される。静的リソースの値はロード後に変更できないのに対し、動的リソースの値は繰り返し変更することができる。 == パイプライン == [[ファイル:D3D Pipeline.svg|thumb|right|185px|グラフィック・パイプライン・プロセス]] Direct3D 10のパイプライン<ref>{{cite web |url=http://www.xmission.com/~legalize/book/preview/poster/pipeline-9.0.png |title=Direct3D 9.0 パイプラインの図|accessdate=2008-05-04 }}</ref>は下記のステージで構成される <ref>{{ cite web |url=http://msdn2.microsoft.com/en-us/library/bb205123.aspx |title=Direct3D 10 パイプラインのステージ|accessdate=2008-05-04 }} </ref>。 #'''インプット・アセンブラ''': パイプラインにデータを提供する。 #'''[[バーテックスシェーダ|バーテックスシェーダー]]''': 行列演算、スキニング、頂点ライティングといった単一の頂点処理を実行する。頂点シェーダーとも呼ばれる。 #'''[[ジオメトリシェーダ|ジオメトリシェーダー]]''': 頂点シェーダーの出力である、プリミティブ全体(三角形、直線または頂点)を処理する。それらのエッジ調整プリミティブを処理することもある。プリミティブが与えられ、このステージでこれを取り除いたり新しいプリミティブを生成したりする。 #'''ストリーム・アウトプット''': 前のステージの結果をメモリに保存する。データをリサイクルしてパイプラインに戻すことは有用である。 #'''ラスタライザー''': プリミティブをピクセルにラスタライズし、見えないところはクリッピングする。 #'''[[ピクセルシェーダ|ピクセルシェーダー]]''': ラスタライザーの出力、すなわち各ピクセルの色などを制御・決定する。ライティングをこのピクセルシェーダーで行なうこともある([[:en:Per-pixel lighting]]、ピクセル単位ライティング)。 #'''アウトプット・マージャー''': 最終結果を生成するために様々な形式の出力データ([[ピクセルシェーダ|ピクセルシェーダー]]やデプス、ステンシル等)を合成する。 全てのパイプラインステージは自由に組み合わせることができる。 <br style="clear:both;"> == 例 == *Direct3D 7(固定機能)で三角形を描画する例。 <source lang="cpp"> // 3頂点のポリゴンを表す頂点配列を定義。 D3DLVERTEX v[3]; // 頂点定義 v[0]=D3DLVERTEX(D3DVECTOR(0.0f, 5.0f, 10.0f), 0x00FF0000, 0, 0, 0); // 頂点定義 v[1]=D3DLVERTEX(D3DVECTOR(0.0f, 5.0f, 10.0f), 0x0000FF00, 0, 0, 0); // 頂点定義 v[2]=D3DLVERTEX(D3DVECTOR(0.0f, 5.0f, 10.0f), 0x000000FF, 0, 0, 0); // 三角形を描画するメソッドの呼び出し。 // pDevice は IDirect3DDevice7 インターフェイスへのポインタ。 pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, v, 3, 0); </source> *Direct3D 9(固定機能)で三角形を描画する例。 <source lang="cpp"> // ひとつのカスタム頂点情報を表す構造体。 struct MyLVertex { D3DXVECTOR3 Position; // float x3 D3DCOLOR Color; // unsigned long x1 }; // 3頂点のポリゴンを表す頂点配列を定義。 const MyLVertex pVertexArray[] = { D3DXVECTOR3(0.0f, +1.0f, 0.5f), D3DCOLOR_ARGB(255, 255, 0, 0), D3DXVECTOR3(+1.0f, 0.0f, 0.5f), D3DCOLOR_ARGB(255, 0, 255, 0), D3DXVECTOR3(-1.0f, 0.0f, 0.5f), D3DCOLOR_ARGB(255, 0, 0, 255), }; // 三角形を描画するメソッドの呼び出し。 // pD3DDevice は IDirect3DDevice9 インターフェイスへのポインタ。 pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE); // FVF = Flexible Vertex Format の設定。 pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, pVertexArray, sizeof(MyLVertex)); </source> *プログラマブルシェーダーに関して Direct3D 9のプログラマブルシェーダーを利用する場合は、上記の固定機能シェーダーを利用した方法は使用できず、[[HLSL]]言語等を使いシェーダープログラムを別途作成してデバイスにセットする必要がある。ただし、Direct3D 9の場合は、プログラマブル頂点シェーダーと固定機能ピクセルシェーダーを組み合わせることも可能である。 また、Direct3D 10およびDirect3D 11においてはFVF、ユーザーポインタ頂点配列(UP)および固定機能シェーダーが存在しないので、必ず頂点レイアウト、頂点バッファおよびシェーダープログラムを作成する必要がある(シーンを描画するためには少なくとも頂点シェーダーとピクセルシェーダーの2つを作成する必要があるが、深度ステンシルのみのレンダリングであればラスタライザーを無効にして頂点シェーダーだけでレンダリングすることもできる[http://msdn.microsoft.com/ja-jp/library/ee415718.aspx])。 == ディスプレイモード == Direct3Dは2つの異なるディスプレイモードがある。 ;エクスクルーシブモード(排他モード) :Direct3Dとディスプレイドライバを直接接続するため、Direct3Dデバイスは全画面表示が可能である。アプリケーションがエクスクルーシブモードである間はディスプレイデバイスの使用要求は失敗する。 ;ウィンドウモード :ウィンドウ内の領域に結果が表示される。Direct3Dは画面を完成させるために[[Graphics Device Interface|GDI]]と通信する必要がある。 ウィンドウモードはエクスクルーシブモードよりも若干遅いが、画面を占有しないためその他のGUIと共存させることが可能なほか、外部GUIを必要としない場合においてもデバッグに役立つ。 == 変遷 == ;Direct3D (DirectX3~DirectX5) :レンダリングパイプラインアーキテクチャを採用し、ハードウエア抽象化レイヤー(HAL)とハードウェアエミュレーションレイヤー(HEL)の二種類のレイヤーを持ち、ハードウエア支援が得られない場合もソフトウエアのエミュレーションによって機能するよう設計された。この当時のハードウエアはレンダリングパイプラインのうち、ラスタライズのみがハードウエア化されていた。 ;Direct3D 6.0 :[[ドリームキャスト]]にも採用されたバージョンで、環境バンプマップやトライリニアフィルタリング、ミップマップ、テクスチャ圧縮などをサポートしていた。 ;Direct3D 7.0 :ハードウエアによる座標変換とライティングを行うハードウェアT&L、一枚のポリゴンに複数のテクスチャを同時に貼るマルチテクスチャやキューブマップをサポートした。 ;Direct3D 8.0 :[[Xbox]]などに採用されたバージョンで、原始的なプログラマブルシェーダー(アセンブラ)を初めてサポートした。その他にも、ボリュームテクスチャ、マルチサンプルレンダリングをサポート。リファレンスラスタライザ以外のソフトウェアレンダラを廃止。 ;Direct3D 8.1 :[[Windows XP]]に標準搭載されている。プログラマブルシェーダー1.1、1.2、1.3、および1.4をサポートする。 ;Direct3D 9.0 :浮動小数点実数テクスチャ、およびプログラマブルシェーダー2.0をサポートした。また、プログラマブルシェーダーを記述するための高級言語「[[HLSL]]」に対応した。 ;Direct3D 9.0c :プログラマブルシェーダー3.0をサポートした。プログラマブルシェーダー3.0は、頂点シェーダーからテクスチャマップにアクセス(VTF)することができるため、ディスプレースメントマッピングなどが実現できる。[[Xbox 360]] GPUの機能はほぼこのバージョンに準ずる。 ;Direct3D 9.0Ex :[[Microsoft Windows Vista|Windows Vista]]以降に搭載された、[[Windows Display Driver Model]] (WDDM) に対応するように変更が施されたバージョン。Vistaのデスクトップ描画(Windows Aero)にはこのD3D 9Exが使用されている。 ;Direct3D 10.0 :共通層であるDirectX グラフィックス インフラストラクチャー(DXGI)を導入したバージョン。Windows Vista以降で動作する。ジオメトリシェーダーなどプログラマブルシェーダー4.0をサポートする一方、固定機能シェーダーおよびCaps(Capabilities)ビットなどを廃止し、またDirect3D 10非対応のハードウェア上では動作しない。 ;Direct3D 10.1 :Direct3D 10.0のマイナーチェンジ。Windows Vista SP1以降で動作する。CapsビットがFeature Levelの形で限定的に復活し、ハードウェアの対応度に応じたFeature Levelで動作させることができる。プログラマブルシェーダー4.1をサポートする。DXGI 1.1に対応した[[Microsoft Windows 7|Windows 7]]のデスクトップ描画にはこのD3D 10.1が使用されている[http://ascii.jp/elem/000/000/438/438414/]。なお、Windows 7に標準搭載されている高速2D描画APIである[[Direct2D]]は、このD3D 10.1上に構築された高レベルラッパーライブラリである。 ;Direct3D 11.0 :Windows Vista SP2およびWindows 7以降で動作する。DXGIのバージョンは1.1となる[http://msdn.microsoft.com/ja-jp/library/ee417025.aspx]。プログラマブルシェーダー5.0をサポートし、頂点シェーダーとジオメトリシェーダーの間に、ハードウェア[[テッセレーション]]([[細分割曲面|サブディビジョンサーフェイス]])を実現するステージとして、新たにハルシェーダー・テッセレータ・ドメインシェーダーが追加されている。また、[[GPGPU]]用途のシェーダーステージとして、コンピュートシェーダー([[DirectCompute]])が追加されている。ハルシェーダーおよびドメインシェーダーはDirect3D 11対応のGPUでなければ使用できないが、コンピュートシェーダーは制限付きでDirect3D 10.x世代のGPUでも実行可能である[http://msdn.microsoft.com/ja-jp/library/ee422083.aspx]。 ;Direct3D 11.1 :Direct3D 11.0のマイナーチェンジ。[[Windows 8]]に標準搭載されている。DXGIのバージョンは1.2となる[http://msdn.microsoft.com/en-us/library/windows/desktop/hh404490.aspx]。なお、Windows 8に標準搭載される、新しいバージョンのDirect2D(D2D 1.1)は、このD3D 11.1上に構築された高レベルラッパーライブラリである[http://msdn.microsoft.com/en-us/library/windows/desktop/hh802478.aspx]。シェーダーモデルのバージョンは11.0と同じく5.0となる[http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx#Overview]。Direct3D 11.1は機能追加よりも性能強化に重点が置かれたマイナーバージョンアップとなっている。また、Direct3D 11はWindows 7リリース後にWindows Vistaに対して完全な形でバックポートされたが、Direct3D 11.1のWindows 7へのバックポートは完全ではなく、限定的な形にとどまっている[http://blogs.msdn.com/b/chuckw/archive/2012/11/14/directx-11-1-and-windows-7.aspx]。 ;Direct3D 11.2 :Direct3D 11.1のマイナーチェンジ。[[Windows 8.1]]および[[Xbox One]]に標準搭載される[http://www.4gamer.net/games/033/G003329/20130627026/]。DXGIのバージョンは1.3となる[http://msdn.microsoft.com/ja-jp/library/windows/apps/dn448914.aspx]。Windows 8.1に標準搭載される、新しいバージョンのDirect2D(D2D 1.2)は、このD3D 11.2上に構築された高レベルラッパーライブラリである[http://msdn.microsoft.com/en-us/library/windows/desktop/hh802478.aspx]。Direct3D 11.2はタイルリソース(いわゆるメガテクスチャ)などをサポートする[http://msdn.microsoft.com/en-us/library/windows/desktop/dn312084.aspx]。なお、Direct3D 11.2はWindows 8およびそれ以前のOSにはバックポートされていない。 ;Direct3D 12 :これまでの抽象化されたDirect3D APIをいったん清算し、よりハードウェアに近いローレベルな制御を可能とするAPIとなることが予定されている。Windowsのほか、Xbox Oneに対応予定<ref>[http://pc.watch.impress.co.jp/docs/column/kaigai/20140325_641071.html 【後藤弘茂のWeekly海外ニュース】GPUの進化に対応したMicrosoftの次世代API「DirectX 12」の背景 - PC Watch]</ref>。 == 参考文献 == <references /> == 関連項目 == *[[High Level Shader Language]] - HLSL *[[Microsoft DirectX]] - Direct3Dが実装されているAPIの集合 *[[OpenGL]] - Direct3Dの最大のライバル *[[DirectDraw]] *[[Direct2D]] *[[DirectWrite]] *[[Windows Presentation Foundation|WPF]] *[[3次元コンピュータグラフィックス]] == 外部リンク == *[http://www.microsoft.com/windows/directx/default.mspx DirectX website] <!-- *[http://www.dxten.com/wiki/Main_Page DirectX 10 Wiki] - DirectX 10のチュートリアル、サンプル、演出、ニュースなどを扱っているWiki。 --> *[http://www.bit-tech.net/hardware/2006/11/30/directx10_future_of_pc_gaming/1.html DirectX 10: The Future of PC Gaming] DirectX 10の新機能について議論している技術文章でありゲーム業界に影響がある。 {{Microsoft APIs}} [[Category:DirectX|3D]] [[Category:コンピュータグラフィックス]] [[Category:グラフィックライブラリ]]
このページで使用されているテンプレート:
テンプレート:Cite web
(
ソースを閲覧
)
テンプレート:Microsoft APIs
(
ソースを閲覧
)
テンプレート:リンク切れ
(
ソースを閲覧
)
Direct3D
に戻る。
検索
検索
Direct3Dのソースを表示
話題を追加