public override void OnInspectorGUI() { serializedObject.Update(); Drawer_ToolBar(); EditorGUILayout.PropertyField(albedo, Styles.s_AlbedoLabel); EditorGUILayout.PropertyField(meanFreePath, Styles.s_MeanFreePathLabel); EditorGUILayout.Space(); CoreEditorUtils.DrawSplitter(); EditorGUI.BeginChangeCheck(); bool expendedVolume = CoreEditorUtils.DrawHeaderFoldout(Styles.k_VolumeHeader, GetExpendedAreas((uint)Expendable.Volume)); if (EditorGUI.EndChangeCheck()) { SetExpendedAreas((uint)Expendable.Volume, expendedVolume); } if (expendedVolume) { Drawer_AdvancedSwitch(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(size, Styles.s_Size); if (EditorGUI.EndChangeCheck()) { Vector3 tmpClamp = size.vector3Value; tmpClamp.x = Mathf.Max(0f, tmpClamp.x); tmpClamp.y = Mathf.Max(0f, tmpClamp.y); tmpClamp.z = Mathf.Max(0f, tmpClamp.z); size.vector3Value = tmpClamp; } Vector3 s = size.vector3Value; EditorGUI.BeginChangeCheck(); if (advancedFade.boolValue) { Vector3 positive = positiveFade.vector3Value; positive.x *= s.x; positive.y *= s.y; positive.z *= s.z; Vector3 negative = negativeFade.vector3Value; negative.x *= s.x; negative.y *= s.y; negative.z *= s.z; EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(Styles.s_BlendLabel, ref positive, ref negative, Vector3.zero, s, InfluenceVolumeUI.k_HandlesColor); if (EditorGUI.EndChangeCheck()) { positive.x /= s.x; positive.y /= s.y; positive.z /= s.z; negative.x /= s.x; negative.y /= s.y; negative.z /= s.z; //forbid positive/negative box that doesn't intersect in inspector too for (int axis = 0; axis < 3; ++axis) { if (positive[axis] > 1f - negative[axis]) { if (positive == positiveFade.vector3Value) { negative[axis] = 1f - positive[axis]; } else { positive[axis] = 1f - negative[axis]; } } } positiveFade.vector3Value = positive; negativeFade.vector3Value = negative; } } else { EditorGUI.BeginChangeCheck(); float distanceMax = Mathf.Min(s.x, s.y, s.z); float uniformFadeDistance = uniformFade.floatValue * distanceMax; uniformFadeDistance = EditorGUILayout.FloatField(Styles.s_BlendLabel, uniformFadeDistance); if (EditorGUI.EndChangeCheck()) { uniformFade.floatValue = Mathf.Clamp(uniformFadeDistance / distanceMax, 0f, 0.5f); } } if (EditorGUI.EndChangeCheck()) { Vector3 posFade = new Vector3(); posFade.x = Mathf.Clamp01(positiveFade.vector3Value.x); posFade.y = Mathf.Clamp01(positiveFade.vector3Value.y); posFade.z = Mathf.Clamp01(positiveFade.vector3Value.z); Vector3 negFade = new Vector3(); negFade.x = Mathf.Clamp01(negativeFade.vector3Value.x); negFade.y = Mathf.Clamp01(negativeFade.vector3Value.y); negFade.z = Mathf.Clamp01(negativeFade.vector3Value.z); positiveFade.vector3Value = posFade; negativeFade.vector3Value = negFade; } EditorGUILayout.PropertyField(invertFade, Styles.s_InvertFadeLabel); EditorGUILayout.Space(); } CoreEditorUtils.DrawSplitter(); EditorGUI.BeginChangeCheck(); bool expendedDensityMaskTexture = CoreEditorUtils.DrawHeaderFoldout(Styles.k_DensityMaskTextureHeader, GetExpendedAreas((uint)Expendable.DensityMaskTexture)); if (EditorGUI.EndChangeCheck()) { SetExpendedAreas((uint)Expendable.DensityMaskTexture, expendedDensityMaskTexture); } if (expendedDensityMaskTexture) { EditorGUILayout.PropertyField(volumeTexture, Styles.s_VolumeTextureLabel); EditorGUILayout.PropertyField(textureScroll, Styles.s_TextureScrollLabel); EditorGUILayout.PropertyField(textureTile, Styles.s_TextureTileLabel); } serializedObject.ApplyModifiedProperties(); }
static void Drawer_SectionShapeBox(InfluenceVolumeUI s, SerializedInfluenceVolume d, Editor o, bool drawOffset, bool drawNormal, bool drawFace) { bool advanced = d.editorAdvancedModeEnabled.boolValue; var maxFadeDistance = d.boxSize.vector3Value * 0.5f; var minFadeDistance = Vector3.zero; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(d.boxSize, boxSizeContent); if (EditorGUI.EndChangeCheck()) { Vector3 blendPositive = d.boxBlendDistancePositive.vector3Value; Vector3 blendNegative = d.boxBlendDistanceNegative.vector3Value; Vector3 blendNormalPositive = d.boxBlendNormalDistancePositive.vector3Value; Vector3 blendNormalNegative = d.boxBlendNormalDistanceNegative.vector3Value; Vector3 size = d.boxSize.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.Max(blendPositive.x, blendPositive.y, blendPositive.z, blendNegative.x, blendNegative.y, blendNegative.z); d.boxBlendDistancePositive.vector3Value = d.boxBlendDistanceNegative.vector3Value = Vector3.one * d.editorSimplifiedModeBlendDistance.floatValue; d.editorSimplifiedModeBlendNormalDistance.floatValue = Mathf.Max(blendNormalPositive.x, blendNormalPositive.y, blendNormalPositive.z, blendNormalNegative.x, blendNormalNegative.y, blendNormalNegative.z); d.boxBlendNormalDistancePositive.vector3Value = d.boxBlendNormalDistanceNegative.vector3Value = Vector3.one * d.editorSimplifiedModeBlendNormalDistance.floatValue; } } HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.InfluenceShape, o, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); if (drawOffset) { Drawer_Offset(s, d, o); } GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance(d, false, maxFadeDistance, blendDistanceContent); HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.Blend, o, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 2 : 1) * (EditorGUIUtility.singleLineHeight + 3))); EditorGUILayout.EndHorizontal(); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing * 2f); if (drawNormal) { EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance(d, true, maxFadeDistance, blendNormalDistanceContent); HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.NormalBlend, o, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 2 : 1) * (EditorGUIUtility.singleLineHeight + 3))); EditorGUILayout.EndHorizontal(); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing * 2f); } if (advanced && drawFace) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(faceFadeContent, d.editorAdvancedModeFaceFadePositive, d.editorAdvancedModeFaceFadeNegative, Vector3.zero, Vector3.one, HDReflectionProbeEditor.k_handlesColor); if (EditorGUI.EndChangeCheck()) { d.boxSideFadePositive.vector3Value = d.editorAdvancedModeFaceFadePositive.vector3Value; d.boxSideFadeNegative.vector3Value = d.editorAdvancedModeFaceFadeNegative.vector3Value; } GUILayout.Space(28f + 9f); //add right margin for alignment EditorGUILayout.EndHorizontal(); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing * 2f); } }
static void Drawer_VolumeContent(SerializedDensityVolume serialized, Editor owner) { //keep previous data as value are stored in percent Vector3 previousSize = serialized.size.vector3Value; float previousUniformFade = serialized.editorUniformFade.floatValue; Vector3 previousPositiveFade = serialized.editorPositiveFade.vector3Value; Vector3 previousNegativeFade = serialized.editorNegativeFade.vector3Value; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.size, Styles.s_Size); if (EditorGUI.EndChangeCheck()) { Vector3 newSize = serialized.size.vector3Value; newSize.x = Mathf.Max(0f, newSize.x); newSize.y = Mathf.Max(0f, newSize.y); newSize.z = Mathf.Max(0f, newSize.z); serialized.size.vector3Value = newSize; //update advanced mode blend Vector3 newPositiveFade = new Vector3( newSize.x < 0.00001 ? 0 : previousPositiveFade.x * previousSize.x / newSize.x, newSize.y < 0.00001 ? 0 : previousPositiveFade.y * previousSize.y / newSize.y, newSize.z < 0.00001 ? 0 : previousPositiveFade.z * previousSize.z / newSize.z ); Vector3 newNegativeFade = new Vector3( newSize.x < 0.00001 ? 0 : previousNegativeFade.x * previousSize.x / newSize.x, newSize.y < 0.00001 ? 0 : previousNegativeFade.y * previousSize.y / newSize.y, newSize.z < 0.00001 ? 0 : previousNegativeFade.z * previousSize.z / newSize.z ); for (int axeIndex = 0; axeIndex < 3; ++axeIndex) { if (newPositiveFade[axeIndex] + newNegativeFade[axeIndex] > 1) { float overValue = (newPositiveFade[axeIndex] + newNegativeFade[axeIndex] - 1f) * 0.5f; newPositiveFade[axeIndex] -= overValue; newNegativeFade[axeIndex] -= overValue; if (newPositiveFade[axeIndex] < 0) { newNegativeFade[axeIndex] += newPositiveFade[axeIndex]; newPositiveFade[axeIndex] = 0f; } if (newNegativeFade[axeIndex] < 0) { newPositiveFade[axeIndex] += newNegativeFade[axeIndex]; newNegativeFade[axeIndex] = 0f; } } } serialized.editorPositiveFade.vector3Value = newPositiveFade; serialized.editorNegativeFade.vector3Value = newNegativeFade; //update normal mode blend float max = Mathf.Min(newSize.x, newSize.y, newSize.z) * 0.5f; serialized.editorUniformFade.floatValue = Mathf.Clamp(serialized.editorUniformFade.floatValue, 0f, max); } EditorGUILayout.Space(); EditorGUILayout.PropertyField(serialized.editorAdvancedFade, Styles.s_ManipulatonTypeContent); Vector3 serializedSize = serialized.size.vector3Value; EditorGUI.BeginChangeCheck(); if (serialized.editorAdvancedFade.hasMultipleDifferentValues) { using (new EditorGUI.DisabledScope(true)) EditorGUILayout.LabelField(Styles.s_BlendLabel, EditorGUIUtility.TrTextContent("Multiple values for Advanced mode")); } else if (serialized.editorAdvancedFade.boolValue) { EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(Styles.s_BlendLabel, serialized.editorPositiveFade, serialized.editorNegativeFade, Vector3.zero, serializedSize, InfluenceVolumeUI.k_HandlesColor, serialized.size); if (EditorGUI.EndChangeCheck()) { //forbid positive/negative box that doesn't intersect in inspector too Vector3 positive = serialized.editorPositiveFade.vector3Value; Vector3 negative = serialized.editorNegativeFade.vector3Value; for (int axis = 0; axis < 3; ++axis) { if (positive[axis] > 1f - negative[axis]) { if (positive == serialized.editorPositiveFade.vector3Value) { negative[axis] = 1f - positive[axis]; } else { positive[axis] = 1f - negative[axis]; } } } serialized.editorPositiveFade.vector3Value = positive; serialized.editorNegativeFade.vector3Value = negative; } } else { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.editorUniformFade, Styles.s_BlendLabel); if (EditorGUI.EndChangeCheck()) { float max = Mathf.Min(serializedSize.x, serializedSize.y, serializedSize.z) * 0.5f; serialized.editorUniformFade.floatValue = Mathf.Clamp(serialized.editorUniformFade.floatValue, 0f, max); } } if (EditorGUI.EndChangeCheck()) { Vector3 posFade = new Vector3(); posFade.x = Mathf.Clamp01(serialized.editorPositiveFade.vector3Value.x); posFade.y = Mathf.Clamp01(serialized.editorPositiveFade.vector3Value.y); posFade.z = Mathf.Clamp01(serialized.editorPositiveFade.vector3Value.z); Vector3 negFade = new Vector3(); negFade.x = Mathf.Clamp01(serialized.editorNegativeFade.vector3Value.x); negFade.y = Mathf.Clamp01(serialized.editorNegativeFade.vector3Value.y); negFade.z = Mathf.Clamp01(serialized.editorNegativeFade.vector3Value.z); serialized.editorPositiveFade.vector3Value = posFade; serialized.editorNegativeFade.vector3Value = negFade; } EditorGUILayout.Space(); EditorGUILayout.PropertyField(serialized.invertFade, Styles.s_InvertFadeLabel); // Distance fade. { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.distanceFadeStart, Styles.s_DistanceFadeStartLabel); EditorGUILayout.PropertyField(serialized.distanceFadeEnd, Styles.s_DistanceFadeEndLabel); if (EditorGUI.EndChangeCheck()) { float distanceFadeStart = Mathf.Max(0, serialized.distanceFadeStart.floatValue); float distanceFadeEnd = Mathf.Max(distanceFadeStart, serialized.distanceFadeEnd.floatValue); serialized.distanceFadeStart.floatValue = distanceFadeStart; serialized.distanceFadeEnd.floatValue = distanceFadeEnd; } } }
static void Drawer_VolumeContent(SerializedDensityVolume serialized, Editor owner) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.size, Styles.s_Size); if (EditorGUI.EndChangeCheck()) { Vector3 tmpClamp = serialized.size.vector3Value; tmpClamp.x = Mathf.Max(0f, tmpClamp.x); tmpClamp.y = Mathf.Max(0f, tmpClamp.y); tmpClamp.z = Mathf.Max(0f, tmpClamp.z); serialized.size.vector3Value = tmpClamp; } Vector3 s = serialized.size.vector3Value; EditorGUI.BeginChangeCheck(); if (serialized.advancedFade.boolValue) { Vector3 positive = serialized.positiveFade.vector3Value; positive.x *= s.x; positive.y *= s.y; positive.z *= s.z; Vector3 negative = serialized.negativeFade.vector3Value; negative.x *= s.x; negative.y *= s.y; negative.z *= s.z; EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(Styles.s_BlendLabel, ref positive, ref negative, Vector3.zero, s, InfluenceVolumeUI.k_HandlesColor); if (EditorGUI.EndChangeCheck()) { positive.x /= s.x; positive.y /= s.y; positive.z /= s.z; negative.x /= s.x; negative.y /= s.y; negative.z /= s.z; //forbid positive/negative box that doesn't intersect in inspector too for (int axis = 0; axis < 3; ++axis) { if (positive[axis] > 1f - negative[axis]) { if (positive == serialized.positiveFade.vector3Value) { negative[axis] = 1f - positive[axis]; } else { positive[axis] = 1f - negative[axis]; } } } serialized.positiveFade.vector3Value = positive; serialized.negativeFade.vector3Value = negative; } } else { EditorGUI.BeginChangeCheck(); float distanceMax = Mathf.Min(s.x, s.y, s.z); float uniformFadeDistance = serialized.uniformFade.floatValue * distanceMax; uniformFadeDistance = EditorGUILayout.FloatField(Styles.s_BlendLabel, uniformFadeDistance); if (EditorGUI.EndChangeCheck()) { serialized.uniformFade.floatValue = Mathf.Clamp(uniformFadeDistance / distanceMax, 0f, 0.5f); } } if (EditorGUI.EndChangeCheck()) { Vector3 posFade = new Vector3(); posFade.x = Mathf.Clamp01(serialized.positiveFade.vector3Value.x); posFade.y = Mathf.Clamp01(serialized.positiveFade.vector3Value.y); posFade.z = Mathf.Clamp01(serialized.positiveFade.vector3Value.z); Vector3 negFade = new Vector3(); negFade.x = Mathf.Clamp01(serialized.negativeFade.vector3Value.x); negFade.y = Mathf.Clamp01(serialized.negativeFade.vector3Value.y); negFade.z = Mathf.Clamp01(serialized.negativeFade.vector3Value.z); serialized.positiveFade.vector3Value = posFade; serialized.negativeFade.vector3Value = negFade; } EditorGUILayout.PropertyField(serialized.invertFade, Styles.s_InvertFadeLabel); }
static void Drawer_VolumeContent(SerializedProbeVolume serialized, Editor owner) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.size, Styles.s_Size); if (EditorGUI.EndChangeCheck()) { Vector3 tmpClamp = serialized.size.vector3Value; tmpClamp.x = Mathf.Max(0f, tmpClamp.x); tmpClamp.y = Mathf.Max(0f, tmpClamp.y); tmpClamp.z = Mathf.Max(0f, tmpClamp.z); serialized.size.vector3Value = tmpClamp; } Vector3 s = serialized.size.vector3Value; EditorGUI.BeginChangeCheck(); if (serialized.advancedFade.boolValue) { EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(Styles.s_BlendLabel, serialized.positiveFade, serialized.negativeFade, Vector3.zero, s, InfluenceVolumeUI.k_HandlesColor, serialized.size); if (EditorGUI.EndChangeCheck()) { //forbid positive/negative box that doesn't intersect in inspector too Vector3 positive = serialized.positiveFade.vector3Value; Vector3 negative = serialized.negativeFade.vector3Value; for (int axis = 0; axis < 3; ++axis) { if (positive[axis] > 1f - negative[axis]) { if (positive == serialized.positiveFade.vector3Value) { negative[axis] = 1f - positive[axis]; } else { positive[axis] = 1f - negative[axis]; } } } serialized.positiveFade.vector3Value = positive; serialized.negativeFade.vector3Value = negative; } } else { EditorGUI.BeginChangeCheck(); float distanceMax = Mathf.Min(s.x, s.y, s.z); float uniformFadeDistance = serialized.uniformFade.floatValue * distanceMax; uniformFadeDistance = EditorGUILayout.FloatField(Styles.s_BlendLabel, uniformFadeDistance); if (EditorGUI.EndChangeCheck()) { serialized.uniformFade.floatValue = Mathf.Clamp(uniformFadeDistance / distanceMax, 0f, 0.5f); } } if (EditorGUI.EndChangeCheck()) { Vector3 posFade = new Vector3(); posFade.x = Mathf.Clamp01(serialized.positiveFade.vector3Value.x); posFade.y = Mathf.Clamp01(serialized.positiveFade.vector3Value.y); posFade.z = Mathf.Clamp01(serialized.positiveFade.vector3Value.z); Vector3 negFade = new Vector3(); negFade.x = Mathf.Clamp01(serialized.negativeFade.vector3Value.x); negFade.y = Mathf.Clamp01(serialized.negativeFade.vector3Value.y); negFade.z = Mathf.Clamp01(serialized.negativeFade.vector3Value.z); serialized.positiveFade.vector3Value = posFade; serialized.negativeFade.vector3Value = negFade; } // Distance fade. { EditorGUI.BeginChangeCheck(); float distanceFadeStart = EditorGUILayout.FloatField(Styles.s_DistanceFadeStartLabel, serialized.distanceFadeStart.floatValue); float distanceFadeEnd = EditorGUILayout.FloatField(Styles.s_DistanceFadeEndLabel, serialized.distanceFadeEnd.floatValue); if (EditorGUI.EndChangeCheck()) { distanceFadeStart = Mathf.Max(0, distanceFadeStart); distanceFadeEnd = Mathf.Max(distanceFadeStart, distanceFadeEnd); serialized.distanceFadeStart.floatValue = distanceFadeStart; serialized.distanceFadeEnd.floatValue = distanceFadeEnd; } } EditorGUILayout.PropertyField(serialized.lightLayers); EditorGUILayout.PropertyField(serialized.volumeBlendMode, Styles.s_VolumeBlendModeLabel); EditorGUILayout.Slider(serialized.weight, 0.0f, 1.0f, Styles.s_WeightLabel); { EditorGUI.BeginChangeCheck(); float normalBiasWS = EditorGUILayout.FloatField(Styles.s_NormalBiasWSLabel, serialized.normalBiasWS.floatValue); if (EditorGUI.EndChangeCheck()) { serialized.normalBiasWS.floatValue = Mathf.Max(0, normalBiasWS); } } EditorGUILayout.PropertyField(serialized.debugColor, Styles.s_DebugColorLabel); if (ShaderConfig.s_ProbeVolumesAdditiveBlending == 0 && serialized.volumeBlendMode.intValue != (int)VolumeBlendMode.Normal) { EditorGUILayout.HelpBox(Styles.k_FeatureAdditiveBlendingDisabledError, MessageType.Error); } }
static void Drawer_SectionShapeBox(SerializedInfluenceVolume serialized, Editor owner, bool drawOffset, bool drawNormal, bool drawFace) { bool advanced = serialized.editorAdvancedModeEnabled.boolValue; //small piece of init logic previously in the removed Drawer_InfluenceAdvancedSwitch s_BoxBaseHandle.monoHandle = false; s_BoxInfluenceHandle.monoHandle = !advanced; s_BoxInfluenceNormalHandle.monoHandle = !advanced; var maxFadeDistance = serialized.boxSize.vector3Value * 0.5f; var minFadeDistance = Vector3.zero; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.boxSize, boxSizeContent); if (EditorGUI.EndChangeCheck()) { Vector3 blendPositive = serialized.boxBlendDistancePositive.vector3Value; Vector3 blendNegative = serialized.boxBlendDistanceNegative.vector3Value; Vector3 blendNormalPositive = serialized.boxBlendNormalDistancePositive.vector3Value; Vector3 blendNormalNegative = serialized.boxBlendNormalDistanceNegative.vector3Value; Vector3 size = serialized.boxSize.vector3Value; for (int i = 0; i < 3; ++i) { size[i] = Mathf.Max(0f, size[i]); } serialized.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]); } 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.Max(blendPositive.x, blendPositive.y, blendPositive.z, blendNegative.x, blendNegative.y, blendNegative.z); serialized.boxBlendDistancePositive.vector3Value = serialized.boxBlendDistanceNegative.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendDistance.floatValue; serialized.editorSimplifiedModeBlendNormalDistance.floatValue = Mathf.Max(blendNormalPositive.x, blendNormalPositive.y, blendNormalPositive.z, blendNormalNegative.x, blendNormalNegative.y, blendNormalNegative.z); serialized.boxBlendNormalDistancePositive.vector3Value = serialized.boxBlendNormalDistanceNegative.vector3Value = Vector3.one * serialized.editorSimplifiedModeBlendNormalDistance.floatValue; } } HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.InfluenceShape, owner, GUILayout.Width(28f), GUILayout.MinHeight(22f)); EditorGUILayout.EndHorizontal(); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); EditorGUILayout.PropertyField(serialized.editorAdvancedModeEnabled, manipulatonTypeContent); EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance(serialized, false, maxFadeDistance, blendDistanceContent); HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.Blend, owner, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 2 : 1) * (EditorGUIUtility.singleLineHeight + 3))); EditorGUILayout.EndHorizontal(); if (drawNormal) { EditorGUILayout.BeginHorizontal(); Drawer_AdvancedBlendDistance(serialized, true, maxFadeDistance, blendNormalDistanceContent); HDProbeUI.Drawer_ToolBarButton(HDProbeUI.ToolBar.NormalBlend, owner, GUILayout.ExpandHeight(true), GUILayout.Width(28f), GUILayout.MinHeight(22f), GUILayout.MaxHeight((advanced ? 2 : 1) * (EditorGUIUtility.singleLineHeight + 3))); EditorGUILayout.EndHorizontal(); } if (advanced && drawFace) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(faceFadeContent, serialized.editorAdvancedModeFaceFadePositive, serialized.editorAdvancedModeFaceFadeNegative, Vector3.zero, Vector3.one, k_HandlesColor); if (EditorGUI.EndChangeCheck()) { serialized.boxSideFadePositive.vector3Value = serialized.editorAdvancedModeFaceFadePositive.vector3Value; serialized.boxSideFadeNegative.vector3Value = serialized.editorAdvancedModeFaceFadeNegative.vector3Value; } GUILayout.Space(30f); //add right margin for alignment EditorGUILayout.EndHorizontal(); } }
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; //resync to be sure prefab revert will keep syncs if (serialized.editorAdvancedModeEnabled.boolValue) { if (!(Mathf.Approximately(Vector3.SqrMagnitude(blendDistancePositive.vector3Value - editorAdvancedModeBlendDistancePositive.vector3Value), 0f) && Mathf.Approximately(Vector3.SqrMagnitude(blendDistanceNegative.vector3Value - editorAdvancedModeBlendDistanceNegative.vector3Value), 0f))) { blendDistancePositive.vector3Value = editorAdvancedModeBlendDistancePositive.vector3Value; blendDistanceNegative.vector3Value = editorAdvancedModeBlendDistanceNegative.vector3Value; serialized.Apply(); SceneView.RepaintAll(); //update gizmo } } else { float scalar = editorSimplifiedModeBlendDistance.floatValue; if (!(Mathf.Approximately(blendDistancePositive.vector3Value.x, scalar) && Mathf.Approximately(blendDistancePositive.vector3Value.y, scalar) && Mathf.Approximately(blendDistancePositive.vector3Value.z, scalar) && Mathf.Approximately(blendDistanceNegative.vector3Value.x, scalar) && Mathf.Approximately(blendDistanceNegative.vector3Value.y, scalar) && Mathf.Approximately(blendDistanceNegative.vector3Value.z, scalar))) { blendDistancePositive.vector3Value = blendDistanceNegative.vector3Value = new Vector3(scalar, scalar, scalar); serialized.Apply(); SceneView.RepaintAll(); //update gizmo } } if (serialized.editorAdvancedModeEnabled.boolValue) { EditorGUI.BeginChangeCheck(); CoreEditorUtils.DrawVector6(content, editorAdvancedModeBlendDistancePositive, editorAdvancedModeBlendDistanceNegative, Vector3.zero, maxBlendDistance, k_HandlesColor); if (EditorGUI.EndChangeCheck()) { blendDistancePositive.vector3Value = editorAdvancedModeBlendDistancePositive.vector3Value; blendDistanceNegative.vector3Value = editorAdvancedModeBlendDistanceNegative.vector3Value; } } else { Rect lineRect = EditorGUILayout.GetControlRect(); EditorGUI.BeginProperty(lineRect, content, editorSimplifiedModeBlendDistance); float distance = editorSimplifiedModeBlendDistance.floatValue; EditorGUI.BeginChangeCheck(); distance = EditorGUI.FloatField(lineRect, 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; } EditorGUI.EndProperty(); } }