static void Drawer_InfluenceShapeBoxSettings(HDReflectionProbeUI s, SerializedHDReflectionProbe p, Editor owner) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(p.boxSize, CoreEditorUtils.GetContent("Box Size|The size of the box in which the reflections will be applied to objects. The value is not affected by the Transform of the Game Object.")); if (GUILayout.Button(toolbar_Contents[0], GUILayout.Width(28f), GUILayout.Height(EditorGUIUtility.singleLineHeight + 3))) { EditMode.ChangeEditMode(EditMode.SceneViewEditMode.ReflectionProbeBox, GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(p.boxOffset, CoreEditorUtils.GetContent("Box Offset|The center of the box in which the reflections will be applied to objects. The value is relative to the position of the Game Object.")); if (GUILayout.Button(toolbar_Contents[3], GUILayout.Width(28f), GUILayout.Height(EditorGUIUtility.singleLineHeight + 3))) { EditMode.ChangeEditMode(EditMode.SceneViewEditMode.ReflectionProbeOrigin, GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); if (EditorGUI.EndChangeCheck()) { var center = p.boxOffset.vector3Value; var size = p.boxSize.vector3Value; if (HDReflectionProbeEditorUtility.ValidateAABB(p.target, ref center, ref size)) { //clamp to contains object center instead of resizing Vector3 projector = (center - p.boxOffset.vector3Value).normalized; p.boxOffset.vector3Value = center + Mathf.Abs(Vector3.Dot((p.boxSize.vector3Value - size) * .5f, projector)) * projector; } } }
static void Handle_OriginEditing(HDReflectionProbeUI s, SerializedHDReflectionProbe sp, Editor o) { var p = (ReflectionProbe)sp.so.targetObject; var transformPosition = p.transform.position; var size = p.size; EditorGUI.BeginChangeCheck(); var newPostion = Handles.PositionHandle(transformPosition, HDReflectionProbeEditorUtility.GetLocalSpaceRotation(p)); var changed = EditorGUI.EndChangeCheck(); if (changed || s.oldLocalSpace != HDReflectionProbeEditorUtility.GetLocalSpace(p)) { var localNewPosition = s.oldLocalSpace.inverse.MultiplyPoint3x4(newPostion); var b = new Bounds(p.center, size); localNewPosition = b.ClosestPoint(localNewPosition); Undo.RecordObject(p.transform, "Modified Reflection Probe Origin"); p.transform.position = s.oldLocalSpace.MultiplyPoint3x4(localNewPosition); Undo.RecordObject(p, "Modified Reflection Probe Origin"); p.center = HDReflectionProbeEditorUtility.GetLocalSpace(p).inverse.MultiplyPoint3x4(s.oldLocalSpace.MultiplyPoint3x4(p.center)); EditorUtility.SetDirty(p); s.UpdateOldLocalSpace(p); } }
static void ApplyConstraintsOnTargets(HDReflectionProbeUI s, SerializedHDReflectionProbe sp, Editor o) { switch ((ShapeType)sp.influenceShape.enumValueIndex) { case ShapeType.Box: { var maxBlendDistance = HDReflectionProbeEditorUtility.CalculateBoxMaxBlendDistance(s, sp, o); sp.targetData.blendDistancePositive = Vector3.Min(sp.targetData.blendDistancePositive, maxBlendDistance); sp.targetData.blendDistanceNegative = Vector3.Min(sp.targetData.blendDistanceNegative, maxBlendDistance); sp.targetData.blendNormalDistancePositive = Vector3.Min(sp.targetData.blendNormalDistancePositive, maxBlendDistance); sp.targetData.blendNormalDistanceNegative = Vector3.Min(sp.targetData.blendNormalDistanceNegative, maxBlendDistance); break; } case ShapeType.Sphere: { var maxBlendDistance = Vector3.one * HDReflectionProbeEditorUtility.CalculateSphereMaxBlendDistance(s, sp, o); sp.targetData.blendDistancePositive = Vector3.Min(sp.targetData.blendDistancePositive, maxBlendDistance); sp.targetData.blendDistanceNegative = Vector3.Min(sp.targetData.blendDistanceNegative, maxBlendDistance); sp.targetData.blendNormalDistancePositive = Vector3.Min(sp.targetData.blendNormalDistancePositive, maxBlendDistance); sp.targetData.blendNormalDistanceNegative = Vector3.Min(sp.targetData.blendNormalDistanceNegative, maxBlendDistance); break; } } }
static void Gizmos_Influence(ReflectionProbe p, HDAdditionalReflectionData a, HDReflectionProbeEditor e, bool isEdit) { var col = Gizmos.color; var mat = Gizmos.matrix; Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p); switch (a.influenceShape) { case ShapeType.Box: { Gizmos.color = k_GizmoThemeColorExtentFace; e.m_UIState.alternativeBoxInfluenceHandle.DrawHull(isEdit); break; } case ShapeType.Sphere: { Gizmos.color = k_GizmoThemeColorExtentFace; if (isEdit) { Gizmos.DrawSphere(p.center, a.influenceSphereRadius); } else { Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius); } break; } } Gizmos.matrix = mat; Gizmos.color = col; }
static void Drawer_InfluenceSphereSettings(HDReflectionProbeUI s, SerializedHDReflectionProbe p, Editor owner) { var maxBlendDistance = HDReflectionProbeEditorUtility.CalculateSphereMaxBlendDistance(s, p, owner); var blendDistance = p.blendDistancePositive.vector3Value.x; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = p.blendDistancePositive.hasMultipleDifferentValues; blendDistance = EditorGUILayout.Slider(CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes."), blendDistance, 0, maxBlendDistance); if (EditorGUI.EndChangeCheck()) { p.blendDistancePositive.vector3Value = Vector3.one * blendDistance; p.blendDistanceNegative.vector3Value = Vector3.one * blendDistance; } if (GUILayout.Button(toolbar_Contents[1], GUILayout.Width(28f), GUILayout.Height(EditorGUIUtility.singleLineHeight + 3))) { EditMode.ChangeEditMode(k_Toolbar_SceneViewEditModes[1], GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); var blendNormalDistance = p.blendNormalDistancePositive.vector3Value.x; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = p.blendNormalDistancePositive.hasMultipleDifferentValues; blendNormalDistance = EditorGUILayout.Slider(CoreEditorUtils.GetContent("Blend Normal Distance|Area around the probe where the normals influence the probe. Only used in deferred probes."), blendNormalDistance, 0, maxBlendDistance); if (EditorGUI.EndChangeCheck()) { p.blendNormalDistancePositive.vector3Value = Vector3.one * blendNormalDistance; p.blendNormalDistanceNegative.vector3Value = Vector3.one * blendNormalDistance; } if (GUILayout.Button(toolbar_Contents[2], GUILayout.Width(28f), GUILayout.Height(EditorGUIUtility.singleLineHeight + 3))) { EditMode.ChangeEditMode(k_Toolbar_SceneViewEditModes[2], GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); EditorGUI.showMixedValue = false; }
static void Drawer_InfluenceBoxSettings(HDReflectionProbeUI s, SerializedHDReflectionProbe p, Editor owner) { bool advanced = p.editorAdvancedModeEnabled.boolValue; var maxBlendDistance = HDReflectionProbeEditorUtility.CalculateBoxMaxBlendDistance(s, p, owner); EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance( p, false, maxBlendDistance, CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes.") ); if (GUILayout.Button(toolbar_Contents[1], GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 3 : 1) * (EditorGUIUtility.singleLineHeight + 3)))) { EditMode.ChangeEditMode(k_Toolbar_SceneViewEditModes[1], GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance( p, true, maxBlendDistance, CoreEditorUtils.GetContent("Blend Normal Distance|Area around the probe where the normals influence the probe. Only used in deferred probes.") ); if (GUILayout.Button(toolbar_Contents[2], GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 3 : 1) * (EditorGUIUtility.singleLineHeight + 3)))) { EditMode.ChangeEditMode(k_Toolbar_SceneViewEditModes[2], GetBoundsGetter(p)(), owner); } EditorGUILayout.EndHorizontal(); if (advanced) { CoreEditorUtils.DrawVector6( CoreEditorUtils.GetContent("Face fade|Fade faces of the cubemap."), p.boxSideFadePositive, p.boxSideFadeNegative, Vector3.zero, Vector3.one, HDReflectionProbeEditor.k_handlesColor); } }
static void Handle_InfluenceFadeEditing(HDReflectionProbeUI s, SerializedHDReflectionProbe sp, Editor o, InfluenceType influenceType) { Gizmo6FacesBoxContained alternativeBlendBox; SphereBoundsHandle sphereHandle; Vector3 probeBlendDistancePositive, probeBlendDistanceNegative; Color color; switch (influenceType) { default: case InfluenceType.Standard: { alternativeBlendBox = s.alternativeBoxBlendHandle; sphereHandle = s.sphereBlendHandle; probeBlendDistancePositive = sp.targetData.blendDistancePositive; probeBlendDistanceNegative = sp.targetData.blendDistanceNegative; color = k_GizmoThemeColorInfluenceBlend; break; } case InfluenceType.Normal: { alternativeBlendBox = s.alternativeBoxBlendNormalHandle; sphereHandle = s.sphereBlendNormalHandle; probeBlendDistancePositive = sp.targetData.blendNormalDistancePositive; probeBlendDistanceNegative = sp.targetData.blendNormalDistanceNegative; color = k_GizmoThemeColorInfluenceNormalBlend; break; } } var mat = Handles.matrix; var col = Handles.color; Handles.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(sp.target); switch ((ShapeType)sp.influenceShape.enumValueIndex) { case ShapeType.Box: { alternativeBlendBox.center = sp.target.center - (probeBlendDistancePositive - probeBlendDistanceNegative) * 0.5f; alternativeBlendBox.size = sp.target.size - probeBlendDistancePositive - probeBlendDistanceNegative; alternativeBlendBox.container.center = sp.target.center; alternativeBlendBox.container.size = sp.target.size; EditorGUI.BeginChangeCheck(); alternativeBlendBox.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sp.target, "Modified Reflection Probe Influence"); Undo.RecordObject(sp.targetData, "Modified Reflection Probe Influence"); var center = sp.target.center; var influenceSize = sp.target.size; var diff = 2 * (alternativeBlendBox.center - center); var sum = influenceSize - (alternativeBlendBox.size); var positive = (sum - diff) * 0.5f; var negative = (sum + diff) * 0.5f; var blendDistancePositive = Vector3.Max(Vector3.zero, Vector3.Min(positive, influenceSize)); var blendDistanceNegative = Vector3.Max(Vector3.zero, Vector3.Min(negative, influenceSize)); probeBlendDistancePositive = blendDistancePositive; probeBlendDistanceNegative = blendDistanceNegative; ApplyConstraintsOnTargets(s, sp, o); EditorUtility.SetDirty(sp.target); EditorUtility.SetDirty(sp.targetData); } break; } case ShapeType.Sphere: { sphereHandle.center = sp.target.center; sphereHandle.radius = Mathf.Clamp(sp.targetData.influenceSphereRadius - probeBlendDistancePositive.x, 0, sp.targetData.influenceSphereRadius); Handles.color = k_GizmoThemeColorExtent; EditorGUI.BeginChangeCheck(); Handles.color = color; sphereHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sp.target, "Modified Reflection influence volume"); Undo.RecordObject(sp.targetData, "Modified Reflection influence volume"); var influenceRadius = sp.targetData.influenceSphereRadius; var blendRadius = sphereHandle.radius; var blendDistance = Mathf.Clamp(influenceRadius - blendRadius, 0, influenceRadius); probeBlendDistancePositive = Vector3.one * blendDistance; probeBlendDistanceNegative = probeBlendDistancePositive; ApplyConstraintsOnTargets(s, sp, o); EditorUtility.SetDirty(sp.target); EditorUtility.SetDirty(sp.targetData); } break; } } Handles.matrix = mat; Handles.color = col; switch (influenceType) { default: case InfluenceType.Standard: { sp.blendDistancePositive.vector3Value = probeBlendDistancePositive; sp.blendDistanceNegative.vector3Value = probeBlendDistanceNegative; //save advanced/simplified saved data if (sp.editorAdvancedModeEnabled.boolValue) { sp.editorAdvancedModeBlendDistancePositive.vector3Value = probeBlendDistancePositive; sp.editorAdvancedModeBlendDistanceNegative.vector3Value = probeBlendDistanceNegative; } else { sp.editorSimplifiedModeBlendDistance.floatValue = probeBlendDistancePositive.x; } break; } case InfluenceType.Normal: { sp.blendNormalDistancePositive.vector3Value = probeBlendDistancePositive; sp.blendNormalDistanceNegative.vector3Value = probeBlendDistanceNegative; //save advanced/simplified saved data if (sp.editorAdvancedModeEnabled.boolValue) { sp.editorAdvancedModeBlendNormalDistancePositive.vector3Value = probeBlendDistancePositive; sp.editorAdvancedModeBlendNormalDistanceNegative.vector3Value = probeBlendDistanceNegative; } else { sp.editorSimplifiedModeBlendNormalDistance.floatValue = probeBlendDistancePositive.x; } break; } } sp.Apply(); }
static void Handle_InfluenceEditing(HDReflectionProbeUI s, SerializedHDReflectionProbe sp, Editor o) { var mat = Handles.matrix; var col = Handles.color; Handles.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(sp.target); switch ((ShapeType)sp.influenceShape.enumValueIndex) { case ShapeType.Box: { s.alternativeBoxInfluenceHandle.center = sp.target.center; s.alternativeBoxInfluenceHandle.size = sp.target.size; EditorGUI.BeginChangeCheck(); s.alternativeBoxInfluenceHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sp.target, "Modified Reflection Probe AABB"); Undo.RecordObject(sp.targetData, "Modified Reflection Probe AABB"); Vector3 center; Vector3 size; center = s.alternativeBoxInfluenceHandle.center; size = s.alternativeBoxInfluenceHandle.size; HDReflectionProbeEditorUtility.ValidateAABB(sp.target, ref center, ref size); sp.target.center = center; sp.target.size = size; //ApplyConstraintsOnTargets(s, sp, o); EditorUtility.SetDirty(sp.target); EditorUtility.SetDirty(sp.targetData); } break; } case ShapeType.Sphere: { s.sphereInfluenceHandle.center = sp.target.center; s.sphereInfluenceHandle.radius = sp.targetData.influenceSphereRadius; Handles.color = k_GizmoThemeColorExtent; EditorGUI.BeginChangeCheck(); s.sphereInfluenceHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sp.target, "Modified Reflection Probe AABB"); Undo.RecordObject(sp.targetData, "Modified Reflection Probe AABB"); var center = sp.target.center; var influenceRadius = s.sphereInfluenceHandle.radius; var radius = Vector3.one * influenceRadius; HDReflectionProbeEditorUtility.ValidateAABB(sp.target, ref center, ref radius); influenceRadius = radius.x; sp.targetData.influenceSphereRadius = influenceRadius; //ApplyConstraintsOnTargets(s, sp, o); EditorUtility.SetDirty(sp.target); EditorUtility.SetDirty(sp.targetData); } break; } } Handles.matrix = mat; Handles.color = col; }
internal void UpdateOldLocalSpace(ReflectionProbe target) { oldLocalSpace = HDReflectionProbeEditorUtility.GetLocalSpace(target); }
static void Gizmos_InfluenceFade(ReflectionProbe p, HDAdditionalReflectionData a, HDReflectionProbeEditor e, InfluenceType type, bool isEdit) { var col = Gizmos.color; var mat = Gizmos.matrix; Gizmo6FacesBoxContained box; Vector3 boxCenterOffset; Vector3 boxSizeOffset; float sphereRadiusOffset; Color color; switch (type) { default: case InfluenceType.Standard: { box = e != null ? e.m_UIState.alternativeBoxBlendHandle : null; boxCenterOffset = a.boxBlendCenterOffset; boxSizeOffset = a.boxBlendSizeOffset; sphereRadiusOffset = a.sphereBlendRadiusOffset; color = isEdit ? k_GizmoThemeColorInfluenceBlendFace : k_GizmoThemeColorInfluenceBlend; break; } case InfluenceType.Normal: { box = e != null ? e.m_UIState.alternativeBoxBlendNormalHandle : null; boxCenterOffset = a.boxBlendNormalCenterOffset; boxSizeOffset = a.boxBlendNormalSizeOffset; sphereRadiusOffset = a.sphereBlendNormalRadiusOffset; color = isEdit ? k_GizmoThemeColorInfluenceNormalBlendFace : k_GizmoThemeColorInfluenceNormalBlend; break; } } Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p); switch (a.influenceShape) { case ShapeType.Box: { Gizmos.color = color; if (e != null) // e == null may occure when editor have still not been created at selection while the tool is not used for this part { box.DrawHull(isEdit); } else { if (isEdit) { Gizmos.DrawCube(p.center + boxCenterOffset, p.size + boxSizeOffset); } else { Gizmos.DrawWireCube(p.center + boxCenterOffset, p.size + boxSizeOffset); } } break; } case ShapeType.Sphere: { Gizmos.color = color; if (isEdit) { Gizmos.DrawSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset); } else { Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset); } break; } } Gizmos.matrix = mat; Gizmos.color = col; }