Skip to content

Improve Light Unit Slider UX #2122

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Oct 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -617,6 +617,7 @@ static void DrawLightIntensityGUILayout(SerializedHDLight serialized, Editor own

var lightType = serialized.type;
var lightUnit = serialized.lightUnit.GetEnumValue<LightUnit>();
k_LightUnitSliderUIDrawer.SetSerializedObject(serialized.serializedObject);
k_LightUnitSliderUIDrawer.Draw(lightType, lightUnit, serialized.intensity, lightUnitSliderRect, serialized, owner);

// We use PropertyField to draw the value to keep the handle at left of the field
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,33 @@ public LightUnitSliderUIDescriptor(LightUnitSliderUIRange[] valueRanges, float[]
struct LightUnitSliderUIRange
{
public LightUnitSliderUIRange(Texture2D icon, string tooltip, Vector2 value)
// If no preset value provided, then by default it is the average of the value range.
: this(icon, tooltip, value, 0.5f * (value.x + value.y))
{}

public LightUnitSliderUIRange(Texture2D icon, string tooltip, Vector2 value, float presetValue)
{
this.content = new GUIContent(icon, tooltip);
this.value = value;

Debug.Assert(presetValue > value.x && presetValue < value.y, "Preset value is outside the slider value range.");

// Preset values are arbitrarily chosen by artist, and we must use it instead of
// deriving it automatically (ie, the value range average).
this.presetValue = presetValue;
}

public static LightUnitSliderUIRange CautionRange(string tooltip, float value) => new LightUnitSliderUIRange
{
// Load the buildin caution icon with provided tooltip.
content = new GUIContent( EditorGUIUtility.TrIconContent("console.warnicon").image, tooltip),
value = new Vector2(-1, value)
value = new Vector2(-1, value),
presetValue = -1
};

public GUIContent content;
public Vector2 value;
public float presetValue;
}

static class LightUnitSliderDescriptors
Expand All @@ -71,7 +84,7 @@ static class LightUnitSliderDescriptors
// Lumen
public static LightUnitSliderUIDescriptor LumenDescriptor = new LightUnitSliderUIDescriptor(
LightUnitValueRanges.LumenValueTable,
LightUnitSliderDistributions.LinearDistribution,
LightUnitSliderDistributions.LumenDistribution,
LightUnitTooltips.k_PunctualCaution,
"Lumen"
);
Expand All @@ -87,8 +100,8 @@ static class LightUnitSliderDescriptors

// Temperature
public static LightUnitSliderUIDescriptor TemperatureDescriptor = new LightUnitSliderUIDescriptor(
LightUnitValueRanges.KelvinValueTable,
LightUnitSliderDistributions.LinearDistribution,
LightUnitValueRanges.KelvinValueTableNew,
LightUnitSliderDistributions.ExposureDistribution,
LightUnitTooltips.k_TemperatureCaution,
"Kelvin",
false,
Expand All @@ -99,18 +112,18 @@ private static class LightUnitValueRanges
{
public static readonly LightUnitSliderUIRange[] LumenValueTable =
{
new LightUnitSliderUIRange(LightUnitIcon.ExteriorLight, LightUnitTooltips.k_PunctualExterior, new Vector2(3000, 40000)),
new LightUnitSliderUIRange(LightUnitIcon.InteriorLight, LightUnitTooltips.k_PunctualInterior, new Vector2(300, 3000)),
new LightUnitSliderUIRange(LightUnitIcon.DecorativeLight,LightUnitTooltips.k_PunctualDecorative, new Vector2(15, 300)),
new LightUnitSliderUIRange(LightUnitIcon.Candlelight, LightUnitTooltips.k_PunctualCandle, new Vector2(0, 15)),
new LightUnitSliderUIRange(LightUnitIcon.ExteriorLight, LightUnitTooltips.k_PunctualExterior, new Vector2(3000, 40000), 10000),
new LightUnitSliderUIRange(LightUnitIcon.InteriorLight, LightUnitTooltips.k_PunctualInterior, new Vector2(300, 3000), 1000),
new LightUnitSliderUIRange(LightUnitIcon.DecorativeLight,LightUnitTooltips.k_PunctualDecorative, new Vector2(15, 300), 100),
new LightUnitSliderUIRange(LightUnitIcon.Candlelight, LightUnitTooltips.k_PunctualCandle, new Vector2(0, 15), 12.5f),
};

public static readonly LightUnitSliderUIRange[] LuxValueTable =
{
new LightUnitSliderUIRange(LightUnitIcon.BrightSky, LightUnitTooltips.k_LuxBrightSky, new Vector2(80000, 120000)),
new LightUnitSliderUIRange(LightUnitIcon.Overcast, LightUnitTooltips.k_LuxOvercastSky, new Vector2(10000, 80000)),
new LightUnitSliderUIRange(LightUnitIcon.SunriseSunset, LightUnitTooltips.k_LuxSunriseSunset, new Vector2(1, 10000)),
new LightUnitSliderUIRange(LightUnitIcon.Moonlight, LightUnitTooltips.k_LuxMoonlight, new Vector2(0, 1)),
new LightUnitSliderUIRange(LightUnitIcon.BrightSky, LightUnitTooltips.k_LuxBrightSky, new Vector2(80000, 120000), 100000),
new LightUnitSliderUIRange(LightUnitIcon.Overcast, LightUnitTooltips.k_LuxOvercastSky, new Vector2(10000, 80000), 20000),
new LightUnitSliderUIRange(LightUnitIcon.SunriseSunset, LightUnitTooltips.k_LuxSunriseSunset, new Vector2(1, 10000), 5000),
new LightUnitSliderUIRange(LightUnitIcon.Moonlight, LightUnitTooltips.k_LuxMoonlight, new Vector2(0, 1), 0.5f),
};

public static readonly LightUnitSliderUIRange[] ExposureValueTable =
Expand All @@ -123,13 +136,15 @@ private static class LightUnitValueRanges
new LightUnitSliderUIRange(LightUnitIcon.MoonlessNight, LightUnitTooltips.k_ExposureMoonlessNight, new Vector2(-5, 0)),
};

public static readonly LightUnitSliderUIRange[] KelvinValueTable =
public static readonly LightUnitSliderUIRange[] KelvinValueTableNew =
{
new LightUnitSliderUIRange(LightUnitIcon.BlueSky, LightUnitTooltips.k_TemperatureBlueSky, new Vector2(10000, 20000)),
new LightUnitSliderUIRange(LightUnitIcon.Overcast, LightUnitTooltips.k_TemperatureCloudySky, new Vector2(6500, 10000)),
new LightUnitSliderUIRange(LightUnitIcon.DirectSunlight, LightUnitTooltips.k_TemperatureDirectSunlight, new Vector2(3500, 6500)),
new LightUnitSliderUIRange(LightUnitIcon.IntenseAreaLight, LightUnitTooltips.k_TemperatureArtificial, new Vector2(2500, 3500)),
new LightUnitSliderUIRange(LightUnitIcon.Candlelight, LightUnitTooltips.k_TemperatureCandle, new Vector2(1500, 2500)),
new LightUnitSliderUIRange(LightUnitIcon.BlueSky, LightUnitTooltips.k_TemperatureBlueSky, new Vector2(10000, 20000), 15000),
new LightUnitSliderUIRange(LightUnitIcon.Shade, LightUnitTooltips.k_TemperatureShade, new Vector2(7000, 10000), 8000),
new LightUnitSliderUIRange(LightUnitIcon.CloudySky, LightUnitTooltips.k_TemperatureCloudySky, new Vector2(6000, 7000), 6500),
new LightUnitSliderUIRange(LightUnitIcon.DirectSunlight, LightUnitTooltips.k_TemperatureDirectSunlight, new Vector2(4500, 6000), 5500),
new LightUnitSliderUIRange(LightUnitIcon.Fluorescent, LightUnitTooltips.k_TemperatureFluorescent, new Vector2(3500, 4500), 4000),
new LightUnitSliderUIRange(LightUnitIcon.IntenseAreaLight, LightUnitTooltips.k_TemperatureIncandescent, new Vector2(2500, 3500), 3000),
new LightUnitSliderUIRange(LightUnitIcon.Candlelight, LightUnitTooltips.k_TemperatureCandle, new Vector2(1500, 2500), 1900),
};
}

Expand All @@ -138,14 +153,14 @@ private static class LightUnitSliderDistributions
// Warning: All of these values need to be kept in sync with their associated descriptor's set of value ranges.
public static readonly float[] LuxDistribution = {0.0f, 0.05f, 0.5f, 0.9f, 1.0f};

private const float LinearStep = 1 / 4f;
public static readonly float[] LinearDistribution =
private const float LumenStep = 1 / 4f;
public static readonly float[] LumenDistribution =
{
0 * LinearStep,
1 * LinearStep,
2 * LinearStep,
3 * LinearStep,
4 * LinearStep
0 * LumenStep,
1 * LumenStep,
2 * LumenStep,
3 * LumenStep,
4 * LumenStep
};

private const float ExposureStep = 1 / 6f;
Expand Down Expand Up @@ -192,6 +207,8 @@ static Texture2D GetLightUnitIcon(string name)
public static Texture2D SunriseSunset = GetLightUnitIcon("SunriseSunset");
public static Texture2D VeryBrightSun = GetLightUnitIcon("VeryBrightSun");
public static Texture2D BrightSky = GetLightUnitIcon("BrightSky");
public static Texture2D Shade = GetLightUnitIcon("Shade");
public static Texture2D Fluorescent = GetLightUnitIcon("Fluorescent");
}

private static class LightUnitTooltips
Expand Down Expand Up @@ -225,10 +242,12 @@ private static class LightUnitTooltips

// Temperature
public const string k_TemperatureBlueSky = "Blue Sky";
public const string k_TemperatureCloudySky = "Cloudy Sky";
public const string k_TemperatureShade = "Shade (Clear Sky)";
public const string k_TemperatureCloudySky = "Cloudy Skylight";
public const string k_TemperatureDirectSunlight = "Direct Sunlight";
public const string k_TemperatureArtificial = "Artificial";
public const string k_TemperatureCandle = "Candle";
public const string k_TemperatureFluorescent = "Fluorescent Light";
public const string k_TemperatureIncandescent = "Incandescent Light";
public const string k_TemperatureCandle = "Candlelight";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ void DoFixedExposureField(SerializedDataParameter fixedExposure)

var sliderRect = lineRect;
sliderRect.y -= EditorGUIUtility.singleLineHeight;
k_LightUnitSlider.SetSerializedObject(serializedObject);
k_LightUnitSlider.DrawExposureSlider(m_FixedExposure.value, sliderRect);

// GUIContent.none disables horizontal scrolling, ur TrTextContent and adjust the rect to make it work
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading