Ejemplo n.º 1
0
        public static SunlightParameters LerpSunlightParameters(SunlightParameters from, SunlightParameters to, float weight)
        {
            var lerpSunlightParameters = new SunlightParameters();

            lerpSunlightParameters.orientationParameters = LerpSunlightOrientationParameters(from.orientationParameters, to.orientationParameters, weight);
            lerpSunlightParameters.lightParameters       = LightingUtilities.LerpLightParameters(from.lightParameters, to.lightParameters, weight);
            return(lerpSunlightParameters);
        }
Ejemplo n.º 2
0
    void applyPreset(object presetPath)
    {
        var preset           = (LightRigPreset)AssetDatabase.LoadAssetAtPath((string)presetPath, typeof(LightRigPreset));
        var presetLightCount = preset.lightTargetParametersList.Count;

        if (presetLightCount < 1)
        {
            Debug.LogWarning("Empty preset");
            return;
        }
        Debug.Log("Loading preset at " + presetPath);
        for (int i = 0; i < lightTargetParametersList.arraySize; i++)
        {
            targetLightRig.RemoveTargetedLight();
        }
        for (int i = 0; i < presetLightCount; i++)
        {
            targetLightRig.AddTargetedLight();
            serializedObject.Update();
            serializedObject.ApplyModifiedProperties();
            var fields = typeof(LightTargetParameters).GetFields();
            foreach (var field in fields)
            {
                var subProperty = lightTargetParametersList.GetArrayElementAtIndex(i).FindPropertyRelative(field.Name);
                if (field.GetValue(preset.lightTargetParametersList[i]) != null)
                {
                    var value = field.GetValue(preset.lightTargetParametersList[i]);
                    LightingUtilities.AssignSerializedProperty(subProperty, value);
                }
            }
            serializedObject.ApplyModifiedProperties();
        }
        targetLightRig.FillLists();
        lightCount      = lightTargetParametersList.arraySize;
        ifocus.intValue = 0;
        serializedObject.Update();
        serializedObject.ApplyModifiedProperties();
        changeFocus();
    }
 public void SetLightSettings()
 {
     LightingUtilities.ApplyLightParameters(directionalLight, modifiedLightParameters);
 }
Ejemplo n.º 4
0
    public override void ProcessFrame(Playable handle, FrameData info, object playerData)
    {
        var count = handle.GetInputCount();

        var cineLight = lightTargetGO.GetComponent <CineLight>();

        GameObject attachmentTransform = playerData as GameObject;

        if (attachmentTransform != null)
        {
            attachmentPosition = attachmentTransform.transform.position;
            cineLight.SetAttachmentTransform(attachmentTransform, true);
            lightTargetGO.transform.position = attachmentPosition;
        }

        light = cineLight.GetComponentInChildren <Light>();

        globalUseShadowCaster = false;

        List <float>           inputWeights               = new List <float>();
        CineLightParameters    fromCineLightParameters    = new CineLightParameters();
        LightParameters        fromLightParameters        = new LightParameters();
        ShadowCasterParameters fromShadowCasterParameters = new ShadowCasterParameters();
        float fadeWeight = new float();

        CineLightParameters    toCineLightParameters    = new CineLightParameters();
        LightParameters        toLightParameters        = new LightParameters();
        ShadowCasterParameters toShadowCasterParameters = new ShadowCasterParameters();
        float crossFadeWeight = new float();

        //Short loop, feed data for most cases
        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 <CineLightClipPlayable>)inputHandle).GetBehaviour();
                if (data != null)
                {
                    if (weight > 0)
                    {
                        inputWeights.Add(weight);
                        if (inputWeights.Count == 1)
                        {
                            fromCineLightParameters    = CineLightParameters.DeepCopy(data.cinelightParameters);
                            fromLightParameters        = LightParameters.DeepCopy(data.lightParameters);
                            fromShadowCasterParameters = ShadowCasterParameters.DeepCopy(data.shadowCasterParameters);
                            fadeWeight = weight;
                        }
                        if (inputWeights.Count == 2)
                        {
                            toCineLightParameters    = CineLightParameters.DeepCopy(data.cinelightParameters);
                            toLightParameters        = LightParameters.DeepCopy(data.lightParameters);
                            toShadowCasterParameters = ShadowCasterParameters.DeepCopy(data.shadowCasterParameters);
                            crossFadeWeight          = weight;
                        }
                        if (data.shadowCasterParameters.useShadowCaster == true)
                        {
                            globalUseShadowCaster = true;
                        }
                    }
                    if (inputWeights.Count > 2)
                    {
                        break;
                    }
                }
            }
        }

        if (inputWeights.Count == 1)
        {
            isFading      = true;
            isCrossFading = false;
        }
        else if (inputWeights.Count == 2)
        {
            isFading      = false;
            isCrossFading = true;
        }
        else
        {
            isFading      = false;
            isCrossFading = false;
        }

        if (isFading == true)
        {
            DoSingleClip(fromCineLightParameters, fromLightParameters, fromShadowCasterParameters, fadeWeight);
        }

        if (isCrossFading == true)
        {
            DoCrossFadeSettings(fromCineLightParameters, fromLightParameters, fromShadowCasterParameters, toCineLightParameters, toLightParameters, toShadowCasterParameters, crossFadeWeight, cineLight);
        }

        if (isFading == false && isCrossFading == false)
        {
            DoLongLoop(cineLight, handle, count);
        }

        mixedLightParameters.fadeDistance       = 99999;
        mixedLightParameters.shadowFadeDistance = 99999;
        mixedLightParameters.mode = LightmapPresetBakeType.Realtime;

        LightingUtilities.ApplyLightParameters(light, mixedLightParameters);
        CineLightUtilities.ApplyCineLightParameters(cineLight, mixedCineLightParameters);

        if (globalUseShadowCaster && cineLight.shadowCasterGO == null)
        {
            cineLight.useShadowCaster = true;
            cineLight.ApplyShadowCaster();
        }

        if (cineLight.shadowCasterGO != null)
        {
            cineLight.shadowCasterGO.GetComponent <MeshRenderer>().enabled = mixedShadowCasterParameters.useShadowCaster;
            cineLight.shadowCasterGO.transform.localScale    = new Vector3(mixedShadowCasterParameters.shadowCasterSize.x, mixedShadowCasterParameters.shadowCasterSize.y, 1);
            cineLight.shadowCasterGO.transform.localPosition = new Vector3(mixedShadowCasterParameters.shadowCasterOffset.x, mixedShadowCasterParameters.shadowCasterOffset.y, -mixedShadowCasterParameters.shadowCasterDistance);
        }

        lightTargetGO.SetActive(mixedLightParameters.intensity == 0 ? false : true);
    }
Ejemplo n.º 5
0
    //Not sure I want to support blending more than 2 lights
    private void DoLongLoop(CineLight cineLight, Playable handle, int count)
    {
        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 <CineLightClipPlayable>)inputHandle).GetBehaviour();
                if (data != null)
                {
                    var lerpedLightParameters = new LightParameters();
                    lerpedLightParameters = LightingUtilities.LerpLightParameters(neutralLightParameters, data.lightParameters, isFading ? 1 : weight);

                    //Not using shortest path
                    mixedCineLightParameters.Yaw                 += Mathf.Lerp(neutralCineLightParameters.Yaw, data.cinelightParameters.Yaw, isFading ? 1 : weight);
                    mixedCineLightParameters.Pitch               += Mathf.Lerp(neutralCineLightParameters.Pitch, data.cinelightParameters.Pitch, isFading ? 1 : weight);
                    mixedCineLightParameters.Roll                += Mathf.Lerp(neutralCineLightParameters.Roll, data.cinelightParameters.Roll, isFading ? 1 : weight);
                    mixedCineLightParameters.distance            += Mathf.Lerp(neutralCineLightParameters.distance, data.cinelightParameters.distance, isFading ? 1 : weight);
                    mixedCineLightParameters.offset              += Vector3.Lerp(neutralCineLightParameters.offset, data.cinelightParameters.offset, isFading ? 1 : weight);
                    mixedCineLightParameters.linkToCameraRotation = data.cinelightParameters.linkToCameraRotation;
                    if (weight > 0.5f)
                    {
                        cineLight.drawGizmo = data.cinelightParameters.drawGizmo;
                    }
                    if (weight == 1 || isFading)
                    {
                        mixedLightParameters.shadows = data.lightParameters.shadows;
                    }

                    mixedLightParameters.intensity          += Mathf.Lerp(neutralLightParameters.intensity, data.lightParameters.intensity, weight);
                    mixedLightParameters.range              += lerpedLightParameters.range;
                    mixedLightParameters.colorFilter        += lerpedLightParameters.colorFilter;
                    mixedLightParameters.lightAngle         += lerpedLightParameters.lightAngle;
                    mixedLightParameters.cullingMask         = lerpedLightParameters.cullingMask;
                    mixedLightParameters.shadowQuality       = lerpedLightParameters.shadowQuality;
                    mixedLightParameters.affectDiffuse       = lerpedLightParameters.affectDiffuse;
                    mixedLightParameters.affectSpecular      = lerpedLightParameters.affectSpecular;
                    mixedLightParameters.normalBias         += lerpedLightParameters.normalBias;
                    mixedLightParameters.ShadowNearClip     += lerpedLightParameters.ShadowNearClip;
                    mixedLightParameters.viewBiasMin        += lerpedLightParameters.viewBiasMin;
                    mixedLightParameters.viewBiasScale      += lerpedLightParameters.viewBiasScale;
                    mixedLightParameters.shadowStrength     += lerpedLightParameters.shadowStrength;
                    mixedLightParameters.shadowResolution   += lerpedLightParameters.shadowResolution;
                    mixedLightParameters.innerSpotPercent   += lerpedLightParameters.innerSpotPercent;
                    mixedLightParameters.maxSmoothness      += lerpedLightParameters.maxSmoothness;
                    mixedLightParameters.fadeDistance       += lerpedLightParameters.fadeDistance;
                    mixedLightParameters.shadowFadeDistance += lerpedLightParameters.shadowFadeDistance;

                    mixedShadowCasterParameters.shadowCasterDistance += Mathf.Lerp(0, data.shadowCasterParameters.shadowCasterDistance, isFading ? 1 : weight);
                    mixedShadowCasterParameters.shadowCasterOffset   += Vector2.Lerp(Vector2.zero, data.shadowCasterParameters.shadowCasterOffset, isFading ? 1 : weight);
                    mixedShadowCasterParameters.shadowCasterSize     += Vector2.Lerp(Vector2.zero, data.shadowCasterParameters.shadowCasterSize, isFading ? 1 : weight);

                    if (weight > 0.5 || isFading)
                    {
                        mixedShadowCasterParameters.useShadowCaster = data.shadowCasterParameters.useShadowCaster;
                        mixedCineLightParameters.drawGizmo          = data.cinelightParameters.drawGizmo;
                        mixedLightParameters.lightCookie            = data.lightParameters.lightCookie;
                    }
                }
            }
        }
    }
Ejemplo n.º 6
0
 public void SetLightSettings()
 {
     LightingUtilities.ApplyLightParameters(directionalLight, sunlightParameters.lightParameters);
 }