Unity3D之跑酷地图弯曲效果

3D跑酷游戏,远处地表是弯曲的,形成视觉差,其实是通过shader来实现。

_QOffset("Offset",Vector)=(0,0,0,0)

_Dist("Distance",float)=100


下面是无光照的shader

float4 vPos = mul (UNITY_MATRIX_MV, v.vertex);
float zOff = vPos.z/_Dist;
vPos += _QOffset*zOff*zOff;
o.pos = mul (UNITY_MATRIX_P, vPos);


如果是surface shader,则把最后一行的 

o.pos = mul (UNITY_MATRIX_P, vPos);

换成 v.vertex = mul(vPos,UNITY_MATRIX_IT_MV);


上面是在顶点着色器中的主要代码,颜色第一行把模型坐标转到相机空间坐标,下面两行用来控制离相机越远,弯曲越大。

你可能感兴趣的:(Unity)