Exemple #1
0
        public static SunlightParameters DeepCopy(SunlightParameters c)
        {
            SunlightParameters temp = new SunlightParameters();

            temp.orientationParameters = SunlightOrientationParameters.DeepCopy(c.orientationParameters);
            temp.lightParameters       = LightParameters.DeepCopy(c.lightParameters);
            temp.colorGradient         = c.colorGradient;
            temp.intensityCurve        = c.intensityCurve;
            return(temp);
        }
Exemple #2
0
        public static SunlightOrientationParameters DeepCopy(SunlightOrientationParameters c)
        {
            SunlightOrientationParameters temp = new SunlightOrientationParameters();

            temp.yAxis     = c.yAxis;
            temp.lattitude = c.lattitude;
            temp.timeOfDay = c.timeOfDay;
            temp.roll      = c.roll;
            return(temp);
        }
Exemple #3
0
        public static SunlightOrientationParameters operator +(SunlightOrientationParameters x, SunlightOrientationParameters y)
        {
            var addition = new SunlightOrientationParameters
            {
                yAxis     = x.yAxis + y.yAxis,
                timeOfDay = x.timeOfDay + y.timeOfDay,
                lattitude = x.lattitude + y.lattitude,
                roll      = x.roll + y.roll
            };

            return(addition);
        }
Exemple #4
0
        public static SunlightOrientationParameters LerpSunlightOrientationParameters(SunlightOrientationParameters from, SunlightOrientationParameters to, float weight)
        {
            var lerpSunlightOrientationParameters = new SunlightOrientationParameters();

            //Orientation
            lerpSunlightOrientationParameters.lattitude = Mathf.Lerp(from.lattitude, to.lattitude, weight);
            lerpSunlightOrientationParameters.yAxis     = Mathf.Lerp(from.yAxis, to.yAxis, weight);
            lerpSunlightOrientationParameters.timeOfDay = Mathf.Lerp(from.timeOfDay, to.timeOfDay, weight);
            lerpSunlightOrientationParameters.roll      = Mathf.Lerp(from.roll, to.roll, weight);

            return(lerpSunlightOrientationParameters);
        }
        private void GatherOverrides()
        {
            modifiedOrientationParameters = SunlightOrientationParameters.DeepCopy(sunlightParameters.orientationParameters);

            if (stack == null)
            {
                return;
            }

            var sunProps = stack.GetComponent <SunlightProperties>();

            if (sunlightParameters.lightParameters == null || modifiedOrientationParameters == null)
            {
                return;
            }

            if (sunProps.lattitude.overrideState)
            {
                modifiedOrientationParameters.lattitude = sunProps.lattitude.value;
            }
            if (sunProps.YAxis.overrideState)
            {
                modifiedOrientationParameters.yAxis = sunProps.YAxis.value;
            }

            if (Application.isPlaying)
            {
                //modifiedOrientationParameters.timeOfDay = Manager.Get<TimeOfDayManager>().timeOfDay;
                modifiedOrientationParameters.timeOfDay = Globals.GetFloat("TimeOfDay", Globals.Scope.Global);
            }

            //If overridden in volumes intensity is constant, otherwise driven by curve * intensity
            modifiedLightParameters = LightParameters.DeepCopy(sunlightParameters.lightParameters);

            if (sunProps.intensity.overrideState)
            {
                modifiedLightParameters.intensity = sunProps.intensity.value;
            }
            else if (sunlightParameters.intensityCurve != null)
            {
                modifiedLightParameters.intensity = sunlightParameters.intensityCurve.Evaluate(sunlightParameters.orientationParameters.timeOfDay) * sunlightParameters.lightParameters.intensity;
            }
            else if (sunlightParameters.intensityCurve == null)
            {
                modifiedLightParameters.intensity = sunlightParameters.lightParameters.intensity;
            }

            //If overridden intensity is constant, otherwise driven by gradient
            if (sunProps.color.overrideState)
            {
                modifiedLightParameters.colorFilter = sunProps.color.value;
            }
            else if (sunlightParameters.colorGradient != null)
            {
                modifiedLightParameters.colorFilter = sunlightParameters.colorGradient.Evaluate(sunlightParameters.orientationParameters.timeOfDay / 24);
            }

            if (sunProps.indirectMultiplier.overrideState)
            {
                modifiedLightParameters.indirectIntensity = sunProps.indirectMultiplier.value;
            }
            if (sunProps.cookieTexture.overrideState)
            {
                modifiedLightParameters.lightCookie = sunProps.cookieTexture.value;
            }
            if (sunProps.cookieSize.overrideState)
            {
                modifiedLightParameters.cookieSize = sunProps.cookieSize.value;
            }
            if (sunProps.shadowResolution.overrideState)
            {
                modifiedLightParameters.shadowResolution = sunProps.shadowResolution.value;
            }
            if (sunProps.shadowTint.overrideState)
            {
                modifiedLightParameters.shadowTint = sunProps.shadowTint.value;
            }
            if (sunProps.penumbraTint.overrideState)
            {
                modifiedLightParameters.penumbraTint = sunProps.penumbraTint.value;
            }
        }
 void ApplyDefaults()
 {
     modifiedLightParameters       = sunlightParameters.lightParameters;
     modifiedOrientationParameters = sunlightParameters.orientationParameters;
 }
        // Called each frame the mixer is active, after inputs are processed
        public override void ProcessFrame(Playable handle, FrameData info, object playerData)
        {
            if (playerData == null)
            {
                return;
            }

            Volume volume = playerData as Volume;

            VolumeProfile      volumeProfile = Application.isPlaying ? volume.profile : volume.sharedProfile;
            SunlightProperties sunprops      = ScriptableObject.CreateInstance <SunlightProperties>();

            SunlightOrientationParameters neutralOrientationParameters = new SunlightOrientationParameters(true);
            SunlightOrientationParameters mixedOrientationParameters   = new SunlightOrientationParameters(true);
            float overriddenIntensity    = 0;
            Color overriddenColor        = Color.black;
            bool  overrideShadowTint     = false;
            Color overriddenShadowTint   = Color.black;
            bool  overridePenumbraTint   = false;
            Color overriddenPenumbraTint = Color.black;

            bool overrideYAxis     = false;
            bool overrideLattitude = false;
            //bool overrideTimeOfDay = false;
            bool overrideIntensity = false;
            bool overrideColor     = false;

            if (volumeProfile.TryGet <SunlightProperties>(out sunprops))
            {
                var count = handle.GetInputCount();
                for (var i = 0; i < count; i++)
                {
                    var inputHandle = handle.GetInput(i);
                    var weight      = handle.GetInputWeight(i);

                    if (inputHandle.IsValid() &&
                        inputHandle.GetPlayState() == PlayState.Playing &&
                        weight > 0)
                    {
                        var data = ((ScriptPlayable <SunlightClipPlayable>)inputHandle).GetBehaviour();
                        if (data != null)
                        {
                            var weightedSunlightParameters = SunlightLightingUtilities.LerpSunlightOrientationParameters(neutralOrientationParameters, data.orientationParameters, weight);
                            overriddenIntensity    += data.intensity * weight;
                            overriddenColor        += data.color * weight;
                            overrideShadowTint      = overrideShadowTint || data.overrideShadowTint;
                            overriddenShadowTint   += data.shadowTint * weight;
                            overridePenumbraTint    = overridePenumbraTint || data.overridePenumbraTint;
                            overriddenPenumbraTint += data.penumbraTint * weight;

                            mixedOrientationParameters += weightedSunlightParameters;

                            if (data.overrideYAxis)
                            {
                                overrideYAxis = true;
                            }
                            if (data.overrideLattitude)
                            {
                                overrideLattitude = true;
                            }
//                            if (data.overrideTimeOfDay)
//                                overrideTimeOfDay = true;
                            if (data.overrideIntensity)
                            {
                                overrideIntensity = true;
                            }
                            if (data.overrideColor)
                            {
                                overrideColor = true;
                            }
                        }
                    }
                }
                sunprops.YAxis.overrideState = overrideYAxis;
                if (overrideYAxis)
                {
                    sunprops.YAxis.value = mixedOrientationParameters.yAxis;
                }
                sunprops.lattitude.overrideState = overrideLattitude;
                if (overrideLattitude)
                {
                    sunprops.lattitude.value = mixedOrientationParameters.lattitude;
                }
                //sunprops.timeOfDay.overrideState = overrideTimeOfDay;
                //if (overrideTimeOfDay)
                //{
                //    sunprops.timeOfDay.value = mixedOrientationParameters.timeOfDay;
                //}
                sunprops.intensity.overrideState = overrideIntensity;
                if (overrideIntensity)
                {
                    sunprops.intensity.value = overriddenIntensity;
                }
                sunprops.color.overrideState = overrideColor;
                if (overrideColor)
                {
                    sunprops.color.value = overriddenColor;
                }
                sunprops.shadowTint.overrideState = overrideShadowTint;
                if (overrideShadowTint)
                {
                    sunprops.shadowTint.value = overriddenShadowTint;
                }
                sunprops.penumbraTint.overrideState = overridePenumbraTint;
                if (overridePenumbraTint)
                {
                    sunprops.penumbraTint.value = overriddenPenumbraTint;
                }
                //sunprops.cookieTexture.value = mixedSunlightParameters.lightParameters.lightCookie;
                //sunprops.cookieSize.value = mixedSunlightParameters.lightParameters.cookieSize;
            }
        }
Exemple #8
0
 public SunlightParameters(bool neutral)
 {
     orientationParameters = new SunlightOrientationParameters(true);
     lightParameters       = new LightParameters(LightType.Directional, LightmapPresetBakeType.Mixed, true);
 }
        private void GatherOverrides()
        {
            modifiedOrientationParameters = SunlightOrientationParameters.DeepCopy(sunlightParameters.orientationParameters);

            if (stack == null)
            {
                return;
            }

            var sunProps = stack.GetComponent <SunlightProperties>();

            if (sunlightParameters.lightParameters == null || modifiedOrientationParameters == null)
            {
                return;
            }

            if (sunProps.lattitude.overrideState)
            {
                modifiedOrientationParameters.lattitude = sunProps.lattitude.value;
            }
            if (sunProps.YAxis.overrideState)
            {
                modifiedOrientationParameters.yAxis = sunProps.YAxis.value;
            }
            if (sunProps.timeOfDay.overrideState)
            {
                modifiedOrientationParameters.timeOfDay = sunProps.timeOfDay.value;
            }

            //If overridden intensity is constant, otherwise drive by curve
            if (sunProps.intensity.overrideState)
            {
                sunlightParameters.lightParameters.intensity = sunProps.intensity;
            }
            else if (sunlightParameters.intensityCurve != null)
            {
                sunlightParameters.lightParameters.intensity = sunlightParameters.intensityCurve.Evaluate(sunlightParameters.orientationParameters.timeOfDay);
            }
            if (sunlightParameters.intensityCurve == null)
            {
                Debug.LogWarning("Sun intensity curve is null");
            }

            //If overridden intensity is constant, otherwise driven by gradient
            if (sunProps.color.overrideState)
            {
                sunlightParameters.lightParameters.colorFilter = sunProps.color;
            }
            else if (sunlightParameters.colorGradient != null)
            {
                sunlightParameters.lightParameters.colorFilter = sunlightParameters.colorGradient.Evaluate(sunlightParameters.orientationParameters.timeOfDay / 24);
            }

            if (sunProps.indirectMultiplier.overrideState)
            {
                sunlightParameters.lightParameters.indirectIntensity = sunProps.indirectMultiplier;
            }
            if (sunProps.cookieTexture.overrideState)
            {
                sunlightParameters.lightParameters.lightCookie = sunProps.cookieTexture;
            }
            if (sunProps.cookieSize.overrideState)
            {
                sunlightParameters.lightParameters.cookieSize = sunProps.cookieSize;
            }
            if (sunProps.shadowResolution.overrideState)
            {
                sunlightParameters.lightParameters.shadowResolution = sunProps.shadowResolution;
            }
        }