Share via


フルシーン アンチエイリアシング

フルシーン アンチエイリアシング

フルシーン アンチエイリアシングとは、シーン内の各ポリゴンのエッジをシングル パスでラスタライズしてぼかすことを指す。2 つ目のパスは必要ない。フルシーン アンチエイリアシングがサポートされている場合、三角形および三角形のグループにのみ影響する。Microsoft® Direct3D® サービスでは、ラインのアンチエイリアシングは実行できない。Direct3D では、フルシーン アンチエイリアシングを実行するには、各ピクセルにマルチサンプリングを使う。マルチサンプリングが有効な場合、ピクセルのすべてのサブサンプルが 1 つのパスで更新されるが、複数のレンダリング パスを含む他のエフェクトに使われる場合は、アプリケーションでサブサンプルの一部だけが指定のレンダリング パスに影響を受けるよう指定できる。この後者のアプローチによって、モーション ブラー、フィールド フォーカス エフェクトの深度、反射ブラーなどをシミュレートすることができる。

どちらの場合も、ピクセルごとに記録されたさまざまなサンプルがブレンドされ、スクリーンに出力される。このようなアプローチを使うと、アンチエイリアシングや他のエフェクトのイメージ品質が向上する。

IDirect3D9::CreateDevice メソッドでデバイスを作成する前に、フルシーン アンチエイリアシングがサポートされているかどうかを調べる必要がある。このためには、IDirect3D9::CheckDeviceMultiSampleType メソッドを呼び出す。次のコードに例を示す。

/*
 * The code below assumes that pD3D is a valid pointer 
 * to a IDirect3D9 interface.
 */

if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, 
                     D3DDEVTYPE_HAL , D3DFMT_R8G8B8, FALSE, 
                     D3DMULTISAMPLE_2_SAMPLES, NULL ) ) )
// Full-scene antialiasing is supported. Enable it here.

IDirect3D9::CheckDeviceMultiSampleType が受け取る第 1 引数は、問い合わせるディスプレイ アダプタを示す序数である。この例では、D3DADAPTER_DEFAULT を使ってプライマリ ディスプレイ アダプタを指定する。第 2 引数は D3DDEVTYPE 列挙型の値で、デバイスの種類を指定する。第 3 引数には、サーフェイスのフォーマットを指定する。第 4 引数は、フルウィンドウ マルチサンプリング (TRUE) またはフルスクリーン アンチエイリアシング (FALSE) を問い合わせるかどうかを Direct3D に知らせる。この例では FALSE を使って、フルシーン アンチエイリアシングについて問い合わせることを Direct3D に指示している。最後の引数には、テストするマルチサンプリング テクニックを指定する。D3DMULTISAMPLE_TYPE 列挙型の値を使う。この例では、2 つのレベルのマルチサンプリングがサポートされているかどうかをテストする。

デバイスが使いたい 2 つのレベルのマルチサンプリングをサポートしている場合、次の手順は、マルチサンプルのレンダリング サーフェイスを作成するために、D3DPRESENT_PARAMETERS 構造体の適切なメンバにデータを設定して、プレゼンテーション パラメータを設定することである。設定した後は、デバイスを作成できる。次のサンプル コードは、マルチサンプリングのレンダリング サーフェイスでデバイスを設定する方法を示している。

/*
 * The example below assumes that pD3D is a valid pointer 
 * to a IDirect3D9 interface, d3dDevice is a pointer to a 
 * IDirect3DDevice9 interface, and hWnd is a valid handle
 * to a window.
 */

D3DPRESENT_PARAMETER d3dPP
ZeroMemory( &d3dPP, sizeof( d3dPP ) );
d3dPP.Windowed        = FALSE
d3dPP.SwapEffect      = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                   D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                   &d3dpp, &d3dDevice)

マルチサンプリングを使うには、D3DPRESENT_PARAMETER の SwapEffect メンバを D3DSWAPEFFECT_DISCARD に設定する必要がある。

最後の手順は、IDirect3DDevice9::SetRenderState メソッドを呼び出して D3DRS_MULTISAMPLEANTIALIAS を TRUE に設定することによって、マルチサンプリングのアンチエイリアシングを有効にすることである。この値に TRUE を設定した後は、レンダリングには必ずマルチサンプリングが適用される。レンダリング対象に応じて、マルチサンプリングの有効/無効を切り替えることもできる。