UnityShader-13.3全局雾效

本文探讨了两种在Unity中创建雾效的方法:一是通过Shader的基本实现,利用Unity的内置宏实现雾效,但这种方法移植性不高;二是采用屏幕后处理技术,包括基于深度纹理的计算,通过线性射线和深度采样来估算雾浓度,虽然性能有一定影响,但提供了更灵活的效果。两种方法各有优缺点,适用于不同的项目需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本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值来,对雾的浓度进行推算

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值