2013-10-21 519 views
1

我正在使用SharpDX,並且我想在深度緩衝區中執行抗鋸齒。我需要將深度緩衝區存儲爲紋理以便稍後使用它。所以如果這個紋理是一個Texture2DMS,這是一個好主意嗎?或者我應該採取另一種方法?DirectX11中Texture2D和Texture2DMS之間的區別

我真正想實現的是:

1)深度緩衝縮放

2)深度測試超級採樣

(術語我在本文的第3.2節發現:http://gfx.cs.princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf

+0

你能澄清你在第1點和第2點的意思嗎? 「縮放」是什麼意思?關於超級抽樣,MSAA本質上總是超級抽樣深度。 – MooseBoys

+0

我很難澄清這一點,因爲我在一篇論文中看到了這一點,而且我不完全知道這意味着什麼,我想也許這是一個常見術語。我在第3.2節(可見性測試)結束處發現它:http://gfx.cs.princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf – c4sh

+0

您是否試圖實施本文中描述的線渲染技術?如果是這樣,請在您的問題文本中澄清。如果沒有,您嘗試實現哪種渲染技術需要高於正常分辨率的深度緩衝區? – MooseBoys

回答

1

因爲這個過程不需要顏色,所以你應該讓渲染目標解除綁定,並使用「空白」像素着色器。對於深度,你應該創建一個2倍或4倍的Texture2D(非MS) (或其他一些2N x)將要使用的最終渲染目標的寬度和高度。這並不是真正的「超級取樣」(因爲pre-pass是一個沒有實際像素輸出的獨立階段),但它是相似的。

對於第二階段,本文要求從預處理中完成高分辨率深度緩衝區的多個樣本。如果你遵循上面的尺寸,每個像素將對應於一些(2N)^ 2深度值。您需要閱讀這些值並對其進行平均。幸運的是,使用SampleCmpCOMPARISON採樣器類型有一個硬件加速的方法來執行此操作(稱爲PCF)。這樣會對2x2圖章進行採樣,將每個值與指定值進行比較(此處傳遞第二階段計算的深度,並且不要忘記添加一些ε值(例如1e-5)),並返回平均結果。執行2x2標記以覆蓋與此像素關聯的第一階段深度緩衝區的整個區域,並對結果進行平均。最終結果表示當前線的脊椎有多少對應於預通路的最前面的深度。由於PCF的平滑過濾行爲,隨着線條變得可見,它們將慢慢淡入,而不是本文中描述的別名「虛線」效果。

+0

我對如何呈現紋理並在其中放置深度信息有點遺憾。你可以指點我的資源教程,可以幫助我嗎?我見過這個:http://www.rastertek.com/dx11tut22.html ...看起來相當不錯,但它是渲染正常場景而不是深度。 – c4sh

+0

@ c4sh這並不是說你要渲染紋理的深度。相反,您正在執行標準渲染過程,並且僅限深度視圖。這會導致深度被正常寫入,而不會呈現顏色。這與渲染普通場景一次相同,只是不使用生成的渲染目標數據,而是具有更好的性能。 – MooseBoys