我的問題特別是關於金屬,因爲我不知道如果答案會改變爲另一個API。mipmapped紋理如何採樣?
我相信我至今不解的是這樣的:
一個mipmapped質感已預先計算「細節層次」,其中詳細的較低水平以某種有意義的方式下采樣原始紋理創建。
Mipmap級別是指以細節級別遞減的級別,其中
0
級別是原始紋理,而較高級別是它的兩次冪減少。大多數GPU實現三線性濾波,它爲每個採樣選取兩個相鄰的mipmap級別,使用雙線性濾波從每個級別採樣,然後線性混合這些採樣。
我不太明白的是如何選擇這些mipmap級別。在金屬標準庫的documentation中,我看到可以採用樣本,可以指定或不指定lod_options
類型的實例。我認爲這種說法改變如何紋理貼圖水平的選擇,並有明顯3種lod_options
爲2D紋理:
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
不幸的是,文檔不會解釋這些選項的作用。我可以猜測bias()
偏差一些自動選擇的細節水平,但那麼偏見value
是什麼意思?它的操作規模是什麼?同樣,的lod
如何轉換爲離散的mipmap級別?並且,在gradient2d()
使用紋理座標的漸變的假設下運行,它如何使用該漸變選擇mipmap級別?
更重要的是,如果我省略了lod_options
,那麼如何選擇mipmap級別呢?這是否根據正在執行的功能類型而有所不同?
而且,如果sample()
函數的默認no-lod-options指定的操作是做類似於gradient2D()
(至少在片段着色器中)的東西,它是利用簡單的屏幕空間導數還是直接工作使用光柵化器和內插紋理座標來計算精確的漸變?
最後,設備之間的這種行爲有多一致?一篇舊文章(如DirectX 9中的舊文章)我讀到複雜的特定於設備的mipmap選擇,但我不知道mipmap選擇是否在較新的體系結構中更好地定義。