共用方式為


點、雙線性、三線性和各向異性紋理篩選變異

覆寫適當的紋理取樣器上的篩選模式。

解譯

不同的紋理取樣方法具有不同的效能成本和影像品質。 若要增加成本 (以及增加視覺品質),篩選模式為:

  1. 點篩選 (花費最少,視覺品質最差)

  2. 雙線性篩選

  3. 三線性篩選

  4. 非等向性篩選 (花費最多,視覺品質最佳)

如果每個變異的效能成本很大,或因較密集的篩選模式而增加,您可以衡量其成本與其增加的影像品質。 基於您的評估,您可能會接受額外的效能成本以增加視覺品質,也可能會接受較差的視覺品質以達到較高的畫面播放速率,或回收您可能以其他方式使用的效能。

如果您發現不論篩選模式為何,效能成本都很少或十分穩定 (例如,您設為目標的 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

點紋理篩選變異中,應用程式所提供的篩選模式會取代為 D3D11_FILTER_MIN_MAG_MIP_POINT;在雙線性紋理篩選變異中,則會取代為 D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT;而在三線性紋理篩選變異中,則會取代為 D3D11_FILTER_MIN_MAG_MIP_LINEAR

非等向性紋理篩選變異中,應用程式所提供的篩選模式會取代為 D3D11_FILTER_ANISOTROPIC,而且「最大非等向性」會設定為 16。

限制

在 Direct3D 中,功能層級 9.1 會指定最大非等向性為 2x。 因為非等向性紋理篩選變異嘗試以獨佔方式使用 16x 非等向性,所以在功能層級 9.1 裝置上執行畫面格分析時,播放會失敗。 受此限制影響的現代裝置包括 ARM Surface RT 和 Surface 2 Windows 平板電腦。 還是可以在一些電腦上發現的較舊型 GPU 也是會受到影響,但是它們已被廣泛地視為過時,且漸漸地不常見。

範例

使用與下列類似的程式碼,即可重現點紋理篩選變異:

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

使用與下列類似的程式碼,即可重現雙線性紋理篩選變異:

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

使用與下列類似的程式碼,即可重現三線性紋理篩選變異:

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

使用與下列類似的程式碼,即可重現非等向性紋理篩選變異:

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