[ZZ] 景深效果(Depth of Field) , Pass1 將情境渲染到一個RenderTarget,做為清晰版, Pass2: BluredRT , Pass3: WDepth = Depth / Far_Z_Clip

來源:互聯網
上載者:User

標籤:blog   http   color   strong   width   art   

http://blog.csdn.net/xoyojank/article/details/1883520  什麼是景深效果?景深效果,簡稱DOF,在人眼跟光學攝像裝置上很常見.如:

簡單地來說,就是近處跟遠處的景物模糊,而焦點附近的物體則很清晰.至於為什麼會產生這樣的效果,我就懶得說了:p  那麼怎麼來實現這種效果呢?看圖:

從攝像機開始,按距離分成三部分:近距離模糊,焦點範圍(清晰),遠距離模糊渲染的時候按深度(即距離)進行判斷,在焦點範圍內則是清晰的,否則就進行模糊處理.
整個過程分三個Pass:1.       將情境渲染到一個RenderTarget,做為清晰版.2.       將上一步得到的RenderTarget進行模糊處理,得到BluredRT(模糊版).3.       合成.跟據距離來判斷是否應該模糊,如果不在焦點範圍內則繪製BluredRT,否則就繪製RenderTarget. 那麼,還有一個問題,深度值怎麼計算呢?公式: WDepth = Depth / Far_Z_Clip.在這裡我是把深度值存在Alpha通道中一塊渲染到RenderTarget,這樣在最後一步直接取color.a就可以進行深度判斷了

(右圖為Alpha通道,儲存了深度值)
  Shader 與最終效果
sampler RenderTarget;sampler BluredRT; //焦點範圍float fNearDis;float fFarDis; float4 ps_main( float2 TexCoord : TEXCOORD0 ) : COLOR0{     float4 color = tex2D( RenderTarget, TexCoord );   if( color.a > fNearDis && color.a < fFarDis )      return color;   else      return tex2D( BluredRT, TexCoord );}
 

是不是看起來很不自然?為什麼呢?因為這樣實現的DOF在清晰與模糊的交界處過渡太生硬了,所以就像分成了三部分一樣-_-! 那我們增加兩個過渡不就成了?就像這樣:

sampler RenderTarget;sampler BluredRT; //焦點範圍float fNearDis;float fFarDis;float fNearRange;float fFarRange; float4 ps_main( float2 TexCoord : TEXCOORD0 ) : COLOR0{     float4 sharp = tex2D( RenderTarget, TexCoord );   float4 blur = tex2D( BluredRT, TexCoord );     float percent = max(saturate(1 - (sharp.a-fNearDis)/fNearRange),                    saturate((sharp.a-(fFarDis-fFarRange))/fFarRange));     return lerp( sharp, blur, percent );}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.