unity3d 幾種鏡頭畸變


1.Fisheye distortion  魚眼鏡頭

解釋來自百度百科:魚眼鏡頭是一種焦距為16mm或更短的並且視角接近或等於180°。 它是一種極端的廣角鏡頭,“魚眼鏡頭”是它的俗稱。為使鏡頭達到最大的攝影視角,這種攝影鏡頭的前鏡片直徑很短且呈拋物狀向鏡頭前部凸出,與魚的眼睛頗為相似,“魚眼鏡頭”因此而得名。

關鍵代碼如下:

[cpp]  view plain  copy
 
  1. float2 fisheye(float2 uv)  
  2. {  
  3. float2  n_uv = (uv - 0.5) * 2.0;  
  4.   
  5.     float2 r_uv;  
  6.     r_uv.x = (1 - n_uv.y * n_uv.y) * _Intensity_y * (n_uv.x);  
  7.     r_uv.y = (1 - n_uv.x * n_uv.x) * _Intensity_x * (n_uv.y);  
  8.     return(uv* _scale - r_uv);  
  9. }  



 

效果是這樣的:

 

 

2.Barrel Distortion  桶形畸變

桶形畸變(Barrel Distortion),又稱桶形失真,是由鏡頭中透鏡物理性能以及鏡片組結構引起的成像畫面呈桶形膨脹狀的失真現象。我們在使用廣角鏡頭或使用變焦鏡頭的廣角端時,最容易察覺桶形失真現象。當畫面中有直線(尤其是靠近相框邊緣的直線)的時候,桶形失真最容易被察覺。普通消費級數碼相機的桶形失真率通常為1%。

關鍵代碼如下:

[cpp]  view plain  copy
 
  1. float2 barrel(float2 uv)  
  2.         {   
  3.   
  4.             float2 h = uv.xy - float2(0.5, 0.5);  
  5.             float r2 = h.x * h.x + h.y * h.y;  
  6.             float f = 1.0 + r2 * (_distortion + _cubicDistortion * sqrt(r2));  
  7.   
  8.             return f * _scale * h + 0.5;  
  9.         }  



 

效果是這樣的:

 

3.Pincushion Distortion  枕形畸變

在正確的拍攝條件下,矩形物體的像仍應呈矩形。但有的鏡頭由於有缺陷,將矩形物體拍成四邊向內凹進形如枕頭的影像,稱鏡頭的這種像差為枕形畸變。相反如拍成四邊突出的影像即稱桶形畸變。

枕形畸變又稱正畸變,是由於視場邊緣部分的放大率高於中心部分放大率所引起,即傾斜角度大的光線的放大率比傾斜角度小的光線的放大率高。

把桶形畸變參數修改即為枕形畸變

效果是這樣的:

 

全部代碼已上傳至GitHub

                       ------by wolf96    http://blog.csdn.net/wolf96


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM