static void Drawer_InfluenceAdvancedSwitch(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor owner) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); bool advanced = d.editorAdvancedModeEnabled.boolValue; advanced = !GUILayout.Toggle(!advanced, CoreEditorUtils.GetContent("Normal|Normal parameters mode (only change for box shape)."), EditorStyles.miniButtonLeft, GUILayout.Width(60f), GUILayout.ExpandWidth(false)); advanced = GUILayout.Toggle(advanced, CoreEditorUtils.GetContent("Advanced|Advanced parameters mode (only change for box shape)."), EditorStyles.miniButtonRight, GUILayout.Width(60f), GUILayout.ExpandWidth(false)); s.boxInfluenceHandle.allHandleControledByOne = s.boxInfluenceNormalHandle.allHandleControledByOne = !advanced; if (d.editorAdvancedModeEnabled.boolValue ^ advanced) { d.editorAdvancedModeEnabled.boolValue = advanced; if (advanced) { d.boxInfluencePositiveFade.vector3Value = d.editorAdvancedModeBlendDistancePositive.vector3Value; d.boxInfluenceNegativeFade.vector3Value = d.editorAdvancedModeBlendDistanceNegative.vector3Value; d.boxInfluenceNormalPositiveFade.vector3Value = d.editorAdvancedModeBlendNormalDistancePositive.vector3Value; d.boxInfluenceNormalNegativeFade.vector3Value = d.editorAdvancedModeBlendNormalDistanceNegative.vector3Value; } else { d.boxInfluenceNegativeFade.vector3Value = d.boxInfluencePositiveFade.vector3Value = Vector3.one * d.editorSimplifiedModeBlendDistance.floatValue; d.boxInfluenceNormalNegativeFade.vector3Value = d.boxInfluenceNormalPositiveFade.vector3Value = Vector3.one * d.editorSimplifiedModeBlendNormalDistance.floatValue; } d.Apply(); } } }
public SerializedHDReflectionProbe(SerializedObject so, SerializedObject addso) { this.so = so; this.addso = addso; proxyVolumeComponent = addso.Find((HDAdditionalReflectionData d) => d.proxyVolume); influenceVolume = new SerializedInfluenceVolume(addso.Find((HDAdditionalReflectionData d) => d.influenceVolume)); target = (ReflectionProbe)so.targetObject; targetData = target.GetComponent <HDAdditionalReflectionData>(); mode = so.FindProperty("m_Mode"); customBakedTexture = so.FindProperty("m_CustomBakedTexture"); renderDynamicObjects = so.FindProperty("m_RenderDynamicObjects"); refreshMode = so.FindProperty("m_RefreshMode"); timeSlicingMode = so.FindProperty("m_TimeSlicingMode"); intensityMultiplier = so.FindProperty("m_IntensityMultiplier"); boxSize = so.FindProperty("m_BoxSize"); boxOffset = so.FindProperty("m_BoxOffset"); resolution = so.FindProperty("m_Resolution"); shadowDistance = so.FindProperty("m_ShadowDistance"); cullingMask = so.FindProperty("m_CullingMask"); useOcclusionCulling = so.FindProperty("m_UseOcclusionCulling"); nearClip = so.FindProperty("m_NearClip"); farClip = so.FindProperty("m_FarClip"); boxProjection = so.FindProperty("m_BoxProjection"); legacyBlendDistance = so.FindProperty("m_BlendDistance"); weight = addso.Find((HDAdditionalReflectionData d) => d.weight); multiplier = addso.Find((HDAdditionalReflectionData d) => d.multiplier); }
static void Drawer_SectionShapeSphere(SerializedInfluenceVolume serialized, Editor owner, bool drawOffset, bool drawNormal) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(serialized.sphereRadius, radiusContent); HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.InfluenceShape, owner, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); var maxBlendDistance = serialized.sphereRadius.floatValue; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.sphereBlendDistance, blendDistanceContent); if (EditorGUI.EndChangeCheck()) { serialized.sphereBlendDistance.floatValue = Mathf.Clamp(serialized.sphereBlendDistance.floatValue, 0, maxBlendDistance); } HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.Blend, owner, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + 3)); EditorGUILayout.EndHorizontal(); if (drawNormal) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.sphereBlendNormalDistance, blendNormalDistanceContent); if (EditorGUI.EndChangeCheck()) { serialized.sphereBlendNormalDistance.floatValue = Mathf.Clamp(serialized.sphereBlendNormalDistance.floatValue, 0, maxBlendDistance); } HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.NormalBlend, owner, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + 3)); EditorGUILayout.EndHorizontal(); } }
static void Drawer_SectionShapeBox(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o) { bool advanced = d.editorAdvancedModeEnabled.boolValue; var maxFadeDistance = d.boxBaseSize.vector3Value * 0.5f; var minFadeDistance = Vector3.zero; EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(d.boxBaseSize, _.GetContent("Box Size")); PlanarReflectionProbeUI.Drawer_ToolBarButton(0, o, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); //offset have no meaning for planar reflexion probe //EditorGUILayout.PropertyField(d.boxBaseOffset, _.GetContent("Box Offset")); EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance( d, false, maxFadeDistance, CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes.") ); PlanarReflectionProbeUI.Drawer_ToolBarButton(1, o, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 3 : 1) * (EditorGUIUtility.singleLineHeight + 3))); EditorGUILayout.EndHorizontal(); if (advanced) { CoreEditorUtils.DrawVector6( CoreEditorUtils.GetContent("Face fade|Fade faces of the cubemap."), d.boxPositiveFaceFade, d.boxNegativeFaceFade, Vector3.zero, Vector3.one, HDReflectionProbeEditor.k_handlesColor); } }
static void Drawer_SectionShapeBox(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o) { var maxFadeDistance = d.boxBaseSize.vector3Value * 0.5f; var minFadeDistance = Vector3.zero; EditorGUILayout.PropertyField(d.boxBaseSize, _.GetContent("Box Size")); EditorGUILayout.PropertyField(d.boxBaseOffset, _.GetContent("Box Offset")); EditorGUILayout.Space(); _.DrawVector6Slider( _.GetContent("Influence Fade"), d.boxInfluencePositiveFade, d.boxInfluenceNegativeFade, minFadeDistance, maxFadeDistance); EditorGUILayout.Space(); _.DrawVector6Slider( _.GetContent("Influence Normal Fade"), d.boxInfluenceNormalPositiveFade, d.boxInfluenceNormalNegativeFade, minFadeDistance, maxFadeDistance); EditorGUILayout.Space(); _.DrawVector6Slider( _.GetContent("Influence Face Fade"), d.boxPositiveFaceFade, d.boxNegativeFaceFade, Vector3.zero, Vector3.one); }
public static void DrawHandles_EditBase(SerializedInfluenceVolume serialized, Editor owner, Transform transform) { switch ((InfluenceShape)serialized.shape.intValue) { case InfluenceShape.Box: DrawBoxHandle(serialized, owner, transform, s_BoxBaseHandle); break; case InfluenceShape.Sphere: using (new Handles.DrawingScope(Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one))) { s_SphereBaseHandle.center = Vector3.zero; s_SphereBaseHandle.radius = serialized.sphereRadius.floatValue; EditorGUI.BeginChangeCheck(); s_SphereBaseHandle.DrawHull(true); s_SphereBaseHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { float radius = s_SphereBaseHandle.radius; serialized.sphereRadius.floatValue = radius; serialized.sphereBlendDistance.floatValue = Mathf.Clamp(serialized.sphereBlendDistance.floatValue, 0, radius); serialized.sphereBlendNormalDistance.floatValue = Mathf.Clamp(serialized.sphereBlendNormalDistance.floatValue, 0, radius); } break; } } }
static void DrawBoxFadeHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, Gizmo6FacesBox box, SerializedProperty positive, SerializedProperty negative) { box.center = d.offset.vector3Value - (positive.vector3Value - negative.vector3Value) * 0.5f; box.size = d.boxSize.vector3Value - positive.vector3Value - negative.vector3Value; box.allHandleControledByOne = !d.editorAdvancedModeEnabled.boolValue; EditorGUI.BeginChangeCheck(); box.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Influence Volume"); var influenceCenter = d.offset.vector3Value; var halfInfluenceSize = d.boxSize.vector3Value * .5f; var centerDiff = box.center - influenceCenter; var halfSizeDiff = halfInfluenceSize - box.size * .5f; var positiveNew = halfSizeDiff - centerDiff; var negativeNew = halfSizeDiff + centerDiff; var blendDistancePositive = Vector3.Max(Vector3.zero, Vector3.Min(positiveNew, halfInfluenceSize)); var blendDistanceNegative = Vector3.Max(Vector3.zero, Vector3.Min(negativeNew, halfInfluenceSize)); positive.vector3Value = blendDistancePositive; negative.vector3Value = blendDistanceNegative; d.Apply(); } }
static void Drawer_Offset(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, bool drawAllOffset) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); float y = 0f; if (drawAllOffset) { EditorGUILayout.PropertyField(d.offset, offsetContent); } else { y = EditorGUILayout.FloatField(yOffsetContent, d.offset.vector3Value.y); } if (EditorGUI.EndChangeCheck()) { //call the offset setter as it will update legacy reflection probe HDProbeEditor editor = (HDProbeEditor)o; InfluenceVolume influenceVolume = editor.GetTarget(editor.target).influenceVolume; if (drawAllOffset) { influenceVolume.offset = d.offset.vector3Value; } else { influenceVolume.offset = new Vector3(0, y, 0); } } HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.CapturePosition, o, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); }
public static void DrawHandles_EditInfluenceNormal(SerializedInfluenceVolume serialized, Editor owner, Transform transform) { // Synchronize base handles s_BoxBaseHandle.center = Vector3.zero; s_BoxBaseHandle.size = serialized.boxSize.vector3Value; s_SphereBaseHandle.center = Vector3.zero; s_SphereBaseHandle.radius = serialized.sphereRadius.floatValue; switch ((InfluenceShape)serialized.shape.intValue) { case InfluenceShape.Box: EditorGUI.BeginChangeCheck(); DrawBoxFadeHandle(serialized, owner, transform, s_BoxInfluenceNormalHandle, serialized.boxBlendNormalDistancePositive, serialized.boxBlendNormalDistanceNegative); if (EditorGUI.EndChangeCheck()) { //save advanced/simplified saved data if (serialized.editorAdvancedModeEnabled.boolValue) { serialized.editorAdvancedModeBlendNormalDistancePositive.vector3Value = serialized.boxBlendNormalDistancePositive.vector3Value; serialized.editorAdvancedModeBlendNormalDistanceNegative.vector3Value = serialized.boxBlendNormalDistanceNegative.vector3Value; } else { serialized.editorSimplifiedModeBlendNormalDistance.floatValue = serialized.boxBlendNormalDistancePositive.vector3Value.x; } serialized.Apply(); } break; case InfluenceShape.Sphere: DrawSphereFadeHandle(serialized, owner, transform, s_SphereInfluenceNormalHandle, serialized.sphereBlendNormalDistance); break; } }
public static void DrawHandles_EditInfluenceNormal(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Matrix4x4 matrix, Object sourceAsset) { using (new Handles.DrawingScope(k_GizmoThemeColorInfluenceNormal, matrix)) { switch ((InfluenceShape)d.shape.intValue) { case InfluenceShape.Box: EditorGUI.BeginChangeCheck(); DrawBoxFadeHandle(s, d, o, sourceAsset, s.boxInfluenceNormalHandle, d.boxBlendNormalDistancePositive, d.boxBlendNormalDistanceNegative); if (EditorGUI.EndChangeCheck()) { //save advanced/simplified saved data if (d.editorAdvancedModeEnabled.boolValue) { d.editorAdvancedModeBlendNormalDistancePositive.vector3Value = d.boxBlendNormalDistancePositive.vector3Value; d.editorAdvancedModeBlendNormalDistanceNegative.vector3Value = d.boxBlendNormalDistanceNegative.vector3Value; } else { d.editorSimplifiedModeBlendNormalDistance.floatValue = d.boxBlendNormalDistancePositive.vector3Value.x; } d.Apply(); } break; case InfluenceShape.Sphere: DrawSphereFadeHandle(s, d, o, sourceAsset, s.sphereInfluenceNormalHandle, d.sphereBlendNormalDistance); break; } } }
static void DrawBoxFadeHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, HierarchicalBox box, SerializedProperty positive, SerializedProperty negative) { box.center = d.offset.vector3Value - (positive.vector3Value - negative.vector3Value) * 0.5f; box.size = d.boxSize.vector3Value - positive.vector3Value - negative.vector3Value; box.monoHandle = !d.editorAdvancedModeEnabled.boolValue; //set up parent box too for clamping s.boxBaseHandle.center = d.offset.vector3Value; s.boxBaseHandle.size = d.boxSize.vector3Value; EditorGUI.BeginChangeCheck(); box.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Influence Volume"); var halfInfluenceSize = d.boxSize.vector3Value * .5f; var blendDistancePositive = d.offset.vector3Value - box.center - box.size * .5f + halfInfluenceSize; var blendDistanceNegative = box.center - d.offset.vector3Value - box.size * .5f + halfInfluenceSize; positive.vector3Value = Vector3.Min(blendDistancePositive, halfInfluenceSize); negative.vector3Value = Vector3.Min(blendDistanceNegative, halfInfluenceSize); d.Apply(); } }
public SerializedPlanarReflectionProbe(SerializedObject serializedObject) { this.serializedObject = serializedObject; proxyVolumeReference = serializedObject.Find((PlanarReflectionProbe p) => p.proxyVolumeReference); influenceVolume = new SerializedInfluenceVolume(serializedObject.Find((PlanarReflectionProbe p) => p.influenceVolume)); captureLocalPosition = serializedObject.Find((PlanarReflectionProbe p) => p.captureLocalPosition); captureNearPlane = serializedObject.Find((PlanarReflectionProbe p) => p.captureNearPlane); captureFarPlane = serializedObject.Find((PlanarReflectionProbe p) => p.captureFarPlane); capturePositionMode = serializedObject.Find((PlanarReflectionProbe p) => p.capturePositionMode); captureMirrorPlaneLocalPosition = serializedObject.Find((PlanarReflectionProbe p) => p.captureMirrorPlaneLocalPosition); captureMirrorPlaneLocalNormal = serializedObject.Find((PlanarReflectionProbe p) => p.captureMirrorPlaneLocalNormal); weight = serializedObject.Find((PlanarReflectionProbe p) => p.weight); multiplier = serializedObject.Find((PlanarReflectionProbe p) => p.multiplier); mode = serializedObject.Find((PlanarReflectionProbe p) => p.mode); refreshMode = serializedObject.Find((PlanarReflectionProbe p) => p.refreshMode); customTexture = serializedObject.Find((PlanarReflectionProbe p) => p.customTexture); overrideFieldOfView = serializedObject.Find((PlanarReflectionProbe p) => p.overrideFieldOfView); fieldOfViewOverride = serializedObject.Find((PlanarReflectionProbe p) => p.fieldOfViewOverride); frameSettings = new SerializedFrameSettings(serializedObject.Find((PlanarReflectionProbe p) => p.frameSettings)); InstantiateProxyVolume(serializedObject); }
static void DrawBoxFadeHandle(SerializedInfluenceVolume serialized, Editor owner, Transform transform, HierarchicalBox box, SerializedProperty positive, SerializedProperty negative) { using (new Handles.DrawingScope(Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one))) { box.center = -(positive.vector3Value - negative.vector3Value) * 0.5f; box.size = serialized.boxSize.vector3Value - positive.vector3Value - negative.vector3Value; box.monoHandle = !serialized.editorAdvancedModeEnabled.boolValue; EditorGUI.BeginChangeCheck(); box.DrawHandle(); box.DrawHull(true); if (EditorGUI.EndChangeCheck()) { var influenceCenter = Vector3.zero; var halfInfluenceSize = serialized.boxSize.vector3Value * .5f; var centerDiff = box.center - influenceCenter; var halfSizeDiff = halfInfluenceSize - box.size * .5f; var positiveNew = halfSizeDiff - centerDiff; var negativeNew = halfSizeDiff + centerDiff; var blendDistancePositive = Vector3.Max(Vector3.zero, Vector3.Min(positiveNew, halfInfluenceSize)); var blendDistanceNegative = Vector3.Max(Vector3.zero, Vector3.Min(negativeNew, halfInfluenceSize)); positive.vector3Value = blendDistancePositive; negative.vector3Value = blendDistanceNegative; } } }
static void Drawer_SectionShapeSphere(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o) { var maxFaceDistance = d.sphereBaseRadius.floatValue; EditorGUILayout.PropertyField(d.sphereBaseRadius, _.GetContent("Radius")); d.sphereBaseOffset.vector3Value = Vector3.zero; EditorGUILayout.Space(); EditorGUILayout.Slider(d.sphereInfluenceFade, 0, maxFaceDistance, _.GetContent("Blend Distance")); }
static void Drawer_AdvancedBlendDistance(SerializedInfluenceVolume serialized, bool isNormal, Vector3 maxBlendDistance, GUIContent content) { SerializedProperty blendDistancePositive = isNormal ? serialized.boxBlendNormalDistancePositive : serialized.boxBlendDistancePositive; SerializedProperty blendDistanceNegative = isNormal ? serialized.boxBlendNormalDistanceNegative : serialized.boxBlendDistanceNegative; SerializedProperty editorAdvancedModeBlendDistancePositive = isNormal ? serialized.editorAdvancedModeBlendNormalDistancePositive : serialized.editorAdvancedModeBlendDistancePositive; SerializedProperty editorAdvancedModeBlendDistanceNegative = isNormal ? serialized.editorAdvancedModeBlendNormalDistanceNegative : serialized.editorAdvancedModeBlendDistanceNegative; SerializedProperty editorSimplifiedModeBlendDistance = isNormal ? serialized.editorSimplifiedModeBlendNormalDistance : serialized.editorSimplifiedModeBlendDistance; Vector3 bdp = blendDistancePositive.vector3Value; Vector3 bdn = blendDistanceNegative.vector3Value; EditorGUILayout.BeginVertical(); if (serialized.editorAdvancedModeEnabled.boolValue) { EditorGUI.BeginChangeCheck(); blendDistancePositive.vector3Value = editorAdvancedModeBlendDistancePositive.vector3Value; blendDistanceNegative.vector3Value = editorAdvancedModeBlendDistanceNegative.vector3Value; var positive = blendDistancePositive.vector3Value; var negative = blendDistanceNegative.vector3Value; CoreEditorUtils.DrawVector6( content, ref positive, ref negative, Vector3.zero, maxBlendDistance, k_HandlesColor); blendDistancePositive.vector3Value = positive; blendDistanceNegative.vector3Value = negative; if (EditorGUI.EndChangeCheck()) { editorAdvancedModeBlendDistancePositive.vector3Value = blendDistancePositive.vector3Value; editorAdvancedModeBlendDistanceNegative.vector3Value = blendDistanceNegative.vector3Value; } } else { float distance = editorSimplifiedModeBlendDistance.floatValue; EditorGUI.BeginChangeCheck(); distance = EditorGUILayout.FloatField(content, distance); if (EditorGUI.EndChangeCheck()) { distance = Mathf.Clamp(distance, 0f, Mathf.Max(maxBlendDistance.x, maxBlendDistance.y, maxBlendDistance.z)); Vector3 decal = Vector3.one * distance; bdp.x = Mathf.Clamp(decal.x, 0f, maxBlendDistance.x); bdp.y = Mathf.Clamp(decal.y, 0f, maxBlendDistance.y); bdp.z = Mathf.Clamp(decal.z, 0f, maxBlendDistance.z); bdn.x = Mathf.Clamp(decal.x, 0f, maxBlendDistance.x); bdn.y = Mathf.Clamp(decal.y, 0f, maxBlendDistance.y); bdn.z = Mathf.Clamp(decal.z, 0f, maxBlendDistance.z); blendDistancePositive.vector3Value = bdp; blendDistanceNegative.vector3Value = bdn; editorSimplifiedModeBlendDistance.floatValue = distance; } } GUILayout.EndVertical(); }
static void DrawSphereFadeHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, SphereBoundsHandle sphere, SerializedProperty radius) { sphere.center = d.offset.vector3Value; sphere.radius = radius.floatValue; EditorGUI.BeginChangeCheck(); sphere.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Influence volume"); radius.floatValue = Mathf.Clamp(d.sphereRadius.floatValue - sphere.radius, 0, d.sphereRadius.floatValue); d.Apply(); } }
internal SerializedHDProbe(SerializedObject serializedObject) { this.serializedObject = serializedObject; proxyVolumeReference = serializedObject.Find((HDProbe p) => p.proxyVolume); influenceVolume = new SerializedInfluenceVolume(serializedObject.Find((HDProbe p) => p.influenceVolume)); infiniteProjection = serializedObject.Find((HDProbe p) => p.infiniteProjection); frameSettings = new SerializedFrameSettings(serializedObject.Find((HDProbe p) => p.frameSettings)); weight = serializedObject.Find((HDProbe p) => p.weight); multiplier = serializedObject.Find((HDProbe p) => p.multiplier); mode = serializedObject.Find((HDProbe p) => p.mode); refreshMode = serializedObject.Find((HDProbe p) => p.refreshMode); }
public static void DrawHandles_EditBase(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Matrix4x4 matrix, Object sourceAsset) { using (new Handles.DrawingScope(k_GizmoThemeColorBase, matrix)) { switch ((InfluenceShape)d.shape.intValue) { case InfluenceShape.Box: DrawBoxHandle(s, d, o, sourceAsset, s.boxBaseHandle); break; case InfluenceShape.Sphere: DrawSphereHandle(s, d, o, sourceAsset, s.sphereBaseHandle); break; } } }
static void DrawSphereFadeHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, HierarchicalSphere sphere, SerializedProperty blend) { //init parent sphere for clamping s.sphereBaseHandle.center = d.offset.vector3Value; s.sphereBaseHandle.radius = d.sphereRadius.floatValue; sphere.center = d.offset.vector3Value; sphere.radius = d.sphereRadius.floatValue - blend.floatValue; EditorGUI.BeginChangeCheck(); sphere.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Influence volume"); blend.floatValue = Mathf.Clamp(d.sphereRadius.floatValue - sphere.radius, 0, d.sphereRadius.floatValue); d.Apply(); } }
static void DrawSphereHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, SphereBoundsHandle sphere) { sphere.center = d.offset.vector3Value; sphere.radius = d.sphereRadius.floatValue; EditorGUI.BeginChangeCheck(); sphere.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Base Volume AABB"); float radius = sphere.radius; d.sphereRadius.floatValue = radius; d.sphereBlendDistance.floatValue = Mathf.Clamp(s.data.sphereBlendDistance.floatValue, 0, radius); d.sphereBlendNormalDistance.floatValue = Mathf.Clamp(s.data.sphereBlendNormalDistance.floatValue, 0, radius); d.Apply(); } }
static void Drawer_InfluenceAdvancedSwitch(SerializedInfluenceVolume serialized, Editor owner) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (serialized.shape.intValue == (int)InfluenceShape.Sphere) { GUI.enabled = false; } bool advanced = serialized.editorAdvancedModeEnabled.boolValue; advanced = !GUILayout.Toggle(!advanced, normalModeContent, EditorStyles.miniButtonLeft, GUILayout.Width(60f), GUILayout.ExpandWidth(false)); advanced = GUILayout.Toggle(advanced, advancedModeContent, EditorStyles.miniButtonRight, GUILayout.Width(60f), GUILayout.ExpandWidth(false)); s_BoxBaseHandle.monoHandle = false; s_BoxInfluenceHandle.monoHandle = !advanced; s_BoxInfluenceNormalHandle.monoHandle = !advanced; if (serialized.editorAdvancedModeEnabled.boolValue ^ advanced) { serialized.editorAdvancedModeEnabled.boolValue = advanced; if (advanced) { serialized.boxBlendDistancePositive.vector3Value = serialized.editorAdvancedModeBlendDistancePositive.vector3Value; serialized.boxBlendDistanceNegative.vector3Value = serialized.editorAdvancedModeBlendDistanceNegative.vector3Value; serialized.boxBlendNormalDistancePositive.vector3Value = serialized.editorAdvancedModeBlendNormalDistancePositive.vector3Value; serialized.boxBlendNormalDistanceNegative.vector3Value = serialized.editorAdvancedModeBlendNormalDistanceNegative.vector3Value; serialized.boxSideFadePositive.vector3Value = serialized.editorAdvancedModeFaceFadePositive.vector3Value; serialized.boxSideFadeNegative.vector3Value = serialized.editorAdvancedModeFaceFadeNegative.vector3Value; } else { serialized.boxBlendDistanceNegative.vector3Value = serialized.boxBlendDistancePositive.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendDistance.floatValue; serialized.boxBlendNormalDistanceNegative.vector3Value = serialized.boxBlendNormalDistancePositive.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendNormalDistance.floatValue; serialized.boxSideFadeNegative.vector3Value = serialized.boxSideFadePositive.vector3Value = Vector3.one; } serialized.Apply(); } if (serialized.shape.intValue == (int)InfluenceShape.Sphere) { GUI.enabled = true; } } }
public static void Draw <TProvider>(SerializedInfluenceVolume serialized, Editor owner) where TProvider : struct, IInfluenceUISettingsProvider { var provider = new TProvider(); Drawer_InfluenceAdvancedSwitch(serialized, owner); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serialized.shape, shapeContent); switch ((InfluenceShape)serialized.shape.intValue) { case InfluenceShape.Box: Drawer_SectionShapeBox(serialized, owner, provider.drawOffset, provider.drawNormal, provider.drawFace); break; case InfluenceShape.Sphere: Drawer_SectionShapeSphere(serialized, owner, provider.drawOffset, provider.drawNormal); break; } }
internal SerializedProbeSettings(SerializedProperty root) { this.root = root; type = root.Find((ProbeSettings p) => p.type); mode = root.Find((ProbeSettings p) => p.mode); realtimeMode = root.Find((ProbeSettings p) => p.realtimeMode); lightingMultiplier = root.FindPropertyRelative("lighting.multiplier"); lightingWeight = root.FindPropertyRelative("lighting.weight"); lightingLightLayer = root.FindPropertyRelative("lighting.lightLayer"); proxyUseInfluenceVolumeAsProxyVolume = root.FindPropertyRelative("proxySettings.useInfluenceVolumeAsProxyVolume"); proxyCapturePositionProxySpace = root.FindPropertyRelative("proxySettings.capturePositionProxySpace"); proxyCaptureRotationProxySpace = root.FindPropertyRelative("proxySettings.captureRotationProxySpace"); proxyMirrorPositionProxySpace = root.FindPropertyRelative("proxySettings.mirrorPositionProxySpace"); proxyMirrorRotationProxySpace = root.FindPropertyRelative("proxySettings.mirrorRotationProxySpace"); cameraSettings = new SerializedCameraSettings(root.Find((ProbeSettings p) => p.camera)); influence = new SerializedInfluenceVolume(root.Find((ProbeSettings p) => p.influence)); proxy = new SerializedProxyVolume(root.Find((ProbeSettings p) => p.proxy)); }
static void DrawSphereFadeHandle(SerializedInfluenceVolume serialized, Editor owner, Transform transform, HierarchicalSphere sphere, SerializedProperty radius) { //init parent sphere for clamping s_SphereBaseHandle.center = Vector3.zero; s_SphereBaseHandle.radius = serialized.sphereRadius.floatValue; using (new Handles.DrawingScope(Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one))) { sphere.center = Vector3.zero; sphere.radius = serialized.sphereRadius.floatValue - radius.floatValue; EditorGUI.BeginChangeCheck(); sphere.DrawHull(true); sphere.DrawHandle(); if (EditorGUI.EndChangeCheck()) { radius.floatValue = Mathf.Clamp(serialized.sphereRadius.floatValue - sphere.radius, 0, serialized.sphereRadius.floatValue); } } }
static void Drawer_SectionShapeSphere(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, bool drawOffset, bool drawNormal) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(d.sphereRadius, _.GetContent("Radius")); PlanarReflectionProbeUI.Drawer_ToolBarButton(0, o, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); if (drawOffset) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(d.offset, _.GetContent("Offset")); HDReflectionProbeUI.Drawer_ToolBarButton(3, o, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.Space(); var maxBlendDistance = d.sphereRadius.floatValue; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(d.sphereBlendDistance, _.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes.")); if (EditorGUI.EndChangeCheck()) { d.sphereBlendDistance.floatValue = Mathf.Clamp(d.sphereBlendDistance.floatValue, 0, maxBlendDistance); } PlanarReflectionProbeUI.Drawer_ToolBarButton(1, o, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + 3)); EditorGUILayout.EndHorizontal(); if (drawNormal) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(d.sphereBlendNormalDistance, _.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes.")); if (EditorGUI.EndChangeCheck()) { d.sphereBlendNormalDistance.floatValue = Mathf.Clamp(d.sphereBlendNormalDistance.floatValue, 0, maxBlendDistance); } PlanarReflectionProbeUI.Drawer_ToolBarButton(2, o, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + 3)); EditorGUILayout.EndHorizontal(); } }
internal SerializedHDProbe(SerializedObject serializedObject) { this.serializedObject = serializedObject; customBakedTexture = serializedObject.Find((HDProbe p) => p.customTexture); renderDynamicObjects = serializedObject.Find((HDProbe p) => p.renderDynamicObjects); proxyVolumeReference = serializedObject.Find((HDProbe p) => p.proxyVolume); influenceVolume = new SerializedInfluenceVolume(serializedObject.Find((HDProbe p) => p.influenceVolume)); captureSettings = new SerializedCaptureSettings(serializedObject.Find((HDProbe p) => p.captureSettings)); infiniteProjection = serializedObject.Find((HDProbe p) => p.infiniteProjection); frameSettings = new SerializedFrameSettings(serializedObject.Find((HDProbe p) => p.frameSettings)); lightLayers = serializedObject.Find((HDProbe p) => p.lightLayers); weight = serializedObject.Find((HDProbe p) => p.weight); multiplier = serializedObject.Find((HDProbe p) => p.multiplier); mode = serializedObject.Find((HDProbe p) => p.mode); refreshMode = serializedObject.Find((HDProbe p) => p.refreshMode); }
static void Drawer_InfluenceAdvancedSwitch(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor owner) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (d.shape.intValue == (int)InfluenceShape.Sphere) { GUI.enabled = false; } bool advanced = d.editorAdvancedModeEnabled.boolValue; advanced = GUILayout.Toggle(advanced, advancedModeContent, EditorStyles.miniButton, GUILayout.Width(60f), GUILayout.ExpandWidth(false)); if (d.editorAdvancedModeEnabled.boolValue ^ advanced) { d.editorAdvancedModeEnabled.boolValue = advanced; if (advanced) { d.boxBlendDistancePositive.vector3Value = d.editorAdvancedModeBlendDistancePositive.vector3Value; d.boxBlendDistanceNegative.vector3Value = d.editorAdvancedModeBlendDistanceNegative.vector3Value; d.boxBlendNormalDistancePositive.vector3Value = d.editorAdvancedModeBlendNormalDistancePositive.vector3Value; d.boxBlendNormalDistanceNegative.vector3Value = d.editorAdvancedModeBlendNormalDistanceNegative.vector3Value; d.boxSideFadePositive.vector3Value = d.editorAdvancedModeFaceFadePositive.vector3Value; d.boxSideFadeNegative.vector3Value = d.editorAdvancedModeFaceFadeNegative.vector3Value; } else { d.boxBlendDistanceNegative.vector3Value = d.boxBlendDistancePositive.vector3Value = Vector3.one * d.editorSimplifiedModeBlendDistance.floatValue; d.boxBlendNormalDistanceNegative.vector3Value = d.boxBlendNormalDistancePositive.vector3Value = Vector3.one * d.editorSimplifiedModeBlendNormalDistance.floatValue; d.boxSideFadeNegative.vector3Value = d.boxSideFadePositive.vector3Value = Vector3.one; } d.Apply(); } if (d.shape.intValue == (int)InfluenceShape.Sphere) { GUI.enabled = true; } } }
internal SerializedHDProbe(SerializedObject serializedObject) { this.serializedObject = serializedObject; //Find do not support inheritance override: //customBakedTexture will be assigned again in SerializedHDReflectionProbe customBakedTexture = serializedObject.Find((HDProbe p) => p.customTexture); renderDynamicObjects = serializedObject.Find((HDProbe p) => p.renderDynamicObjects); proxyVolumeReference = serializedObject.Find((HDProbe p) => p.proxyVolume); influenceVolume = new SerializedInfluenceVolume(serializedObject.Find((HDProbe p) => p.influenceVolume)); captureSettings = new SerializedCaptureSettings(serializedObject.Find((HDProbe p) => p.captureSettings)); infiniteProjection = serializedObject.Find((HDProbe p) => p.infiniteProjection); frameSettings = new SerializedFrameSettings(serializedObject.Find((HDProbe p) => p.frameSettings)); lightLayers = serializedObject.Find((HDProbe p) => p.lightLayers); weight = serializedObject.Find((HDProbe p) => p.weight); multiplier = serializedObject.Find((HDProbe p) => p.multiplier); mode = serializedObject.Find((HDProbe p) => p.mode); refreshMode = serializedObject.Find((HDProbe p) => p.refreshMode); }
static void DrawBoxHandle(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, Object sourceAsset, Gizmo6FacesBox box) { box.center = d.offset.vector3Value; box.size = d.boxSize.vector3Value; EditorGUI.BeginChangeCheck(); box.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(sourceAsset, "Modified Base Volume AABB"); d.offset.vector3Value = box.center; var size = box.size; Vector3 blendPositive = d.boxBlendDistancePositive.vector3Value; Vector3 blendNegative = d.boxBlendDistanceNegative.vector3Value; Vector3 blendNormalPositive = d.boxBlendNormalDistancePositive.vector3Value; Vector3 blendNormalNegative = d.boxBlendNormalDistanceNegative.vector3Value; for (int i = 0; i < 3; ++i) { size[i] = Mathf.Max(0f, size[i]); } d.boxSize.vector3Value = size; Vector3 halfSize = size * .5f; for (int i = 0; i < 3; ++i) { blendPositive[i] = Mathf.Clamp(blendPositive[i], 0f, halfSize[i]); blendNegative[i] = Mathf.Clamp(blendNegative[i], 0f, halfSize[i]); blendNormalPositive[i] = Mathf.Clamp(blendNormalPositive[i], 0f, halfSize[i]); blendNormalNegative[i] = Mathf.Clamp(blendNormalNegative[i], 0f, halfSize[i]); } d.boxBlendDistancePositive.vector3Value = blendPositive; d.boxBlendDistanceNegative.vector3Value = blendNegative; d.boxBlendNormalDistancePositive.vector3Value = blendNormalPositive; d.boxBlendNormalDistanceNegative.vector3Value = blendNormalNegative; if (d.editorAdvancedModeEnabled.boolValue) { d.editorAdvancedModeBlendDistancePositive.vector3Value = d.boxBlendDistancePositive.vector3Value; d.editorAdvancedModeBlendDistanceNegative.vector3Value = d.boxBlendDistanceNegative.vector3Value; d.editorAdvancedModeBlendNormalDistancePositive.vector3Value = d.boxBlendNormalDistancePositive.vector3Value; d.editorAdvancedModeBlendNormalDistanceNegative.vector3Value = d.boxBlendNormalDistanceNegative.vector3Value; } else { d.editorSimplifiedModeBlendDistance.floatValue = Mathf.Min( d.boxBlendDistancePositive.vector3Value.x, d.boxBlendDistancePositive.vector3Value.y, d.boxBlendDistancePositive.vector3Value.z, d.boxBlendDistanceNegative.vector3Value.x, d.boxBlendDistanceNegative.vector3Value.y, d.boxBlendDistanceNegative.vector3Value.z); d.boxBlendDistancePositive.vector3Value = d.boxBlendDistanceNegative.vector3Value = Vector3.one * d.editorSimplifiedModeBlendDistance.floatValue; d.editorSimplifiedModeBlendNormalDistance.floatValue = Mathf.Min( d.boxBlendNormalDistancePositive.vector3Value.x, d.boxBlendNormalDistancePositive.vector3Value.y, d.boxBlendNormalDistancePositive.vector3Value.z, d.boxBlendNormalDistanceNegative.vector3Value.x, d.boxBlendNormalDistanceNegative.vector3Value.y, d.boxBlendNormalDistanceNegative.vector3Value.z); d.boxBlendNormalDistancePositive.vector3Value = d.boxBlendNormalDistanceNegative.vector3Value = Vector3.one * d.editorSimplifiedModeBlendNormalDistance.floatValue; } d.Apply(); } }
static void DrawBoxHandle(SerializedInfluenceVolume serialized, Editor owner, Transform transform, HierarchicalBox box) { using (new Handles.DrawingScope(Matrix4x4.TRS(Vector3.zero, transform.rotation, Vector3.one))) { box.center = Quaternion.Inverse(transform.rotation) * transform.position; box.size = serialized.boxSize.vector3Value; EditorGUI.BeginChangeCheck(); box.DrawHull(true); box.DrawHandle(); if (EditorGUI.EndChangeCheck()) { var newPosition = transform.rotation * box.center; Undo.RecordObject(transform, "Moving Influence"); transform.position = newPosition; // Clamp blend distances var blendPositive = serialized.boxBlendDistancePositive.vector3Value; var blendNegative = serialized.boxBlendDistanceNegative.vector3Value; var blendNormalPositive = serialized.boxBlendNormalDistancePositive.vector3Value; var blendNormalNegative = serialized.boxBlendNormalDistanceNegative.vector3Value; var size = box.size; serialized.boxSize.vector3Value = size; var halfSize = size * .5f; for (int i = 0; i < 3; ++i) { blendPositive[i] = Mathf.Clamp(blendPositive[i], 0f, halfSize[i]); blendNegative[i] = Mathf.Clamp(blendNegative[i], 0f, halfSize[i]); blendNormalPositive[i] = Mathf.Clamp(blendNormalPositive[i], 0f, halfSize[i]); blendNormalNegative[i] = Mathf.Clamp(blendNormalNegative[i], 0f, halfSize[i]); } serialized.boxBlendDistancePositive.vector3Value = blendPositive; serialized.boxBlendDistanceNegative.vector3Value = blendNegative; serialized.boxBlendNormalDistancePositive.vector3Value = blendNormalPositive; serialized.boxBlendNormalDistanceNegative.vector3Value = blendNormalNegative; if (serialized.editorAdvancedModeEnabled.boolValue) { serialized.editorAdvancedModeBlendDistancePositive.vector3Value = serialized.boxBlendDistancePositive.vector3Value; serialized.editorAdvancedModeBlendDistanceNegative.vector3Value = serialized.boxBlendDistanceNegative.vector3Value; serialized.editorAdvancedModeBlendNormalDistancePositive.vector3Value = serialized.boxBlendNormalDistancePositive.vector3Value; serialized.editorAdvancedModeBlendNormalDistanceNegative.vector3Value = serialized.boxBlendNormalDistanceNegative.vector3Value; } else { serialized.editorSimplifiedModeBlendDistance.floatValue = Mathf.Min( serialized.boxBlendDistancePositive.vector3Value.x, serialized.boxBlendDistancePositive.vector3Value.y, serialized.boxBlendDistancePositive.vector3Value.z, serialized.boxBlendDistanceNegative.vector3Value.x, serialized.boxBlendDistanceNegative.vector3Value.y, serialized.boxBlendDistanceNegative.vector3Value.z); serialized.boxBlendDistancePositive.vector3Value = serialized.boxBlendDistanceNegative.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendDistance.floatValue; serialized.editorSimplifiedModeBlendNormalDistance.floatValue = Mathf.Min( serialized.boxBlendNormalDistancePositive.vector3Value.x, serialized.boxBlendNormalDistancePositive.vector3Value.y, serialized.boxBlendNormalDistancePositive.vector3Value.z, serialized.boxBlendNormalDistanceNegative.vector3Value.x, serialized.boxBlendNormalDistanceNegative.vector3Value.y, serialized.boxBlendNormalDistanceNegative.vector3Value.z); serialized.boxBlendNormalDistancePositive.vector3Value = serialized.boxBlendNormalDistanceNegative.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendNormalDistance.floatValue; } } } }