Exemplo n.º 1
0
 private void SetupReferences()
 {
     Instance = this;
     UpdateCollision();
     WeatherMakerShaderIds.Initialize();
     VolumeModifier = volumeModifier;
     Camera         = (Camera == null ? Camera.main : Camera);
 }
Exemplo n.º 2
0
 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
            }
        }