1. 程式人生 > >unity3d 幾種鏡頭畸變

unity3d 幾種鏡頭畸變

1.Fisheye distortion  魚眼鏡頭

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

關鍵程式碼如下:

float2 fisheye(float2 uv)
{
float2	n_uv = (uv - 0.5) * 2.0;

	float2 r_uv;
	r_uv.x = (1 - n_uv.y * n_uv.y) * _Intensity_y * (n_uv.x);
	r_uv.y = (1 - n_uv.x * n_uv.x) * _Intensity_x * (n_uv.y);
	return(uv* _scale - r_uv);
}


效果是這樣的:


2.Barrel Distortion  桶形畸變

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

關鍵程式碼如下:

	float2 barrel(float2 uv)
			{ 

				float2 h = uv.xy - float2(0.5, 0.5);
				float r2 = h.x * h.x + h.y * h.y;
				float f = 1.0 + r2 * (_distortion + _cubicDistortion * sqrt(r2));

				return f * _scale * h + 0.5;
			}


效果是這樣的:


3.Pincushion Distortion  枕形畸變

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

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

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

效果是這樣的:


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