protected override void OnEnable() { m_AdditionalLightData = lightProperty.gameObject.GetComponent <UniversalAdditionalLightData>(); settings.OnEnable(); init(m_AdditionalLightData); UpdateShowOptions(true); }
void init(UniversalAdditionalLightData additionalLightData) { if (additionalLightData == null) { return; } m_AdditionalLightDataSO = new SerializedObject(additionalLightData); m_UseAdditionalDataProp = m_AdditionalLightDataSO.FindProperty("m_UsePipelineSettings"); settings.ApplyModifiedProperties(); }
/// <summary> /// Gets or creates UP Light data /// </summary> /// <param name="light"></param> /// <returns></returns> public static UniversalAdditionalLightData GetUPLightData(Light light) { if (light == null) { return(null); } UniversalAdditionalLightData lightData = light.GetComponent <UniversalAdditionalLightData>(); if (lightData == null) { lightData = light.gameObject.AddComponent <UniversalAdditionalLightData>(); } return(lightData); }
static internal UniversalAdditionalLightData GetAdditionalLightData(Light light) { UniversalAdditionalLightData add = null; // Light reference can be null for particle lights. if (light != null) { light.TryGetComponent <UniversalAdditionalLightData>(out add); } // Light should always have additional data, however preview light right don't have, so we must handle the case by assigning HDUtils.s_DefaultHDAdditionalLightData if (add == null) { add = s_DefaultAdditionalLightData; } return(add); }
void MultipleAdditionalLightDataCheck() { var additionalLightList = new List <Object>(); foreach (var lightTarget in targets) { var additionData = (lightTarget as Component).gameObject.GetComponent <UniversalAdditionalLightData>(); if (additionData == null) { additionData = (lightTarget as Component).gameObject.AddComponent <UniversalAdditionalLightData>(); } additionalLightList.Add(additionData); } m_AdditionalLightData = (target as Component).gameObject.GetComponent <UniversalAdditionalLightData>(); init(additionalLightList); }
void InitializeLightConstants(NativeArray <VisibleLight> lights, int lightIndex, out Vector4 lightPos, out Vector4 lightColor, out Vector4 lightAttenuation, out Vector4 lightSpotDir, out Vector4 lightOcclusionProbeChannel, out uint lightLayerMask) { UniversalRenderPipeline.InitializeLightConstants_Common(lights, lightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionProbeChannel); lightLayerMask = 0; // When no lights are visible, main light will be set to -1. // In this case we initialize it to default values and return if (lightIndex < 0) { return; } VisibleLight lightData = lights[lightIndex]; Light light = lightData.light; if (light == null) { return; } if (light.bakingOutput.lightmapBakeType == LightmapBakeType.Mixed && lightData.light.shadows != LightShadows.None && m_MixedLightingSetup == MixedLightingSetup.None) { switch (light.bakingOutput.mixedLightingMode) { case MixedLightingMode.Subtractive: m_MixedLightingSetup = MixedLightingSetup.Subtractive; break; case MixedLightingMode.Shadowmask: m_MixedLightingSetup = MixedLightingSetup.ShadowMask; break; } } UniversalAdditionalLightData additionalLightData = GetAdditionalLightData(light); lightLayerMask = (uint)additionalLightData.lightLayerMask; }
void DrawAdditionalShadowData() { bool hasChanged = false; int selectedUseAdditionalData; if (m_AdditionalLightDataSO == null) { selectedUseAdditionalData = 1; } else { m_AdditionalLightDataSO.Update(); selectedUseAdditionalData = !m_AdditionalLightData.usePipelineSettings ? 0 : 1; } Rect controlRectAdditionalData = EditorGUILayout.GetControlRect(true); if (m_AdditionalLightDataSO != null) { EditorGUI.BeginProperty(controlRectAdditionalData, Styles.shadowBias, m_UseAdditionalDataProp); } EditorGUI.BeginChangeCheck(); selectedUseAdditionalData = EditorGUI.IntPopup(controlRectAdditionalData, Styles.shadowBias, selectedUseAdditionalData, Styles.displayedDefaultOptions, Styles.optionDefaultValues); if (EditorGUI.EndChangeCheck()) { hasChanged = true; } if (m_AdditionalLightDataSO != null) { EditorGUI.EndProperty(); } if (selectedUseAdditionalData != 1 && m_AdditionalLightDataSO != null) { EditorGUI.indentLevel++; EditorGUILayout.Slider(settings.shadowsBias, 0f, 10f, "Depth"); EditorGUILayout.Slider(settings.shadowsNormalBias, 0f, 10f, "Normal"); EditorGUI.indentLevel--; m_AdditionalLightDataSO.ApplyModifiedProperties(); } if (hasChanged) { if (m_AdditionalLightDataSO == null) { lightProperty.gameObject.AddComponent <UniversalAdditionalLightData>(); m_AdditionalLightData = lightProperty.gameObject.GetComponent <UniversalAdditionalLightData>(); UniversalRenderPipelineAsset asset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset; settings.shadowsBias.floatValue = asset.shadowDepthBias; settings.shadowsNormalBias.floatValue = asset.shadowNormalBias; init(m_AdditionalLightData); } m_UseAdditionalDataProp.intValue = selectedUseAdditionalData; m_AdditionalLightDataSO.ApplyModifiedProperties(); } }
void DrawShadowsResolutionGUI() { int shadowResolutionTier; if (m_AdditionalLightDataSO == null) { shadowResolutionTier = UniversalAdditionalLightData.AdditionalLightsShadowDefaultResolutionTier; } else { m_AdditionalLightDataSO.Update(); shadowResolutionTier = m_AdditionalLightData.additionalLightsShadowResolutionTier; } Rect controlRectAdditionalData = EditorGUILayout.GetControlRect(true); if (m_AdditionalLightDataSO != null) { EditorGUI.BeginProperty(controlRectAdditionalData, Styles.ShadowResolution, m_AdditionalLightsShadowResolutionTierProp); } EditorGUI.BeginChangeCheck(); // UI code adapted from HDRP LevelFieldGUI in com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedScalableSettingValue.cs const int k_IndentPerLevel = 15; const int k_PrefixPaddingRight = 2; const int k_ValueUnitSeparator = 2; const int k_EnumWidth = 70; float indent = k_IndentPerLevel * EditorGUI.indentLevel; Rect labelRect = controlRectAdditionalData; Rect levelRect = controlRectAdditionalData; Rect fieldRect = controlRectAdditionalData; labelRect.width = EditorGUIUtility.labelWidth; // Dealing with indentation add space before the actual drawing // Thus resize accordingly to have a coherent aspect levelRect.x += labelRect.width - indent + k_PrefixPaddingRight; levelRect.width = k_EnumWidth + indent; fieldRect.x = levelRect.x + levelRect.width + k_ValueUnitSeparator - indent; fieldRect.width -= fieldRect.x - controlRectAdditionalData.x; EditorGUI.LabelField(labelRect, Styles.ShadowResolution); shadowResolutionTier = EditorGUI.IntPopup(levelRect, GUIContent.none, shadowResolutionTier, Styles.ShadowResolutionDefaultOptions, Styles.ShadowResolutionDefaultValues); bool hasResolutionTierChanged = EditorGUI.EndChangeCheck(); if (m_AdditionalLightDataSO != null) { EditorGUI.EndProperty(); } // Same logic as in DrawAdditionalShadowData if (shadowResolutionTier == UniversalAdditionalLightData.AdditionalLightsShadowResolutionTierCustom && m_AdditionalLightDataSO != null) { // show the custom value field GUI. var newResolution = EditorGUI.IntField(fieldRect, settings.shadowsResolution.intValue); settings.shadowsResolution.intValue = Mathf.Max(UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution, Mathf.NextPowerOfTwo(newResolution)); m_AdditionalLightDataSO.ApplyModifiedProperties(); } if (shadowResolutionTier != UniversalAdditionalLightData.AdditionalLightsShadowResolutionTierCustom) { // show resolution tier values defined in pipeline settings UniversalRenderPipelineAsset urpAsset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset; EditorGUI.LabelField(fieldRect, $"{urpAsset.GetAdditionalLightsShadowResolution(shadowResolutionTier)} ({urpAsset.name})"); } if (hasResolutionTierChanged) { if (m_AdditionalLightDataSO == null) { lightProperty.gameObject.AddComponent <UniversalAdditionalLightData>(); m_AdditionalLightData = lightProperty.gameObject.GetComponent <UniversalAdditionalLightData>(); UniversalRenderPipelineAsset asset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset; settings.shadowsBias.floatValue = asset.shadowDepthBias; settings.shadowsNormalBias.floatValue = asset.shadowNormalBias; settings.shadowsResolution.intValue = UniversalAdditionalLightData.AdditionalLightsShadowDefaultCustomResolution; init(m_AdditionalLightData); } m_AdditionalLightsShadowResolutionTierProp.intValue = shadowResolutionTier; m_AdditionalLightDataSO.ApplyModifiedProperties(); } }