private void SetupReferences() { Instance = this; UpdateCollision(); WeatherMakerShaderIds.Initialize(); VolumeModifier = volumeModifier; Camera = (Camera == null ? Camera.main : Camera); }
private void SetupReferences() { Instance = this; UpdateCollision(); WeatherMakerShaderIds.Initialize(); }
public void SetShaderCloudParameters(Material m) { m.DisableKeyword("ENABLE_CLOUDS"); m.DisableKeyword("ENABLE_CLOUDS_MASK"); if (CloudsEnabled) { m.SetTexture("_CloudNoise1", CloudLayer1.CloudNoise ?? Texture2D.blackTexture); m.SetTexture("_CloudNoise2", CloudLayer2.CloudNoise ?? Texture2D.blackTexture); m.SetTexture("_CloudNoise3", CloudLayer3.CloudNoise ?? Texture2D.blackTexture); m.SetTexture("_CloudNoise4", CloudLayer4.CloudNoise ?? Texture2D.blackTexture); //WeatherMakerShaderIds.SetFloatArray(m, "_CloudSampleCount", (float)CloudSampleCount, (float)CloudSampleCount2, (float)CloudSampleCount3, (float)CloudSampleCount4); //WeatherMakerShaderIds.SetVectorArray(m, "_CloudSampleStepMultiplier", CloudSampleStepMultiplier, CloudSampleStepMultiplier2, CloudSampleStepMultiplier3, CloudSampleStepMultiplier4); //WeatherMakerShaderIds.SetFloatArray(m, "_CloudSampleCount", CloudSampleCount, CloudSampleCount2, CloudSampleCount3, CloudSampleCount4); //WeatherMakerShaderIds.SetVectorArray(m, "_CloudSampleDitherMagic", CloudSampleDitherMagic, CloudSampleDitherMagic2, CloudSampleDitherMagic3, CloudSampleDitherMagic4); //WeatherMakerShaderIds.SetFloatArray(m, "_CloudSampleDitherIntensity", CloudSampleDitherIntensity.x, CloudSampleDitherIntensity.y, CloudSampleDitherIntensity.z, CloudSampleDitherIntensity.w); WeatherMakerShaderIds.SetColorArray(m, "_CloudColor", CloudLayer1.CloudColor * WeatherMakerScript.EvaluateSunGradient(CloudLayer1.CloudGradientColor), CloudLayer2.CloudColor * WeatherMakerScript.EvaluateSunGradient(CloudLayer2.CloudGradientColor), CloudLayer3.CloudColor * WeatherMakerScript.EvaluateSunGradient(CloudLayer3.CloudGradientColor), CloudLayer4.CloudColor * WeatherMakerScript.EvaluateSunGradient(CloudLayer4.CloudGradientColor)); WeatherMakerShaderIds.SetColorArray(m, "_CloudEmissionColor", CloudLayer1.CloudEmissionColor, CloudLayer2.CloudEmissionColor, CloudLayer3.CloudEmissionColor, CloudLayer4.CloudEmissionColor); WeatherMakerShaderIds.SetFloatArray(m, "_CloudAmbientMultiplier", CloudLayer1.CloudAmbientMultiplier, CloudLayer2.CloudAmbientMultiplier, CloudLayer3.CloudAmbientMultiplier, CloudLayer4.CloudAmbientMultiplier); WeatherMakerShaderIds.SetVectorArray(m, "_CloudNoiseScale", CloudLayer1.CloudNoiseScale * scaleReducer, CloudLayer2.CloudNoiseScale * scaleReducer, CloudLayer3.CloudNoiseScale * scaleReducer, CloudLayer4.CloudNoiseScale * scaleReducer); WeatherMakerShaderIds.SetVectorArray(m, "_CloudNoiseMultiplier", CloudLayer1.CloudNoiseMultiplier, CloudLayer2.CloudNoiseMultiplier, CloudLayer3.CloudNoiseMultiplier, CloudLayer4.CloudNoiseMultiplier); float velMult = Time.deltaTime * 0.005f; WeatherMakerShaderIds.SetVectorArray(m, "_CloudNoiseVelocity", (cloudNoiseVelocityAccum1 += (CloudLayer1.CloudNoiseVelocity * velMult)), (cloudNoiseVelocityAccum2 += (CloudLayer2.CloudNoiseVelocity * velMult)), (cloudNoiseVelocityAccum3 += (CloudLayer3.CloudNoiseVelocity * velMult)), (cloudNoiseVelocityAccum4 += (CloudLayer4.CloudNoiseVelocity * velMult))); WeatherMakerShaderIds.SetFloatArrayRotation(m, "_CloudNoiseRotation", CloudLayer1.CloudNoiseRotation.LastValue, CloudLayer2.CloudNoiseRotation.LastValue, CloudLayer3.CloudNoiseRotation.LastValue, CloudLayer4.CloudNoiseRotation.LastValue); if (CloudLayer1.CloudNoiseMask == null && CloudLayer2.CloudNoiseMask == null && CloudLayer3.CloudNoiseMask == null && CloudLayer4.CloudNoiseMask == null) { m.EnableKeyword("ENABLE_CLOUDS"); } else { m.EnableKeyword("ENABLE_CLOUDS_MASK"); m.SetTexture("_CloudNoiseMask1", CloudLayer1.CloudNoiseMask ?? Texture2D.whiteTexture); m.SetTexture("_CloudNoiseMask2", CloudLayer2.CloudNoiseMask ?? Texture2D.whiteTexture); m.SetTexture("_CloudNoiseMask3", CloudLayer3.CloudNoiseMask ?? Texture2D.whiteTexture); m.SetTexture("_CloudNoiseMask4", CloudLayer4.CloudNoiseMask ?? Texture2D.whiteTexture); WeatherMakerShaderIds.SetVectorArray(m, "_CloudNoiseMaskOffset", CloudLayer1.CloudNoiseMaskOffset, CloudLayer2.CloudNoiseMaskOffset, CloudLayer3.CloudNoiseMaskOffset, CloudLayer4.CloudNoiseMaskOffset); WeatherMakerShaderIds.SetVectorArray(m, "_CloudNoiseMaskVelocity", (cloudNoiseMaskVelocityAccum1 += (CloudLayer1.CloudNoiseMaskVelocity * velMult)), (cloudNoiseMaskVelocityAccum2 += (CloudLayer2.CloudNoiseMaskVelocity * velMult)), (cloudNoiseMaskVelocityAccum3 += (CloudLayer3.CloudNoiseMaskVelocity * velMult)), (cloudNoiseMaskVelocityAccum4 += (CloudLayer4.CloudNoiseMaskVelocity * velMult))); WeatherMakerShaderIds.SetFloatArray(m, "_CloudNoiseMaskScale", CloudLayer1.CloudNoiseMaskScale * scaleReducer, CloudLayer2.CloudNoiseMaskScale * scaleReducer, CloudLayer3.CloudNoiseMaskScale * scaleReducer, CloudLayer4.CloudNoiseMaskScale * scaleReducer); WeatherMakerShaderIds.SetFloatArrayRotation(m, "_CloudNoiseMaskRotation", CloudLayer1.CloudNoiseMaskRotation.LastValue, CloudLayer2.CloudNoiseMaskRotation.LastValue, CloudLayer3.CloudNoiseMaskRotation.LastValue, CloudLayer4.CloudNoiseMaskRotation.LastValue); } WeatherMakerShaderIds.SetFloatArray(m, "_CloudHeight", CloudLayer1.CloudHeight, CloudLayer2.CloudHeight, CloudLayer3.CloudHeight, CloudLayer4.CloudHeight); WeatherMakerShaderIds.SetFloatArray(m, "_CloudCover", CloudLayer1.CloudCover, CloudLayer2.CloudCover, CloudLayer3.CloudCover, CloudLayer4.CloudCover); WeatherMakerShaderIds.SetFloatArray(m, "_CloudDensity", CloudLayer1.CloudDensity, CloudLayer2.CloudDensity, CloudLayer3.CloudDensity, CloudLayer4.CloudDensity); WeatherMakerShaderIds.SetFloatArray(m, "_CloudLightAbsorption", CloudLayer1.CloudLightAbsorption, CloudLayer2.CloudLightAbsorption, CloudLayer3.CloudLightAbsorption, CloudLayer4.CloudLightAbsorption); WeatherMakerShaderIds.SetFloatArray(m, "_CloudSharpness", CloudLayer1.CloudSharpness, CloudLayer2.CloudSharpness, CloudLayer3.CloudSharpness, CloudLayer4.CloudSharpness); WeatherMakerShaderIds.SetFloatArray(m, "_CloudShadowThreshold", CloudLayer1.CloudShadowThreshold, CloudLayer2.CloudShadowThreshold, CloudLayer3.CloudShadowThreshold, CloudLayer4.CloudShadowThreshold); float shadowDotPower = Mathf.Clamp(Mathf.Pow(3.0f * Vector3.Dot(Vector3.down, WeatherMakerScript.Instance.Sun.Transform.forward), 0.5f), 0.0f, 1.0f); float shadowPower1 = Mathf.Lerp(2.0f, CloudLayer1.CloudShadowPower, shadowDotPower); float shadowPower2 = Mathf.Lerp(2.0f, CloudLayer2.CloudShadowPower, shadowDotPower); float shadowPower3 = Mathf.Lerp(2.0f, CloudLayer3.CloudShadowPower, shadowDotPower); float shadowPower4 = Mathf.Lerp(2.0f, CloudLayer4.CloudShadowPower, shadowDotPower); WeatherMakerShaderIds.SetFloatArray(m, "_CloudShadowPower", shadowPower1, shadowPower2, shadowPower3, shadowPower4); WeatherMakerShaderIds.SetFloatArray(m, "_CloudRayOffset", CloudLayer1.CloudRayOffset, CloudLayer2.CloudRayOffset, CloudLayer3.CloudRayOffset, CloudLayer4.CloudRayOffset); #if UNITY_EDITOR if (Application.isPlaying) { #endif float cover = CloudCoverTotal * (1.5f - CloudLightAbsorptionTotal); float sunIntensityMultiplier = Mathf.Clamp(1.0f - (CloudDensityTotal * 0.85f), 0.0f, 1.0f); WeatherMakerScript.Instance.DayNightScript.DirectionalLightIntensityMultipliers["WeatherMakerFullScreenCloudsScript"] = sunIntensityMultiplier * Mathf.Lerp(1.0f, DirectionalLightIntensityMultiplier, cover); float sunShadowMultiplier = Mathf.Lerp(1.0f, 0.0f, Mathf.Clamp(((CloudDensityTotal + cover) * 0.85f), 0.0f, 1.0f)); WeatherMakerScript.Instance.DayNightScript.DirectionalLightShadowIntensityMultipliers["WeatherMakerFullScreenCloudsScript"] = sunShadowMultiplier * Mathf.Lerp(1.0f, DirectionalLightShadowStrengthMultiplier, cover); #if UNITY_EDITOR } #endif } else { #if UNITY_EDITOR if (Application.isPlaying) { #endif WeatherMakerScript.Instance.DayNightScript.DirectionalLightIntensityMultipliers["WeatherMakerFullScreenCloudsScript"] = 1.0f; WeatherMakerScript.Instance.DayNightScript.DirectionalLightShadowIntensityMultipliers["WeatherMakerFullScreenCloudsScript"] = 1.0f; #if UNITY_EDITOR } #endif } }