You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

227 lines
5.5 KiB

#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