UNITY STANDARD ASSETS原始碼學習筆記(二)Sun Shafts
這個其實就是God Ray的一種實現,即提取圖中亮度大的部分,做徑向模糊,然後疊加在原圖上。有一篇講的很不錯的God Ray的文章中有提到這個方法,其中的圖很直觀。https://blog.csdn.net/puppet_master/article/details/79859678。
用他這張圖,結合Unity的Sun Shafts,跑了下類似的效果,還是比較好看的。
原圖:
GodRay:
不過這個感覺光的顏色不太對勁,換了個顏色就挺不錯的了:
另外,參考了另一個人的部落格,搞了一個類似於丁達爾效應或者體積霧的效果(部落格地址:https://zhuanlan.zhihu.com/p/186270029
不過因為部落格園似乎無法上傳視訊,只能作罷了,不過本來這種情況下出現霧也就不太符合自然情況。
關於原始碼部分,frag分為使用深度圖和不使用深度圖的。
先看一下一個公共函式:
這個函式根據傳入的值,如果把超出亮度閾值的部分轉化成一個half返回,由於rgb相同的一定是灰色,所以這就是註釋中說的greyscale的含義;從這裡可以知道shader中有提取高亮度的部分,並受到引數控制。
對於使用深度的部分,程式碼如下:
可以很明顯的看到只有深度很遠的才會被取樣,所以相機裡面直接放一張圖也是可以後處理的。
對於不使用深度部分,程式碼如下:
其中的Luminance函式式用來計算一個顏色的灰度值的,也就是說,程式碼比較了天空和該點顏色差值的灰度值,如果過小,就使用天空盒的顏色進行轉換,說實話,這裡沒有看的太懂,實際上,場景跑起來的效果也是怪怪的= =。
總而言之,這個提取高亮部分做徑向模糊的思路還是比較驚豔的,不過Unity原始碼本身沒有看的太明白。。