Real-Time Shadows 2

在PCF的最後一步,需要對一定範圍內的所有深度值做比較,如果深度值大於着色點的深度值記爲1,小於記爲0.然後求平均。這種操作需要花費較多的時間。這種行爲可類比於在一個班級中,知道自己的分數,想要知道自己在班級中的排名,需要和班級中每一位同學的分數比較。一種改進的方法是隻需要知道有多少人比我的分數高,當然也不需要非常準確的範圍,於是在一個根據成績的正態分佈中,就可以知道自己的大致排名了。而對於正態分佈,只需要知道方差和期望。這也就是VSSM的思路,用來解決PCF的最後一步的算法。

當然PCSS在範圍內查詢時,可以使用採用的方法,就是沒有在範圍內全部查詢,這樣會有噪聲。不過由於圖形處理會解決噪聲問題,PCSS的使用還是比較廣泛。

 

 

 要求得方差,可用下面這個公式,其中X2是隨機變量的平方,也就是需要多一張表,這個表用來存儲深度值的平方,而E(X2)就是深度值平方和的平均值。

 

 

 以圖中爲例,想要得到比1小的,需要計算1左邊的面積。

 

 切比雪夫(Chebychev公式可以近似估算結果,它估算在t右邊的值,這裏的小於等於可以看作約等於,t在均值的右邊時會比較準確,在左邊的話就會不太準確,也就是說t值要大於均值纔會準確。

 以上只對PCSS的第三步進行了改進,但PCSS的第一步也是在一定範圍內查詢,也需要花費很多的時間。下面是對第一步的改進方法。在一定範圍內,我們已知該範圍內所有深度值的平均值Zavg,我們需要求出能夠遮擋着色點的Zocc,把這些能夠遮擋着色點的深度值求和除以遮擋點的數量得到了Zocc,Zunocc是不能夠遮擋着色點的平均深度值。

 

 根據下圖中白色方框內的公式,N1/N是無法遮擋着色點的比例,N2/N是可以遮擋着色點的比例。無法遮擋着色點說明其深度值大於着色點的深度值,可以用切比雪夫(Chebychev公式直接得出N1/N,那麼N2/N=1-P。再大膽假設不能夠遮擋着色點的平均深度值Zunocc等於着色點深度值,因爲大多數接收陰影的物體是平面。這樣就可以求出Zocc

 

 還有就是對一定範圍內的深度平均值的計算,如果也是一個個的遍歷計算也會很慢,所有也需要有改進方法。這裏引入一個叫SAT的數據結構。在一維場景下,下圖中,要求出3+7+1的值,需要從頭便利。而SAT的思路是使用一個O(n)的空間來記錄從開始到當前位置的總和,比如要查詢3+7+1的值,需要用1的位置上的值減去5位置上的值。

 

 

 在二維場景內。需要計算下圖中的藍色矩形平均深度值,用綠色矩形減去豎着的橘黃色矩形範圍和橫着的橘黃色矩形範圍,再加上多減的左上角的綠色矩形範圍,就是藍色矩形平均深度值。二維的SAT建立可以是每一行都是一個一維的SAT(上圖),然後再對應列。這樣就可以快速的得到一定範圍內的深度平均值。

 

 VSSM有一些問題,比如在第三步的時候,一般情況是用一個正態分佈來記錄的,但當着色點連向光源時穿過三個shadow map時,就會有三個峯值,此時用一個正態分佈就會不準確。

 

 

 

 要麼會算大,要麼會算小,也就是陰影要麼會變得更暗,要麼會變白,變暗是可以接受的,變白是無法接受的。以下圖汽車陰影舉例來說,可以看到汽車陰影中有白色出現,這是因爲在着色點連向光源時,它可能會被汽車的上面的蓋子遮擋住,也會被汽車的底板遮擋住,這是用一個正態分佈來計算就會出現問題。

 

 

 VSSM在描述深度分佈不夠準確,Moment Shadow Mapping可以解決這個問題,它用更高階的矩來記錄深度值,VSSM就是記錄到2階矩。

 

 

Distance field soft shadows:也是一種做軟陰影的方法。

Distance functions:空間中任何一個點到物體表面的最小距離。
SDF(Sign Distance functions):一種有方向的Distance functions,正號可以表示爲在物體的外部,負號可以表示爲在物體的內部。

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章