對HDR、SSAO這樣的post effect應該用什麼樣的抗鋸齒技術?

上次在SSAO上用MSAA被大神給鄙視了(MSAA開瞭然而模型沒鋸齒了,SSAO貼圖還全是鋸齒,不知道為什麼...)...再厚臉皮問下對post effect要用什麼樣的抗鋸齒技術?


again,post effect不用抗鋸齒。進來一個像素出去一個像素。

你仍然沒有搞清楚問題的本質,甚至沒有辦法描述清楚問題。從你的文字上看,我猜你想說的是,場景渲染的結果有抗鋸齒,SSAO的結果沒有抗鋸齒,結果合起來不好看?這問題顯然不是出在SSAO本身,因為他就是個post process,沒有幾何體的概念。

毛病在於你給SSAO的輸入,是不是一個已經resolve過、沒有subpixel信息的depth texture?那樣的話顯然抗鋸齒無效。DX10.1+的顯卡支持subpixel寫入,在這種情況下你可以把沒有resolve過的depth texture給SSAO,在SSAO的PS里對每一個subpixel計算AO,之後顯式寫入對應的subpixel。但這樣開銷和複雜度都大很多。

因此,現在的遊戲基本不這麼做,都是在半解析度下用resolve過的depth texture做SSAO,接著用biliteral filter拉伸。這樣速度和質量都提高了。

HDR要抗鋸齒又是什麼鬼。你的輸入如果是resolve過了,又怎麼會有鋸齒的HDR結果。


你在做ssao之前的深度紋理,以及法線紋理,必須是抗鋸齒之後的(注意深度和法線不要存到同一張紋理裡面,會影響多重採樣的效果,normal和depth綁到一起進行msaa會有bug)。但是render to texture是不允許把texture直接設置成4xMSAA的。你得先把效果渲染到一個4xMSAA的rendertarget上面,然後再調用resolve函數把rendertaget複製到沒有抗鋸齒的紋理裡面。而depth/stencil target甚至是不允許使用resolve函數進行紋理拷貝的,你得在shader裡面用texture2DMS把最終的紋理進行重採樣。然後渲染到一個沒有msaa的紋理上。可以參看nvida sdk11 —&>SSAO11,代碼寫的非常詳細


推薦閱讀:

為什麼directX里表示三維坐標要建一個4*4的矩陣?
[初步結論]DX12強制加入的A卡特性ACE非同步計算是否是為彌補GCN效率低的缺陷?
shader 一個pass計算多個光源如何實現?
國內外哪些學校的計算機圖形學比較強?

TAG:計算機圖形學 | 遊戲編程 | DirectX11 | 抗鋸齒 |