位移對應 (Direct3D 9)

位移對應類似于紋理貼圖,但由頂點引擎存取。

框圖

頂點管道的早期部分會出現額外的取樣器階段,如下圖所示,可以取樣位移地圖以提供頂點位移資料。

頂點管道中取樣器階段的圖表

位移對應取樣器狀態可由 SetSamplerState 使用階段編號 256 來設定,這是新的階段編號。 位移地圖紋理是由 SetTexture 設定

地圖可以預先取樣,這表示它可以依啟用位移值的查閱方式進行排序,而不需要篩選。

  • 位移對應類似于紋理貼圖,但由頂點引擎存取。
  • 頂點管道早期有額外的取樣器階段,可取樣位移地圖。 此階段是由一般的 SetSamplerState API 存取,但階段編號為 D3DDMAPSAMPLER = 256。
  • 位移地圖取樣器狀態可由 SetSamplerState (D3DDMAPSAMPLER, ...) API 來設定。
  • 位移地圖紋理是由 SetTexture (D3DDMAPSAMPLER、紋理) API 所設定。
  • 地圖可以預先取樣, 這表示它可以以特定方式排序,以便查閱位移值而不進行篩選。
  • 宣告結構中的變更允許用來查閱紋理貼圖的紋理座標規格。 例如,Stream0、Offset、FLOAT2、LOOKUP、Displacement_value。 這會告訴鑲嵌器在 stream0 中使用 2D 浮點數向量做為紋理座標,以查閱位移對應,並將Displacement_value使用語意與其產生關聯。 頂點著色器宣告會包含類似 {dcl_texture0, v0} 的線條,指出 texture0 語意與 v0 輸入暫存器相關聯。 查閱的位移值會複製到輸入暫存器 v0。
  • 預先取樣紋理貼圖時,會有特殊的位移對應類型。 所產生頂點的循序索引會當做紋理地圖的紋理座標使用。 例如,0,0, (D3DDECLTYPE) 0,D3DDECLMETHOD_LOOKUPPRESAMPLED,Usage,UsageIndex。
  • 查閱的輸出為 4 個浮點數。
  • 只支援 N 修補程式的位移對應。
  • 如果驅動程式未處理位移對應,則驅動程式必須忽略 SetTextureStageState 中的 D3DDMAPSAMPLER。
  • 不支援D3DTEXF_ANISOTROPIC篩選模式。
  • 當位移地圖取樣器D3DSAMP_MIPFILTER未D3DTEXF_NONE時,詳細資料層級的計算方式如下 (請注意,即使D3DRS_ENABLEADAPTIVETESSELLATION為 FALSE) ,也會使用調適型鑲嵌狀態:Tmax = 轉譯狀態D3DRS_MAXTESSELLATIONLEVEL
  • 頂點 Vi 的計算鑲嵌層級 Te: (Xi、Xi、Zi) 與「自適性鑲嵌」一節中所述的方式相同。 詳細資料 L = log2 (Tmax) - log2 (Te) 。
  • 紋理篩選和取樣作業會遵循與套用 LOD) 偏差等 ( (詳細資料層級相同的規則。) 。
  • 並非所有格式都可以用來做為位移對應,但只能使用支援D3DUSAGE_DMAP的格式。 應用程式可以使用 CheckDeviceFormat CheckDeviceFormat來查詢。
  • D3DUSAGE_DMAP必須在 CreateTexture 中指定,以通知驅動程式此紋理要當做位移圖使用。
  • D3DUSAGE_DMAP只能與紋理搭配使用。 它不能與 Cube 對應或磁片區搭配使用。
  • 使用 D3DUSAGE_DMAP 建立的紋理和轉譯目標可以在一般取樣器階段和轉譯目標設定。
  • 在位移對應中,會忽略設定紋理座標換行模式的轉譯狀態。 一般而言,鑲嵌器引擎沒有包裝模式。
  • 位移地圖取樣器的行為與圖元紋理取樣器的行為相同。 如果查閱的紋理少於四個通道 (如 R32f) ,則查閱的值會移至目的地暫存器的適當通道, (以_sample語意) 標記的頂點著色器輸入暫存器,而其他通道預設為 (1、1、1) 。 查閱時,D3DFMT_L8會廣播到 R、G、B 通道和 A 預設為 1。 參考轉譯器具有完整的實作詳細資料。

預先取樣的位移對應

  • 引進新的取樣器狀態:D3DSAMP_DMAPOFFSET (DWORD) - 預先取樣位移對應中頂點) 的位移 (。
  • 引進了新的宣告方法:D3DDECLMETHOD_LOOKUPPRESAMPLED。
  • 應停用調適型鑲嵌。
  • 忽略紋理篩選設定。 點取樣已完成。 mip 紋理篩選假設為D3DTEXF_NONE。 所有其他紋理篩選模式都會假設為D3DTEXF_POINT。
  • 紋理座標的計算方式為:U = (索引 % TextureWidthInPixeles) / (float) (TextureWidthInPixeles) V = (Index / TextureWidthInPixeles) / (float) (TextureHeightInPixeles) 其中 Index 是所產生頂點的循序索引加上 TSS[D3DSAMP_DMAPOFFSET]。 循序索引會在每個基本類型的開頭設定為零,並在產生頂點之後增加。

這些是支援位移對應的 API 變更。

  • 已新增單一通道格式,D3DFMT_L16。
  • 新的使用旗標,D3DUSAGE_DMAP。
  • 特殊紋理階段,用來設定位移貼圖紋理 D3DDMAPSAMPLER。
  • 已新增新的硬體上限,D3DDEVCAPS2_DMAPNPATCH和D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH。 請參閱 D3DDEVCAPS2

頂點管線