1. 程式人生 > 其它 >UNITY STANDARD ASSETS原始碼學習筆記(二)Sun Shafts

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原始碼本身沒有看的太明白。。