基本Shader制作雾效
1.在Shader中添加 #pragma multi_compile_fog 以及 内置宏 UNITY_FOG_COORDS、UNITY_TRANSFER_FOG、UNITY_APPLY_FOG实现,可移植性不高,需要在场景中所有物体添加相关渲染代码
基于屏幕后处理制作雾效
1.方法1:在FragShader中,获取采样 SAMPLE_DEPTH_TEXTURE纹理(_CameraDepthTexture由Unity传递给我们的深度纹理)的深度值depth,由后处理得到的(Viewport(-1,1)坐标,Depth)乘inverse_View_Projection矩阵
来逆向变换到世界坐标,然后根据世界坐标与相机坐标的距离来进行雾浓度的推算。这样需要进行矩阵乘法,性能有所低下
2.方法2:近似求出距离,使用近裁剪面的四个角与相机的原位置组成 3 维空间下的向量,即线性射线,采样深度纹理下的深度坐标,使用LinearEyeDepth得到视图空间中的线性深度值(Near<<Far平面),在顶点着色器中,对点的UV值选择所属角的射线向量,然后将该深度值与线性射线向量进行相乘,然后加上相机的坐标---》得到世界坐标,仅取Y值来,对雾的浓度进行推算