Screen Space Reflection特定角度顯示錯誤問題?
01-21
上接Screen Space Reflection 間接光問題? - 編程
修改了一些Bug後(紋理矩陣多球了一次轉置 @叛逆者),在近平面的角度下,能顯示比較正確的SSR結果但是隨著相機視角變換,SSR的結果就嚴重扭曲。。而且有的部分甚至就直接缺失了 =============================這是因為SSR本身的缺陷還是有什麼細節沒注意么?該怎麼彌補修改這種錯誤呢?希望大神解答,感激不盡。
這是必然的啊,SSR也是SS,只能反射到你看得見的pixel,攝像機一轉,有些pixel看不到了,自然沒得SSR。
強答,最近也在看ssr,其實說得很清楚了局部反射, 在ss外的肯定是反射不到了。全方向的反射在dx11龍書上有基於GS的例子。題主可以試一下cubemap和ssr的結合,看了龔大在opengpu上的
採用ssr的反射更加真實。
單獨使用ssr在有些場景下並不適合。 但是,腦補下,一個狹小室內空間地上有一灘水, 水的反射用ssr就很足夠了。
為什麼產生變形?
看了題主幾張出現變形的圖,都是在視角低,ssr能採樣到的數據偏少的情況,就上圖來看,反射的一部分是正常的,而出現問題的部分其實是ssr已經無法採樣到的
你變形的地方應該沒有反射圖像,因為那個地方的反射圖像在屏幕外。見上圖,紅線下的部分(你的扭曲部分)應該沒有反射圖像。
你在做 ray trace 的時候要檢查一下你的 ray 在屏幕空間位置(如果用 Morgan McGurie 的那套,ray 應該就是屏幕空間的)。如果 ray 的 X 或 Y 超出屏幕範圍了,就停止 trace。
題主似乎用的是Morgan McGurie的Efficient SSR方法?我在實現時也遇到過類似的問題,最後發現是他給的示例代碼要求投影矩陣變換到pxiel coordinate而非clip space,所以需要手動將P0和P1從NDC變換到像素坐標。另外,zThickness不要設的太大,並且要提前終止一些已經處於屏幕空間外的射線。
看不見地方反射還要配合CubeMap來做
推薦閱讀:
※對HDR、SSAO這樣的post effect應該用什麼樣的抗鋸齒技術?
※為什麼directX里表示三維坐標要建一個4*4的矩陣?
※[初步結論]DX12強制加入的A卡特性ACE非同步計算是否是為彌補GCN效率低的缺陷?
※shader 一個pass計算多個光源如何實現?
※國內外哪些學校的計算機圖形學比較強?