#ifndef FOG_VOLUME_COMMON_INPUTS_INCLUDED #define FOG_VOLUME_COMMON_INPUTS_INCLUDED uniform sampler2D _Gradient, _ValueNoise; #ifdef _FOG_VOLUME_NOISE uniform sampler3D _NoiseVolume, _NoiseVolume2; sampler2D CoverageTex; #endif float Collisions = 0; half4 _AmbientHeightAbsorption; #define _AmbientHeightAbsorptionMin _AmbientHeightAbsorption.x #define _AmbientHeightAbsorptionMax _AmbientHeightAbsorption.y #ifdef HEIGHT_GRAD half4 _VerticalGradientParams; #define GradMin _VerticalGradientParams.x #define GradMax _VerticalGradientParams.y #define GradMin2 _VerticalGradientParams.z #define GradMax2 _VerticalGradientParams.w #endif #ifdef DEBUG sampler2D _PerformanceLUT; #endif #ifdef _FOG_LOWRES_RENDERER sampler2D RT_Depth, RT_DepthR; #endif #ifdef VOLUME_SHADOWS sampler2D LightshaftTex; #endif #ifdef HALO sampler2D _LightHaloTexture; fixed _HaloOpticalDispersion, _HaloIntensity, _HaloWidth, _HaloRadius, _HaloAbsorption; #endif #ifdef ExternalDepth sampler2D _CustomCameraDepthTexture; #else sampler2D _CameraDepthTexture; #endif int STEP_COUNT = 200; int _ProxyVolume; int _AmbientAffectsFogColor; #ifdef DF uniform float4x4 _PrimitivesTransform[20]; uniform half _PrimitiveEdgeSoftener; uniform float4 _PrimitivePosition[20], _PrimitiveScale[20], _PrimitiveData[20]; int _PrimitiveCount = 0; // Smaller than 1.0f -> BoxCollider. // Larger than 1.0f and smaller than 2.0f -> SphereCollider. #define _PrimitiveShapeType(i) _PrimitiveData[i].x // Smaller than 1.0f -> Additive. // Larger than 1.0f and smaller than 2.0f -> Subtractive. #define _PrimitiveActionType(i) _PrimitiveData[i].y #endif const static int MaxVisibleLights = 64; #if SHADER_API_GLCORE || SHADER_API_D3D11 | SHADER_API_METAL #if ATTEN_METHOD_1 || ATTEN_METHOD_2 || ATTEN_METHOD_3 uniform float4 _LightData[MaxVisibleLights]; #define _LightIntensity(i) _LightData[i].x #define _LightRange(i) _LightData[i].y #define _LightSpotAngle(i) _LightData[i].z uniform float4 _LightPositions[MaxVisibleLights], _LightColors[MaxVisibleLights], _LightRotations[MaxVisibleLights]; half PointLightingDistance, PointLightingDistance2Camera; #endif #endif #ifdef _SHADE int _SelfShadowSteps; float4 _SelfShadowColor; #endif //uniform int STEP_COUNT = 50, int _LightsCount = 0, Octaves, _DebugMode, SamplingMethod, DirectLightingShadowSteps; #if DIRECTIONAL_LIGHTING half DirectLightingShadowDensity; float4 LightExtinctionColor; #endif uniform float4 _Color, _FogColor, _InscatteringColor, _BoxMin, _BoxMax, Stretch, _LightColor, _AmbientColor, VolumeSize, VolumeFogInscatteringColor, _VolumePosition; uniform float3 L = float3(0, 0, 1), _LightLocalDirection, //_CameraForward, _SliceNormal, Speed = 1; int VolumeFogInscatterColorAffectedWithFogColor = 1; uniform half DetailTiling, _PrimitiveCutout, HeightAbsorption, _LightExposure, VolumeFogInscatteringIntensity, VolumeFogInscatteringAnisotropy, VolumeFogInscatteringStartDistance, VolumeFogInscatteringTransitionWideness, _PushAlpha, _DetailMaskingThreshold, //_DetailSamplingBaseOpacityLimit, _OptimizationFactor, _BaseRelativeSpeed, _DetailRelativeSpeed, _NoiseDetailRange, _Curl, Absorption, BaseTiling, _Cutoff, Coverage, NoiseDensity, LambertianBias, DirectLightingAmount, NormalDistance, _Vortex = 1, _RotationSpeed, _Rotation, DirectLightingDistance, _FOV, _DirectionalLightingDistance, //GradMin, // GradMax, Constrain, SphericalFadeDistance, DetailDistance, _SceneIntersectionSoftness, _InscatteringIntensity = 1, InscatteringShape, _Visibility, InscatteringStartDistance = 100, IntersectionThreshold, InscatteringTransitionWideness = 500, _3DNoiseScale, _RayStep, gain = 1, threshold = 0, Shade, _SceneIntersectionThreshold, ShadowBrightness, _jitter, FadeDistance, Offset = 0, Gamma = 1, Exposure; struct v2f { float4 pos : SV_POSITION; float3 Wpos : TEXCOORD0; float4 ScreenUVs : TEXCOORD1; float3 LocalPos : TEXCOORD2; float3 ViewPos : TEXCOORD3; float3 LocalEyePos : TEXCOORD4; float3 LightLocalDir : TEXCOORD5; float3 WorldEyeDir : TEXCOORD6; float2 uv0 : TEXCOORD7; float3 SliceNormal : TEXCOORD8; float3 worldNormal : TEXCOORD9; }; v2f vert(appdata_full i) { v2f o; o.pos = UnityObjectToClipPos(i.vertex); o.Wpos = mul((float4x4)unity_ObjectToWorld, float4(i.vertex.xyz, 1)).xyz; o.ScreenUVs = ComputeScreenPos(o.pos); o.ViewPos = UnityObjectToViewPos( float4(i.vertex.xyz, 1)).xyz; o.LocalPos = i.vertex.xyz; o.LocalEyePos = mul((float4x4)unity_WorldToObject, (float4(_WorldSpaceCameraPos, 1))).xyz; o.LightLocalDir = mul((float4x4)unity_WorldToObject, (float4(L.xyz, 1))).xyz; o.WorldEyeDir = (o.Wpos.xyz - _WorldSpaceCameraPos.xyz); o.uv0 = i.texcoord; //WIN http://answers.unity3d.com/questions/192553/camera-forward-vector-in-shader.html o.SliceNormal = UNITY_MATRIX_IT_MV[2].xyz;// mul((float4x4)unity_WorldToObject, _SliceNormal).xyz; o.worldNormal = float3(0, -1, 0);//upwards //o.worldNormal = UnityObjectToWorldNormal(float3(0,0 , 1)); return o; } #endif