Buckets:
| /*============================================================================= | |
| HeightFogCommon.usf: | |
| Copyright 1998-2008 Epic Games, Inc. All Rights Reserved. | |
| =============================================================================*/ | |
| static const float FLT_EPSILON = 0.001f; | |
| /** calculate ratio of distance between world z height and relative fog height */ | |
| float4 LinePlaneIntersection(float3 RelativeB,float4 RelativeZ) | |
| { | |
| return RelativeZ / (abs(RelativeB.z) <= FLT_EPSILON ? FLT_EPSILON : RelativeB.z); | |
| } | |
| /** used to scale fog layer distance */ | |
| half4 FogDistanceScale; | |
| /** any layer distance beyond this is clamped to full fog */ | |
| half4 FogExtinctionDistance; | |
| /** lighting contribution from fog. This uses 4 components to avoid platform-specific alignment of each element of the array. */ | |
| half4 FogInScattering[4]; | |
| /** distance at which fog will start */ | |
| half4 FogStartDistance; | |
| /** world space min z height */ | |
| float4 FogMinHeight; | |
| /** world space max z height */ | |
| float4 FogMaxHeight; | |
| half4 CalculateVertexHeightFog(float3 WorldPosition, float4 InCameraPosition) | |
| { | |
| float3 WorldVector = WorldPosition.xyz - InCameraPosition.xyz; | |
| float Distance = length(WorldVector); | |
| // maxfog - camera / z height | |
| float4 MinHeightPercent = LinePlaneIntersection(WorldVector,FogMinHeight - InCameraPosition.z); | |
| // minfog - camera / z height | |
| float4 MaxHeightPercent = LinePlaneIntersection(WorldVector,FogMaxHeight - InCameraPosition.z); | |
| // fog layer distance based on % over max/min fog heights | |
| half4 LayerDistance = max(half4(0,0,0,0),half4(Distance,Distance,Distance,Distance)-FogStartDistance) * abs(saturate(MaxHeightPercent) - saturate(MinHeightPercent)); | |
| // clamp anything beyond the extinction distance to 0 scattering | |
| // scattering falloff is exponential based on normalized layer distance | |
| half4 Scattering = LayerDistance < FogExtinctionDistance ? exp2(FogDistanceScale * LayerDistance) : half4(0,0,0,0); | |
| // ratio of the inscattering color to be used | |
| half4 InScattering = Scattering - 1; | |
| half4 Fog = half4(0,0,0,1); | |
| for(int LayerIndex = 0;LayerIndex < 4;LayerIndex++) | |
| { | |
| Fog *= Scattering[LayerIndex]; | |
| Fog.rgb += InScattering[LayerIndex] * FogInScattering[LayerIndex]; | |
| } | |
| return Fog; | |
| } | |
Xet Storage Details
- Size:
- 2.28 kB
- Xet hash:
- cb5f32431bb8696d79ccfe8509c5213df2b5822739955a480495b7a5b9782a67
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.