public static void ApplyCineLightParameters(CineLight light, CineLightParameters parameters) { light.offset = parameters.offset; light.LightParentYaw.transform.localPosition = parameters.offset; light.Yaw = parameters.Yaw; light.LightParentYaw.transform.localRotation = Quaternion.Euler(0, parameters.Yaw, 0); light.Pitch = parameters.Pitch; light.LightParentPitch.transform.localRotation = Quaternion.Euler(-parameters.Pitch, 0, 0); light.Roll = parameters.Roll; light.lightGO.transform.localRotation = Quaternion.Euler(0, 180, parameters.Roll + 180); light.distance = parameters.distance; light.lightGO.transform.localPosition = new Vector3(0, 0, parameters.distance); light.timelineSelected = parameters.drawGizmo; }
static void DrawCinelightGizmo(CineLight scr, GizmoType gizmoType) { var gizmosIntensity = 0.1f; if (Selection.activeGameObject == scr.gameObject || scr.timelineSelected) { gizmosIntensity = 1.0f; } Gizmos.color = Handles.color = new Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, gizmosIntensity); if (scr.LightParentYaw != null && scr.drawGizmo) { LightingGizmos.DrawCross(scr.LightParentYaw.transform); if (scr.lightGO.GetComponent <Light>().type != LightType.Spot) { Debug.Log("light is not a spotlight"); return; } LightingGizmos.DrawSpotlightGizmo(scr.lightGO.GetComponent <Light>()); } }
//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; } } } } }
private void DoCrossFadeSettings(CineLightParameters fromCineLightParameters, LightParameters fromLightParameters, ShadowCasterParameters fromShadowCasterParameters, CineLightParameters toCineLightParameters, LightParameters toLightParameters, ShadowCasterParameters toShadowCasterParameters, float weight, CineLight cineLight) { //Shortest Path Rotation if (Mathf.Abs(fromCineLightParameters.Yaw - toCineLightParameters.Yaw) > 180) { if (fromCineLightParameters.Yaw > 0) { mixedCineLightParameters.Yaw = Mathf.Lerp(fromCineLightParameters.Yaw - 360, toCineLightParameters.Yaw, weight); } else { mixedCineLightParameters.Yaw = Mathf.Lerp(fromCineLightParameters.Yaw + 360, toCineLightParameters.Yaw, weight); } } else { mixedCineLightParameters.Yaw = Mathf.Lerp(fromCineLightParameters.Yaw, toCineLightParameters.Yaw, weight); } mixedCineLightParameters.Pitch = Mathf.Lerp(fromCineLightParameters.Pitch, toCineLightParameters.Pitch, weight); mixedCineLightParameters.Roll = Mathf.Lerp(fromCineLightParameters.Roll, toCineLightParameters.Roll, weight); mixedCineLightParameters.distance = Mathf.Lerp(fromCineLightParameters.distance, toCineLightParameters.distance, weight); mixedCineLightParameters.offset = Vector3.Lerp(fromCineLightParameters.offset, toCineLightParameters.offset, weight); mixedCineLightParameters.linkToCameraRotation = toCineLightParameters.linkToCameraRotation; mixedLightParameters.intensity = Mathf.Lerp(fromLightParameters.intensity, toLightParameters.intensity, weight); mixedLightParameters.range = Mathf.Lerp(fromLightParameters.range, toLightParameters.range, weight); mixedLightParameters.colorFilter = Color.Lerp(fromLightParameters.colorFilter, toLightParameters.colorFilter, weight); mixedLightParameters.lightAngle = Mathf.Lerp(fromLightParameters.lightAngle, toLightParameters.lightAngle, weight); mixedLightParameters.normalBias = Mathf.Lerp(fromLightParameters.normalBias, toLightParameters.normalBias, weight); mixedLightParameters.ShadowNearClip = Mathf.Lerp(fromLightParameters.ShadowNearClip, toLightParameters.ShadowNearClip, weight); mixedLightParameters.viewBiasMin = Mathf.Lerp(fromLightParameters.viewBiasMin, toLightParameters.viewBiasMin, weight); mixedLightParameters.viewBiasScale = Mathf.Lerp(fromLightParameters.viewBiasScale, toLightParameters.viewBiasScale, weight); mixedLightParameters.shadowStrength = Mathf.Lerp(fromLightParameters.shadowStrength, toLightParameters.shadowStrength, weight); mixedLightParameters.shadowResolution = (int)Mathf.Lerp(fromLightParameters.shadowResolution, toLightParameters.shadowResolution, weight); mixedLightParameters.innerSpotPercent = Mathf.Lerp(fromLightParameters.innerSpotPercent, toLightParameters.innerSpotPercent, weight); mixedLightParameters.maxSmoothness = Mathf.Lerp(fromLightParameters.maxSmoothness, toLightParameters.maxSmoothness, weight); mixedShadowCasterParameters.shadowCasterDistance = Mathf.Lerp(fromShadowCasterParameters.shadowCasterDistance, toShadowCasterParameters.shadowCasterDistance, weight); mixedShadowCasterParameters.shadowCasterOffset = Vector2.Lerp(fromShadowCasterParameters.shadowCasterOffset, toShadowCasterParameters.shadowCasterOffset, weight); mixedShadowCasterParameters.shadowCasterSize = Vector2.Lerp(fromShadowCasterParameters.shadowCasterSize, toShadowCasterParameters.shadowCasterSize, weight); //Doesn't interpolate if (weight < 0.5f) { cineLight.drawGizmo = fromCineLightParameters.drawGizmo; mixedLightParameters.type = fromLightParameters.type; mixedLightParameters.shadows = fromLightParameters.shadows; mixedLightParameters.affectDiffuse = fromLightParameters.affectDiffuse; mixedLightParameters.affectSpecular = fromLightParameters.affectSpecular; mixedLightParameters.cullingMask = fromLightParameters.cullingMask; mixedLightParameters.shadowQuality = fromLightParameters.shadowQuality; mixedShadowCasterParameters.useShadowCaster = fromShadowCasterParameters.useShadowCaster; mixedCineLightParameters.drawGizmo = fromCineLightParameters.drawGizmo; mixedLightParameters.lightCookie = fromLightParameters.lightCookie; } if (weight > 0.5f) { cineLight.drawGizmo = toCineLightParameters.drawGizmo; mixedLightParameters.type = toLightParameters.type; mixedLightParameters.shadows = toLightParameters.shadows; mixedLightParameters.affectDiffuse = toLightParameters.affectDiffuse; mixedLightParameters.affectSpecular = toLightParameters.affectSpecular; mixedLightParameters.cullingMask = toLightParameters.cullingMask; mixedLightParameters.shadowQuality = toLightParameters.shadowQuality; mixedShadowCasterParameters.useShadowCaster = toShadowCasterParameters.useShadowCaster; mixedCineLightParameters.drawGizmo = toCineLightParameters.drawGizmo; mixedLightParameters.lightCookie = toLightParameters.lightCookie; } }
void OnEnable() { cineLight = (CineLight)serializedObject.targetObject; Light light = cineLight.GetComponentInChildren <Light>(); Transform lightTransform = light.transform; Transform lightParentPitchTransform = light.transform.parent; Transform lightParentYawTransform = lightParentPitchTransform.transform.parent; m_SerializedLight = new SerializedObject(light); m_SerializedLightParentYawTransform = new SerializedObject(lightParentYawTransform); m_SerializedLightTransform = new SerializedObject(lightTransform); m_SerializedLightParentPitchTransform = new SerializedObject(lightParentPitchTransform); //HDRP m_SerializedAdditionalLightData = new SerializedObject(light.gameObject.GetComponent <HDAdditionalLightData>()); m_SerializedAdditionalShadowData = new SerializedObject(light.gameObject.GetComponent <AdditionalShadowData>()); yaw = serializedObject.FindProperty("Yaw"); pitch = serializedObject.FindProperty("Pitch"); roll = serializedObject.FindProperty("Roll"); type = m_SerializedLight.FindProperty("m_Type"); range = m_SerializedLight.FindProperty("m_Range"); spotAngle = m_SerializedLight.FindProperty("m_SpotAngle"); cookie = m_SerializedLight.FindProperty("m_Cookie"); cookieSize = m_SerializedLight.FindProperty("m_CookieSize"); color = m_SerializedLight.FindProperty("m_Color"); //intensity = m_SerializedLight.FindProperty("m_Intensity"); bounceIntensity = m_SerializedLight.FindProperty("m_BounceIntensity"); colorTemperature = m_SerializedLight.FindProperty("m_ColorTemperature"); useColorTemperature = m_SerializedLight.FindProperty("m_UseColorTemperature"); shadowsType = m_SerializedLight.FindProperty("m_Shadows.m_Type"); shadowsQuality = m_SerializedLight.FindProperty("m_Shadows.m_Resolution"); shadowsNormalBias = m_SerializedLight.FindProperty("m_Shadows.m_NormalBias"); shadowsNearPlane = m_SerializedLight.FindProperty("m_Shadows.m_NearPlane"); lightmapping = m_SerializedLight.FindProperty("m_Lightmapping"); areaSizeX = m_SerializedLight.FindProperty("m_AreaSize.x"); areaSizeY = m_SerializedLight.FindProperty("m_AreaSize.y"); //bakedShadowRadius = m_SerializedLight.FindProperty("m_ShadowRadius"); //bakedShadowAngle = m_SerializedLight.FindProperty("m_ShadowAngle"); cullingMask = m_SerializedLight.FindProperty("m_CullingMask"); useShadowCaster = serializedObject.FindProperty("useShadowCaster"); shadowsCasterSize = serializedObject.FindProperty("shadowsCasterSize"); shadowsCasterDistance = serializedObject.FindProperty("shadowsCasterDistance"); shadowsCasterOffset = serializedObject.FindProperty("shadowsCasterOffset"); displayName = serializedObject.FindProperty("displayName"); drawGizmo = serializedObject.FindProperty("drawGizmo"); showEntities = serializedObject.FindProperty("showEntities"); lightParentYawLocalPosition = m_SerializedLightParentYawTransform.FindProperty("m_LocalPosition"); lightParentYawLocalRotation = m_SerializedLightParentYawTransform.FindProperty("m_LocalRotation"); lightParentPitchLocalRotation = m_SerializedLightParentPitchTransform.FindProperty("m_LocalRotation"); distance = m_SerializedLightTransform.FindProperty("m_LocalPosition.z"); lightRotation = m_SerializedLightTransform.FindProperty("m_LocalRotation"); innerSpotPercent = m_SerializedAdditionalLightData.FindProperty("m_InnerSpotPercent"); maxSmoothness = m_SerializedAdditionalLightData.FindProperty("maxSmoothness"); affectDiffuse = m_SerializedAdditionalLightData.FindProperty("affectDiffuse"); affectSpecular = m_SerializedAdditionalLightData.FindProperty("affectSpecular"); fadeDistance = m_SerializedAdditionalLightData.FindProperty("fadeDistance"); intensity = m_SerializedAdditionalLightData.FindProperty("intensity"); normalBiasMax = m_SerializedAdditionalShadowData.FindProperty("normalBiasMax"); shadowResolution = m_SerializedAdditionalShadowData.FindProperty("shadowResolution"); shadowFadeDistance = m_SerializedAdditionalShadowData.FindProperty("shadowFadeDistance"); viewBiasMin = m_SerializedAdditionalShadowData.FindProperty("viewBiasMin"); viewBiasScale = m_SerializedAdditionalShadowData.FindProperty("viewBiasScale"); normalBiasMin = m_SerializedAdditionalShadowData.FindProperty("normalBiasMin"); normalBiasMax = m_SerializedAdditionalShadowData.FindProperty("normalBiasMax"); shadowDimmer = m_SerializedAdditionalShadowData.FindProperty("shadowDimmer"); InitShadowCasterSerializedObject(); additionalLightData = (HDAdditionalLightData)m_SerializedAdditionalLightData.targetObject; }