Unity中常用的雾效

一,距离雾

float4 unityObjectToClipPos = TransformWorldToHClip(TransformObjectToWorld(IN.posOS.xyz));
float eyeDepth = LinearEyeDepth(SHADERGRAPH_SAMPLE_SCENE_DEPTH( screenPos.xy ),_ZBufferParams);
half3 WorldPosFromDepth = ( _WorldSpaceCameraPos - ( eyeDepth * ( ( _WorldSpaceCameraPos - WorldPosition ) / screenPos.w ) ) );
float temp = saturate( ( ( distance( WorldPosFromDepth , _WorldSpaceCameraPos ) - _FogDistanceStart ) / ( _FogDistanceEnd - _FogDistanceStart ) ) );
float FogDistance = ( 1.0 - pow( ( 1.0 - abs( temp ) ) ,_FogDistanceFalloff ) );

二,高度雾

float3 depthOption = ( WorldPosFromDepth* _FogAxisOption );
float temp = saturate( ( ( distance( WorldPosFromDepth, _WorldSpaceCameraPos ) - _FogDistanceEnd ) / ( ( _FogDistanceEnd + _FarDistanceOffset ) - _FogDistanceEnd ) ) );
half FogDistanceMaskFar = pow(temp,2);
float FogHeightEdge = lerp( _FogHeightEnd , ( _FogHeightEnd + _FarDistanceHeight ) , FogDistanceMaskFar);
half FogHeightMask = pow( abs( saturate( ( (depthOption - FogHeightEdge ) / ( _FogHeightStart - FogHeightEdge ) ) ) ) , _FogHeightFalloff );

三,天空盒雾

float3 normalizeResult = normalize( ( WorldPosFromDepth - _WorldSpaceCameraPos ) )  * _FogAxisOption;
float saferPower = abs( saturate( ( ( abs( ( ( normalizeResult.x + normalizeResult.y + normalizeResult.z ) -_SkyboxFogOffset ) ) - _SkyboxFogHeight ) / ( 0.0 - _SkyboxFogHeight ) ) ); );
half SkyboxFogHeightMask = ( lerp( saturate( ( pow( saferPower , _SkyboxFogFalloff ) + ( _SkyboxFogBottom * step( temp_output_449_0_g1027 , 0.0 ) ) ) ) , 1.0 , _SkyboxFogFill) * _SkyboxFogIntensity );

四,最终效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值