ポイント、バイリニア、トリリニア、およびアニソトロピック テクスチャ フィルタリング バリアント
適切なテクスチャのサンプラーでフィルタリング モードをオーバーライドします。
解釈
テクスチャ サンプリングにはさまざまなメソッドがありますが、それぞれパフォーマンス コストとイメージ品質が異なります。 次に、コストと表示品質の低い順からフィルター モードを示します。
Point フィルタリング (最も安価、表示品質は一番低い)
Bilinear フィルタリング
Trilinear フィルタリング
Anisotropic フィルタリング (最も高価、表示品質は一番高い)
各バリアントのパフォーマンス コストが重要である、またはより強力なフィルタリング モードを使用してパフォーマンス コストを強化する場合は、表示品質に対してコストに重点をおくことができます。 自身の評価に基づいて、パフォーマンス コストを追加して表示品質を向上させる、表示品質を落としてフレームレートの数を多くする、他の方法で使用できるようにパフォーマンスを改善する、といったことが可能です。
パフォーマンス コストがごくわずかであるか、またはフィルタリング モードに関係なく一定である (たとえば、ターゲットの GPU に大量のシェーダー スループットおよびメモリ帯域幅がある) 場合には、異方性フィルタリングを使用してアプリケーションで最高のイメージ品質を実現することを検討してください。
解説
これらのバリアントは、アプリケーションが提供したサンプラーのフィルター モードが以下のいずれかの場合に、ID3D11DeviceContext::PSSetSamplers への呼び出しが行われたときにサンプラーの状態をオーバーライドします。
D3D11_FILTER_MIN_MAG_MIP_POINT
D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR
D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT
D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_MAG_MIP_LINEAR
D3D11_FILTER_ANISOTROPIC
Point Texture Filtering バリアントでは、アプリケーションが提供したフィルター モードがD3D11_FILTER_MIN_MAG_MIP_POINT に置き換えられます。Bilinear Texture Filtering バリアントでは、D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT に置き換えられ、Trilinear Texture Filtering バリアントではD3D11_FILTER_MIN_MAG_MIP_LINEAR に置き換えられます。
Anisotropic Texture Filtering バリアントでは、アプリケーションが提供したフィルター モードは D3D11_FILTER_ANISOTROPIC に置き換えられ、Max Anisotropy は 16 に設定されます。
制約と制限
Direct3D では機能レベル 9.1 は、最大異方性が 2x であることを表します。 Anisotropic Texture Filtering バリアントは 16x の異方性のみを使おうとするため、機能レベル 9.1 のデバイス上でフレーム分析を実行すると再生は失敗します。 この制約の影響を受ける現在のデバイスには、ARM ベースの Surface RT、および Surface 2 Windows タブレットが含まれています。 コンピューターの中には古い GPU が存在している可能性があり、これらの GPU も影響を受けます。ただし、これらは一般的には使われておらず、問題にならなくなっています。
使用例
Point Texture Filtering バリアントは、次のようなコードを使用して再現することができます。
D3D11_SAMPLER_DESC sampler_description;
// ... other sampler description setup ...
sampler_description.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
d3d_device->CreateSamplerState(&sampler_desc, &sampler);
d3d_context->PSSetSamplers(0, 1, &sampler
Bilinear Texture Filtering バリアントは、次のようなコードを使用して再現することができます。
D3D11_SAMPLER_DESC sampler_description;
// ... other sampler description setup ...
sampler_description.Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT;
d3d_device->CreateSamplerState(&sampler_desc, &sampler);
d3d_context->PSSetSamplers(0, 1, &sampler
Trilinear Texture Filtering バリアントは次のようなコードを使用して再現することができます。
D3D11_SAMPLER_DESC sampler_description;
// ... other sampler description setup ...
sampler_description.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
d3d_device->CreateSamplerState(&sampler_desc, &sampler);
d3d_context->PSSetSamplers(0, 1, &sampler
Anisotropic Texture Filtering バリアントは、次のようなコードを使用して再現することができます。
D3D11_SAMPLER_DESC sampler_description;
// ... other sampler description setup ...
sampler_description.Filter = D3D11_FILTER_ANISOTROPIC;
sampler_description.MaxAnisotropy = 16;
d3d_device->CreateSamplerState(&sampler_desc, &sampler);
d3d_context->PSSetSamplers(0, 1, &sampler