From 695b90913be420e6e7193f1975114c2ad17bbfcd Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Mon, 5 Oct 2020 12:16:27 -0400 Subject: [PATCH 01/16] Add the new temperature icons + update the tooltips per artist request --- .../LightUnit/LightUnitSliderSettings.cs | 44 ++++--- .../Texture/LightUnitIcons/Fluorescent.png | 3 + .../LightUnitIcons/Fluorescent.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/Fluorescent@2x.png | 3 + .../LightUnitIcons/Fluorescent@2x.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/Shade.png | 3 + .../Texture/LightUnitIcons/Shade.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/Shade@2x.png | 3 + .../Texture/LightUnitIcons/Shade@2x.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/d_Fluorescent.png | 3 + .../LightUnitIcons/d_Fluorescent.png.meta | 108 ++++++++++++++++++ .../LightUnitIcons/d_Fluorescent@2x.png | 3 + .../LightUnitIcons/d_Fluorescent@2x.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/d_Shade.png | 3 + .../Texture/LightUnitIcons/d_Shade.png.meta | 108 ++++++++++++++++++ .../Texture/LightUnitIcons/d_Shade@2x.png | 3 + .../LightUnitIcons/d_Shade@2x.png.meta | 108 ++++++++++++++++++ 17 files changed, 913 insertions(+), 19 deletions(-) create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png.meta create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png create mode 100644 com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png.meta diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs index 3e509e3d0d8..5e0ae4c9068 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs @@ -71,7 +71,7 @@ static class LightUnitSliderDescriptors // Lumen public static LightUnitSliderUIDescriptor LumenDescriptor = new LightUnitSliderUIDescriptor( LightUnitValueRanges.LumenValueTable, - LightUnitSliderDistributions.LinearDistribution, + LightUnitSliderDistributions.LumenDistribution, LightUnitTooltips.k_PunctualCaution, "Lumen" ); @@ -87,8 +87,8 @@ static class LightUnitSliderDescriptors // Temperature public static LightUnitSliderUIDescriptor TemperatureDescriptor = new LightUnitSliderUIDescriptor( - LightUnitValueRanges.KelvinValueTable, - LightUnitSliderDistributions.LinearDistribution, + LightUnitValueRanges.KelvinValueTableNew, + LightUnitSliderDistributions.ExposureDistribution, LightUnitTooltips.k_TemperatureCaution, "Kelvin", false, @@ -123,13 +123,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)), + new LightUnitSliderUIRange(LightUnitIcon.Shade, LightUnitTooltips.k_TemperatureShade, new Vector2(7000, 10000)), + new LightUnitSliderUIRange(LightUnitIcon.CloudySky, LightUnitTooltips.k_TemperatureCloudySky, new Vector2(6000, 7000)), + new LightUnitSliderUIRange(LightUnitIcon.DirectSunlight, LightUnitTooltips.k_TemperatureDirectSunlight, new Vector2(4500, 6000)), + new LightUnitSliderUIRange(LightUnitIcon.Fluorescent, LightUnitTooltips.k_TemperatureFluorescent, new Vector2(3500, 4500)), + new LightUnitSliderUIRange(LightUnitIcon.IntenseAreaLight, LightUnitTooltips.k_TemperatureIncandescent, new Vector2(2500, 3500)), + new LightUnitSliderUIRange(LightUnitIcon.Candlelight, LightUnitTooltips.k_TemperatureCandle, new Vector2(1500, 2500)), }; } @@ -138,14 +140,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; @@ -192,6 +194,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 @@ -225,10 +229,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"; } } } diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png new file mode 100644 index 00000000000..0f78e92e07c --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f1b0e8aa3b7ff259163ed2454bf6a48f8fe2079d514d0586e331e4e446d20c7 +size 390 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png.meta new file mode 100644 index 00000000000..7facaed0b0c --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 52dd14d6fa6ca2d46b942c8289a898eb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png new file mode 100644 index 00000000000..42b4e7cbb9f --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64c2c34c217efaa1409cb8647bac96b80094ee2be26c88776330064c05c7a37b +size 657 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png.meta new file mode 100644 index 00000000000..c61ffcb0b88 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Fluorescent@2x.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 81321ffad3c324c42806d47efb84d4d1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png new file mode 100644 index 00000000000..c10967ee3b2 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38535828d4f58ef3d7b5a28d055825a835bdd607bae757ecee93840c2fffd65d +size 330 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png.meta new file mode 100644 index 00000000000..2093e707704 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 7146ed2a10f80c340b4c181e2892c87a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png new file mode 100644 index 00000000000..ae3c8c5136f --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44ab0e52fbd9468e53779d4b133fa352f4e95b9244abe5dce8616dda4926f2c4 +size 537 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png.meta new file mode 100644 index 00000000000..378b5ba9dbc --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/Shade@2x.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 1f20ae185bcb2254a844ed304955beb3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png new file mode 100644 index 00000000000..fc36c651468 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00b401a2a5bb0105586437551fe044c32134d2ae610694400bc925fcc5286b20 +size 380 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png.meta new file mode 100644 index 00000000000..80bd08bff7e --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: b95665ddb99de4945b528a188a1c41c7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png new file mode 100644 index 00000000000..5819e303000 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b24b3bee23ef2dc047d5028b860a0c13a39e559d20211e6885bf0f6e77b0cb6 +size 594 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png.meta new file mode 100644 index 00000000000..29beedda89f --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Fluorescent@2x.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 9ed59abbb45e72140ae72a33b30ea19e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png new file mode 100644 index 00000000000..8842a8c31a0 --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2345dace289e525d64d369c9f9e2066c4eaf899f557ad3d1daa2645f4a76a6f6 +size 323 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png.meta new file mode 100644 index 00000000000..1c62366e94f --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: fbe2a78a665b37a4c9ec6623f42feb59 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png new file mode 100644 index 00000000000..a80a0b6ee8a --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e32a957e1bd02b96055b64b7fe4e113f40ae07c374269de6e7c29ec06c34d4d +size 509 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png.meta b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png.meta new file mode 100644 index 00000000000..f0ca0e8547e --- /dev/null +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_Shade@2x.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 49e4a0929afd1ae4283e4657bc636f9e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: From cbad73450c67e1c4f06081aafd4f028158a63e75 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Mon, 5 Oct 2020 17:22:32 -0400 Subject: [PATCH 02/16] Initial implementation of the preset click menu --- .../Editor/Lighting/HDLightUI.cs | 1 + .../Lighting/LightUnit/LightUnitSlider.cs | 66 +++++++++++++++++++ .../Editor/PostProcessing/ExposureEditor.cs | 1 + 3 files changed, 68 insertions(+) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.cs index 84ecc9dba35..8c1b0360d08 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/HDLightUI.cs @@ -617,6 +617,7 @@ static void DrawLightIntensityGUILayout(SerializedHDLight serialized, Editor own var lightType = serialized.type; var lightUnit = serialized.lightUnit.GetEnumValue(); + 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 diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index af0e7646113..f782262bb12 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -12,6 +12,8 @@ namespace UnityEditor.Rendering.HighDefinition /// class LightUnitSlider { + private SerializedObject m_SerializedObject; + static class SliderConfig { public const float k_IconSeparator = 6; @@ -28,6 +30,11 @@ public LightUnitSlider(LightUnitSliderUIDescriptor descriptor) m_Descriptor = descriptor; } + public void SetSerializedObject(SerializedObject serialized) + { + m_SerializedObject = serialized; + } + public virtual void Draw(Rect rect, SerializedProperty value) { BuildRects(rect, out var sliderRect, out var iconRect); @@ -58,6 +65,20 @@ public virtual void Draw(Rect rect, SerializedProperty value) var thumbPosition = GetPositionOnSlider(thumbValue, level.value); var thumbTooltip = levelIconContent.tooltip; DoThumbTooltip(sliderRect, thumbPosition, thumbValue, thumbTooltip); + + // Draw context menu + // TODO: add to descriptor option for context menu + // Note: EventType.Used for UI interaction, EventType.MouseDown + var e = Event.current; + if (e.type == EventType.MouseDown && e.button == 1) + { + if (iconRect.Contains(e.mousePosition)) + { + var menuPosition = iconRect.position + iconRect.size; + DoContextMenu(menuPosition, value); + e.Use(); + } + } } LightUnitSliderUIRange CurrentRange(float value) @@ -157,6 +178,31 @@ void DoThumbTooltip(Rect rect, float position, float value, string tooltip) EditorGUI.LabelField(thumbMarkerRect, GetLightUnitTooltip(tooltip, value, m_Descriptor.unitName)); } + void DoContextMenu(Vector2 pos, SerializedProperty value) + { + var menu = new GenericMenu(); + + foreach (var preset in m_Descriptor.valueRanges) + { + // Indicate a checkmark if the value is within this preset range. + var isInPreset = CurrentRange(value.floatValue).value == preset.value; + + menu.AddItem(EditorGUIUtility.TrTextContent(preset.content.tooltip), isInPreset, () => SetValueToPreset(value, preset)); + } + + menu.DropDown(new Rect(pos, Vector2.zero)); + } + + protected virtual void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) + { + m_SerializedObject?.Update(); + + // Set the value to the average of the preset range. + value.floatValue = 0.5f * (preset.value.x + preset.value.y); + + m_SerializedObject?.ApplyModifiedProperties(); + } + protected virtual GUIContent GetLightUnitTooltip(string baseTooltip, float value, string unit) { var formatValue = value < 100 ? $"{value:n}" : $"{value:n0}"; @@ -502,6 +548,16 @@ public void Setup(LightEditor.Settings settings) m_Settings = settings; } + // The serialized property for color temperature is stored in the build-in light editor, and we need to use this object to apply the update. + protected override void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) + { + m_Settings.Update(); + + base.SetValueToPreset(value, preset); + + m_Settings.ApplyModifiedProperties(); + } + protected override void DoSlider(Rect rect, SerializedProperty value, Vector2 sliderRange) { SliderWithTextureNoTextField(rect, value, sliderRange, m_Settings); @@ -540,6 +596,16 @@ static LightUnitSliderUIDrawer() k_TemperatureSlider = new TemperatureSlider(LightUnitSliderDescriptors.TemperatureDescriptor); } + // Need to cache the serialized object on the slider, to add support for the preset selection context menu (need to apply changes to serialized) + // TODO: This slider drawer is getting kind of bloated. Break up the implementation into where it is actually used? + public void SetSerializedObject(SerializedObject serializedObject) + { + k_DirectionalLightUnitSlider.SetSerializedObject(serializedObject); + k_PunctualLightUnitSlider.SetSerializedObject(serializedObject); + k_ExposureSlider.SetSerializedObject(serializedObject); + k_TemperatureSlider.SetSerializedObject(serializedObject); + } + public void Draw(HDLightType type, LightUnit lightUnit, SerializedProperty value, Rect rect, SerializedHDLight light, Editor owner) { using (new EditorGUI.IndentLevelScope(-EditorGUI.indentLevel)) diff --git a/com.unity.render-pipelines.high-definition/Editor/PostProcessing/ExposureEditor.cs b/com.unity.render-pipelines.high-definition/Editor/PostProcessing/ExposureEditor.cs index 39633e88811..b5b30844d5e 100644 --- a/com.unity.render-pipelines.high-definition/Editor/PostProcessing/ExposureEditor.cs +++ b/com.unity.render-pipelines.high-definition/Editor/PostProcessing/ExposureEditor.cs @@ -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 From f0cde271a27f6a0209d825eca856ea3cd963025d Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Mon, 5 Oct 2020 18:10:07 -0400 Subject: [PATCH 03/16] Add preset click menu UI functionality --- .../Lighting/LightUnit/LightUnitSlider.cs | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index f782262bb12..caaca77666c 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -16,7 +16,7 @@ class LightUnitSlider static class SliderConfig { - public const float k_IconSeparator = 6; + public const float k_IconSeparator = 8; public const float k_MarkerWidth = 2; public const float k_MarkerHeight = 2; public const float k_MarkerTooltipScale = 4; @@ -37,7 +37,7 @@ public void SetSerializedObject(SerializedObject serialized) public virtual void Draw(Rect rect, SerializedProperty value) { - BuildRects(rect, out var sliderRect, out var iconRect); + BuildRects(rect, out var sliderRect, out var iconRect, out var optionsRect); if (m_Descriptor.clampValue) ClampValue(value, m_Descriptor.sliderRange); @@ -57,28 +57,29 @@ public virtual void Draw(Rect rect, SerializedProperty value) } } - var levelIconContent = level.content; - var levelRange = level.value; - DoIcon(iconRect, levelIconContent, levelRange.y); - - var thumbValue = value.floatValue; - var thumbPosition = GetPositionOnSlider(thumbValue, level.value); - var thumbTooltip = levelIconContent.tooltip; - DoThumbTooltip(sliderRect, thumbPosition, thumbValue, thumbTooltip); - // Draw context menu // TODO: add to descriptor option for context menu // Note: EventType.Used for UI interaction, EventType.MouseDown + GUI.Box(optionsRect, GUIContent.none, EditorStyles.popup); var e = Event.current; - if (e.type == EventType.MouseDown && e.button == 1) + if (e.type == EventType.MouseDown) { - if (iconRect.Contains(e.mousePosition)) + if (optionsRect.Contains(e.mousePosition)) { - var menuPosition = iconRect.position + iconRect.size; + var menuPosition = optionsRect.position + optionsRect.size; DoContextMenu(menuPosition, value); e.Use(); } } + + var levelIconContent = level.content; + var levelRange = level.value; + DoIcon(iconRect, levelIconContent, levelRange.y); + + var thumbValue = value.floatValue; + var thumbPosition = GetPositionOnSlider(thumbValue, level.value); + var thumbTooltip = levelIconContent.tooltip; + DoThumbTooltip(sliderRect, thumbPosition, thumbValue, thumbTooltip); } LightUnitSliderUIRange CurrentRange(float value) @@ -96,14 +97,20 @@ LightUnitSliderUIRange CurrentRange(float value) return LightUnitSliderUIRange.CautionRange(cautionTooltip, cautionValue); } - void BuildRects(Rect baseRect, out Rect sliderRect, out Rect iconRect) + void BuildRects(Rect baseRect, out Rect sliderRect, out Rect iconRect, out Rect optionsRect) { + const float fudge = 10f; + sliderRect = baseRect; - sliderRect.width -= EditorGUIUtility.singleLineHeight + SliderConfig.k_IconSeparator; + sliderRect.width -= ( 2f * EditorGUIUtility.singleLineHeight ) + SliderConfig.k_IconSeparator; iconRect = baseRect; - iconRect.x += sliderRect.width + SliderConfig.k_IconSeparator; + iconRect.x += sliderRect.width + SliderConfig.k_IconSeparator - 4f; iconRect.width = EditorGUIUtility.singleLineHeight; + + optionsRect = iconRect; + optionsRect.x += EditorGUIUtility.singleLineHeight + 2; + optionsRect.width += 2; } void ClampValue(SerializedProperty value, Vector2 range) => From f56cf533abfe5582294ab40fb41b195f24e42272 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Tue, 6 Oct 2020 11:23:21 -0400 Subject: [PATCH 04/16] remove the drop-down icon, context menu shares same rect as icon --- .../Lighting/LightUnit/LightUnitSlider.cs | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index caaca77666c..a599d1d8397 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -16,7 +16,7 @@ class LightUnitSlider static class SliderConfig { - public const float k_IconSeparator = 8; + public const float k_IconSeparator = 6; public const float k_MarkerWidth = 2; public const float k_MarkerHeight = 2; public const float k_MarkerTooltipScale = 4; @@ -37,7 +37,7 @@ public void SetSerializedObject(SerializedObject serialized) public virtual void Draw(Rect rect, SerializedProperty value) { - BuildRects(rect, out var sliderRect, out var iconRect, out var optionsRect); + BuildRects(rect, out var sliderRect, out var iconRect); if (m_Descriptor.clampValue) ClampValue(value, m_Descriptor.sliderRange); @@ -60,13 +60,13 @@ public virtual void Draw(Rect rect, SerializedProperty value) // Draw context menu // TODO: add to descriptor option for context menu // Note: EventType.Used for UI interaction, EventType.MouseDown - GUI.Box(optionsRect, GUIContent.none, EditorStyles.popup); + GUI.Box(iconRect, GUIContent.none); var e = Event.current; if (e.type == EventType.MouseDown) { - if (optionsRect.Contains(e.mousePosition)) + if (iconRect.Contains(e.mousePosition)) { - var menuPosition = optionsRect.position + optionsRect.size; + var menuPosition = iconRect.position + iconRect.size; DoContextMenu(menuPosition, value); e.Use(); } @@ -97,20 +97,14 @@ LightUnitSliderUIRange CurrentRange(float value) return LightUnitSliderUIRange.CautionRange(cautionTooltip, cautionValue); } - void BuildRects(Rect baseRect, out Rect sliderRect, out Rect iconRect, out Rect optionsRect) + void BuildRects(Rect baseRect, out Rect sliderRect, out Rect iconRect) { - const float fudge = 10f; - sliderRect = baseRect; - sliderRect.width -= ( 2f * EditorGUIUtility.singleLineHeight ) + SliderConfig.k_IconSeparator; + sliderRect.width -= EditorGUIUtility.singleLineHeight + SliderConfig.k_IconSeparator; iconRect = baseRect; - iconRect.x += sliderRect.width + SliderConfig.k_IconSeparator - 4f; + iconRect.x += sliderRect.width + SliderConfig.k_IconSeparator; iconRect.width = EditorGUIUtility.singleLineHeight; - - optionsRect = iconRect; - optionsRect.x += EditorGUIUtility.singleLineHeight + 2; - optionsRect.width += 2; } void ClampValue(SerializedProperty value, Vector2 range) => From a9a6ea95eb55aa37ef29ddceeadcb0da601efe58 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Tue, 6 Oct 2020 12:03:45 -0400 Subject: [PATCH 05/16] Use icon button style for context menu, create SliderStyle helpers --- .../Lighting/LightUnit/LightUnitSlider.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index a599d1d8397..c9bb1030d6b 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -23,6 +23,13 @@ static class SliderConfig public const float k_ThumbTooltipSize = 10; } + protected static class SliderStyles + { + public static GUIStyle k_IconButton = new GUIStyle("IconButton"); + public static GUIStyle k_TemperatureBorder = new GUIStyle("ColorPickerSliderBackground"); + public static GUIStyle k_TemperatureThumb = new GUIStyle("ColorPickerHorizThumb"); + } + protected readonly LightUnitSliderUIDescriptor m_Descriptor; public LightUnitSlider(LightUnitSliderUIDescriptor descriptor) @@ -59,10 +66,9 @@ public virtual void Draw(Rect rect, SerializedProperty value) // Draw context menu // TODO: add to descriptor option for context menu - // Note: EventType.Used for UI interaction, EventType.MouseDown - GUI.Box(iconRect, GUIContent.none); + GUI.Box(iconRect, GUIContent.none, SliderStyles.k_IconButton); var e = Event.current; - if (e.type == EventType.MouseDown) + if (e.type == EventType.MouseDown && e.button == 0) { if (iconRect.Contains(e.mousePosition)) { @@ -568,10 +574,7 @@ protected override void DoSlider(Rect rect, SerializedProperty value, Vector2 sl void SliderWithTextureNoTextField(Rect rect, SerializedProperty value, Vector2 range, LightEditor.Settings settings) { GUI.DrawTexture(rect, GetKelvinGradientTexture(settings)); - - var sliderBorder = new GUIStyle("ColorPickerSliderBackground"); - var sliderThumb = new GUIStyle("ColorPickerHorizThumb"); - value.floatValue = GUI.HorizontalSlider(rect, value.floatValue, range.x, range.y, sliderBorder, sliderThumb); + value.floatValue = GUI.HorizontalSlider(rect, value.floatValue, range.x, range.y, SliderStyles.k_TemperatureBorder, SliderStyles.k_TemperatureThumb); } } From 6b2faa927f80f3b97fc067a85c0be6fad59a6407 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Tue, 6 Oct 2020 13:35:37 -0400 Subject: [PATCH 06/16] Remove icon separation --- .../Lighting/LightUnit/LightUnitSlider.cs | 67 ++++++++++--------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index c9bb1030d6b..b0743f43cc6 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -16,7 +16,7 @@ class LightUnitSlider static class SliderConfig { - public const float k_IconSeparator = 6; + public const float k_IconSeparator = 0; public const float k_MarkerWidth = 2; public const float k_MarkerHeight = 2; public const float k_MarkerTooltipScale = 4; @@ -64,23 +64,9 @@ public virtual void Draw(Rect rect, SerializedProperty value) } } - // Draw context menu - // TODO: add to descriptor option for context menu - GUI.Box(iconRect, GUIContent.none, SliderStyles.k_IconButton); - var e = Event.current; - if (e.type == EventType.MouseDown && e.button == 0) - { - if (iconRect.Contains(e.mousePosition)) - { - var menuPosition = iconRect.position + iconRect.size; - DoContextMenu(menuPosition, value); - e.Use(); - } - } - var levelIconContent = level.content; var levelRange = level.value; - DoIcon(iconRect, levelIconContent, levelRange.y); + DoIcon(iconRect, levelIconContent, value, levelRange.y); var thumbValue = value.floatValue; var thumbPosition = GetPositionOnSlider(thumbValue, level.value); @@ -157,14 +143,46 @@ void DoSliderMarker(Rect rect, float position, float value, string tooltip) EditorGUI.LabelField(markerTooltipRect, GetLightUnitTooltip(tooltip, value, m_Descriptor.unitName)); } - void DoIcon(Rect rect, GUIContent icon, float range) + void DoIcon(Rect rect, GUIContent icon, SerializedProperty value, float range) { + // Draw the context menu feedback before the icon + var menuRect = rect; + menuRect.width += 5; + GUI.Box(menuRect, GUIContent.none, SliderStyles.k_IconButton); + var oldColor = GUI.color; GUI.color = Color.clear; EditorGUI.DrawTextureTransparent(rect, icon.image); GUI.color = oldColor; EditorGUI.LabelField(rect, GetLightUnitTooltip(icon.tooltip, range, m_Descriptor.unitName)); + + // Handle events for context menu + var e = Event.current; + if (e.type == EventType.MouseDown && e.button == 0) + { + if (rect.Contains(e.mousePosition)) + { + var menuPosition = rect.position + rect.size; + DoContextMenu(menuPosition, value); + e.Use(); + } + } + } + + void DoContextMenu(Vector2 pos, SerializedProperty value) + { + var menu = new GenericMenu(); + + foreach (var preset in m_Descriptor.valueRanges) + { + // Indicate a checkmark if the value is within this preset range. + var isInPreset = CurrentRange(value.floatValue).value == preset.value; + + menu.AddItem(EditorGUIUtility.TrTextContent(preset.content.tooltip), isInPreset, () => SetValueToPreset(value, preset)); + } + + menu.DropDown(new Rect(pos, Vector2.zero)); } void DoThumbTooltip(Rect rect, float position, float value, string tooltip) @@ -185,21 +203,6 @@ void DoThumbTooltip(Rect rect, float position, float value, string tooltip) EditorGUI.LabelField(thumbMarkerRect, GetLightUnitTooltip(tooltip, value, m_Descriptor.unitName)); } - void DoContextMenu(Vector2 pos, SerializedProperty value) - { - var menu = new GenericMenu(); - - foreach (var preset in m_Descriptor.valueRanges) - { - // Indicate a checkmark if the value is within this preset range. - var isInPreset = CurrentRange(value.floatValue).value == preset.value; - - menu.AddItem(EditorGUIUtility.TrTextContent(preset.content.tooltip), isInPreset, () => SetValueToPreset(value, preset)); - } - - menu.DropDown(new Rect(pos, Vector2.zero)); - } - protected virtual void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) { m_SerializedObject?.Update(); From 616b8d4aee4f35ea503748d32a0721d1cfcc129b Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 11:41:34 -0400 Subject: [PATCH 07/16] Ignore the spot reflector case (cone angle must not impact radiance values) --- .../Lighting/LightUnit/LightUnitSlider.cs | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index b0743f43cc6..2ccfe8f69ac 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -453,12 +453,17 @@ public void Setup(LightUnit unit, SerializedHDLight light, Editor owner) public override void Draw(Rect rect, SerializedProperty value) { + var enableSpotReflector = m_Light.enableSpotReflector.boolValue; + m_Light.enableSpotReflector.boolValue = false; + // Convert the incoming unit value into Lumen as the punctual slider is always in these terms (internally) value.floatValue = UnitToLumen(value.floatValue); base.Draw(rect, value); value.floatValue = LumenToUnit(value.floatValue); + + m_Light.enableSpotReflector.boolValue = enableSpotReflector; } protected override GUIContent GetLightUnitTooltip(string baseTooltip, float value, string unit) @@ -483,15 +488,15 @@ float LumenToUnit(float value) if (m_Unit == LightUnit.Lumen) return value; - if (m_Light.type == HDLightType.Spot && - m_Unit != LightUnit.Lumen && - m_Light.enableSpotReflector.boolValue) - { - // Note: When reflector is flagged, the util conversion for Lumen -> Candela will actually force re-use - // the serialized intensity, which is not what we want in this case. Because of this, we re-use the formulation - // in HDAdditionalLightData to correctly compute the intensity for spot reflector. - return ConvertLightIntensitySpotAngleLumenToUnit(value); - } + // if (m_Light.type == HDLightType.Spot && + // m_Unit != LightUnit.Lumen && + // m_Light.enableSpotReflector.boolValue) + // { + // // Note: When reflector is flagged, the util conversion for Lumen -> Candela will actually force re-use + // // the serialized intensity, which is not what we want in this case. Because of this, we re-use the formulation + // // in HDAdditionalLightData to correctly compute the intensity for spot reflector. + // return ConvertLightIntensitySpotAngleLumenToUnit(value); + // } return HDLightUI.ConvertLightIntensity(LightUnit.Lumen, m_Unit, m_Light, m_Editor, value); } From ef25c6d679fb4123d08905afa691992472d0f66b Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 12:15:25 -0400 Subject: [PATCH 08/16] Fix issue with preset menu for punctual lights in non-lumen case --- .../Editor/Lighting/LightUnit/LightUnitSlider.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index 2ccfe8f69ac..5b6696b0532 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -12,7 +12,7 @@ namespace UnityEditor.Rendering.HighDefinition /// class LightUnitSlider { - private SerializedObject m_SerializedObject; + protected SerializedObject m_SerializedObject; static class SliderConfig { @@ -501,6 +501,19 @@ float LumenToUnit(float value) return HDLightUI.ConvertLightIntensity(LightUnit.Lumen, m_Unit, m_Light, m_Editor, value); } + protected override void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) + { + m_SerializedObject?.Update(); + + // Set the value to the average of the preset range. + var newValue = 0.5f * (preset.value.x + preset.value.y); + + // Convert to the actual unit. + value.floatValue = LumenToUnit(newValue); + + m_SerializedObject?.ApplyModifiedProperties(); + } + // This code is re-used from HDAdditionalLightData float ConvertLightIntensitySpotAngleLumenToUnit(float value) { From eb4b8bafaeda758925c60fd8ce3ad945082f7168 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 13:49:57 -0400 Subject: [PATCH 09/16] Further correction of light unit conversion for context menu --- .../Lighting/LightUnit/LightUnitSlider.cs | 59 +++++-------------- 1 file changed, 16 insertions(+), 43 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index 5b6696b0532..647775d98c4 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -433,6 +433,7 @@ public PunctualLightUnitSlider(LightUnitSliderUIDescriptor descriptor) : base(de private SerializedHDLight m_Light; private Editor m_Editor; private LightUnit m_Unit; + private bool m_SpotReflectorEnabled; // Note: these should be in sync with LightUnit private static string[] k_UnitNames = @@ -449,21 +450,19 @@ public void Setup(LightUnit unit, SerializedHDLight light, Editor owner) m_Unit = unit; m_Light = light; m_Editor = owner; + + // Cache the spot reflector state as we will need to revert back to it after treating the slider as point light. + m_SpotReflectorEnabled = light.enableSpotReflector.boolValue; } public override void Draw(Rect rect, SerializedProperty value) { - var enableSpotReflector = m_Light.enableSpotReflector.boolValue; - m_Light.enableSpotReflector.boolValue = false; - // Convert the incoming unit value into Lumen as the punctual slider is always in these terms (internally) value.floatValue = UnitToLumen(value.floatValue); base.Draw(rect, value); value.floatValue = LumenToUnit(value.floatValue); - - m_Light.enableSpotReflector.boolValue = enableSpotReflector; } protected override GUIContent GetLightUnitTooltip(string baseTooltip, float value, string unit) @@ -480,6 +479,10 @@ float UnitToLumen(float value) if (m_Unit == LightUnit.Lumen) return value; + // Punctual slider currently does not have any regard for spot shape/reflector. + // Conversions need to happen as if light is a point, and this is the only setting that influences that. + m_Light.enableSpotReflector.boolValue = false; + return HDLightUI.ConvertLightIntensity(m_Unit, LightUnit.Lumen, m_Light, m_Editor, value); } @@ -488,17 +491,15 @@ float LumenToUnit(float value) if (m_Unit == LightUnit.Lumen) return value; - // if (m_Light.type == HDLightType.Spot && - // m_Unit != LightUnit.Lumen && - // m_Light.enableSpotReflector.boolValue) - // { - // // Note: When reflector is flagged, the util conversion for Lumen -> Candela will actually force re-use - // // the serialized intensity, which is not what we want in this case. Because of this, we re-use the formulation - // // in HDAdditionalLightData to correctly compute the intensity for spot reflector. - // return ConvertLightIntensitySpotAngleLumenToUnit(value); - // } + // Once again temporarily disable reflector in case we called this for tooltip or context menu preset. + m_Light.enableSpotReflector.boolValue = false; + + value = HDLightUI.ConvertLightIntensity(LightUnit.Lumen, m_Unit, m_Light, m_Editor, value); + + // Restore the state of spot reflector on the light. + m_Light.enableSpotReflector.boolValue = m_SpotReflectorEnabled; - return HDLightUI.ConvertLightIntensity(LightUnit.Lumen, m_Unit, m_Light, m_Editor, value); + return value; } protected override void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) @@ -513,34 +514,6 @@ protected override void SetValueToPreset(SerializedProperty value, LightUnitSlid m_SerializedObject?.ApplyModifiedProperties(); } - - // This code is re-used from HDAdditionalLightData - float ConvertLightIntensitySpotAngleLumenToUnit(float value) - { - var spotLightShape = m_Light.spotLightShape.GetEnumValue(); - var spotAngle = m_Light.settings.spotAngle.floatValue; - var aspectRatio = m_Light.aspectRatio.floatValue; - - // If reflector is enabled all the lighting from the sphere is focus inside the solid angle of current shape - if (spotLightShape == SpotLightShape.Cone) - { - value = LightUtils.ConvertSpotLightLumenToCandela(value, spotAngle * Mathf.Deg2Rad, true); - } - else if (spotLightShape == SpotLightShape.Pyramid) - { - float angleA, angleB; - LightUtils.CalculateAnglesForPyramid(aspectRatio, spotAngle * Mathf.Deg2Rad, out angleA, out angleB); - - value = LightUtils.ConvertFrustrumLightLumenToCandela(value, angleA, angleB); - } - else // Box shape, fallback to punctual light. - { - value = LightUtils.ConvertPointLightLumenToCandela(value); - } - - // Units so far are in Candela now, last step is to get it in terms of the actual unit. - return HDLightUI.ConvertLightIntensity(LightUnit.Candela, m_Unit, m_Light, m_Editor, value); - } } /// From de477bb556f251637b8a700610ea189b3e0b5b52 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 17:15:10 -0400 Subject: [PATCH 10/16] Fix undo/redo; apply settings after drawing punctual slider --- .../Editor/Lighting/LightUnit/LightUnitSlider.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index 647775d98c4..b12e85a92a3 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -463,6 +463,10 @@ public override void Draw(Rect rect, SerializedProperty value) base.Draw(rect, value); value.floatValue = LumenToUnit(value.floatValue); + + // Must apply properties here to ensure proper undo/redo functionality. + // The reason this is likely necessary is due to how we handle the internal unit conversion into lumen. + m_Light.Apply(); } protected override GUIContent GetLightUnitTooltip(string baseTooltip, float value, string unit) @@ -504,7 +508,7 @@ float LumenToUnit(float value) protected override void SetValueToPreset(SerializedProperty value, LightUnitSliderUIRange preset) { - m_SerializedObject?.Update(); + m_Light?.Update(); // Set the value to the average of the preset range. var newValue = 0.5f * (preset.value.x + preset.value.y); @@ -512,7 +516,7 @@ protected override void SetValueToPreset(SerializedProperty value, LightUnitSlid // Convert to the actual unit. value.floatValue = LumenToUnit(newValue); - m_SerializedObject?.ApplyModifiedProperties(); + m_Light?.Apply(); } } From d21d960550a79201fa630cbe69bcb5015be6e322 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 17:23:07 -0400 Subject: [PATCH 11/16] Add the updated blue sky icon (birds) --- .../Texture/LightUnitIcons/BlueSky.png | 4 ++-- .../Texture/LightUnitIcons/BlueSky@2x.png | 4 ++-- .../Texture/LightUnitIcons/d_BlueSky.png | 4 ++-- .../Texture/LightUnitIcons/d_BlueSky@2x.png | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky.png index 296f59aa80e..d8cc03ac4ff 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky.png +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b23187b16c5dc00985edd4ae027beab6a39cf7a505b260127c320a25d41effa -size 433 +oid sha256:d34d1dca8b1a7c66d4909ac4065e2628c0b77a3f68b359f9b145959bac1cfaa1 +size 379 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky@2x.png index 1c446ce5aaa..93d49ffaabc 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky@2x.png +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/BlueSky@2x.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:495adc8cee66c377ffb0e564f888eb26c9490248da38d4d570f52d35a932bdbe -size 907 +oid sha256:6a14f7b54e52a77a862038f8072afb2c2cbe3cbc319c9d63f65a2e02c349ab2c +size 670 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky.png index e55815654aa..bd5fad816fd 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky.png +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8368e9f9e13756bdadedf74da8fea1314bad0d1804c89d07d75c191a5d3042e2 -size 430 +oid sha256:78249728c22e661318f6a0167031f089b3aadf93eb9c253e5ebecc3eb46695e5 +size 382 diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky@2x.png b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky@2x.png index 9f0c98893fd..769fedf7e5b 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky@2x.png +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipelineResources/Texture/LightUnitIcons/d_BlueSky@2x.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf7b141c6675c592856e5c515fa8b1fe545884d5450f9f899d1c076cbad87420 -size 851 +oid sha256:d8e8a846bc8a402dd35a574261a8769e3c53c2944f7f877735b4a899308de359 +size 617 From d8a9e369ece90826e4c926c240b86382525ad0f2 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 18:00:44 -0400 Subject: [PATCH 12/16] Begin transition to using preset value instead of deriving range average for preset --- .../Editor/Lighting/LightUnit/LightUnitSlider.cs | 7 ++----- .../Lighting/LightUnit/LightUnitSliderSettings.cs | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index b12e85a92a3..a5b068f50bb 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -208,7 +208,7 @@ protected virtual void SetValueToPreset(SerializedProperty value, LightUnitSlide m_SerializedObject?.Update(); // Set the value to the average of the preset range. - value.floatValue = 0.5f * (preset.value.x + preset.value.y); + value.floatValue = preset.presetValue; m_SerializedObject?.ApplyModifiedProperties(); } @@ -510,11 +510,8 @@ protected override void SetValueToPreset(SerializedProperty value, LightUnitSlid { m_Light?.Update(); - // Set the value to the average of the preset range. - var newValue = 0.5f * (preset.value.x + preset.value.y); - // Convert to the actual unit. - value.floatValue = LumenToUnit(newValue); + value.floatValue = LumenToUnit(preset.presetValue); m_Light?.Apply(); } diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs index 5e0ae4c9068..c56434a55d4 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs @@ -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 From 350b79fddc556df18d006abc8593cf0646a2b7e8 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 18:12:21 -0400 Subject: [PATCH 13/16] Enter the artist-provided preset values into the settings table --- .../LightUnit/LightUnitSliderSettings.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs index c56434a55d4..bb987eae4fe 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSliderSettings.cs @@ -112,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 = @@ -138,13 +138,13 @@ private static class LightUnitValueRanges public static readonly LightUnitSliderUIRange[] KelvinValueTableNew = { - new LightUnitSliderUIRange(LightUnitIcon.BlueSky, LightUnitTooltips.k_TemperatureBlueSky, new Vector2(10000, 20000)), - new LightUnitSliderUIRange(LightUnitIcon.Shade, LightUnitTooltips.k_TemperatureShade, new Vector2(7000, 10000)), - new LightUnitSliderUIRange(LightUnitIcon.CloudySky, LightUnitTooltips.k_TemperatureCloudySky, new Vector2(6000, 7000)), - new LightUnitSliderUIRange(LightUnitIcon.DirectSunlight, LightUnitTooltips.k_TemperatureDirectSunlight, new Vector2(4500, 6000)), - new LightUnitSliderUIRange(LightUnitIcon.Fluorescent, LightUnitTooltips.k_TemperatureFluorescent, new Vector2(3500, 4500)), - new LightUnitSliderUIRange(LightUnitIcon.IntenseAreaLight, LightUnitTooltips.k_TemperatureIncandescent, 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), }; } From 57b5d03de3ed5ae1e061e994c68577decb6d85a7 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 20:23:20 -0400 Subject: [PATCH 14/16] Fix the temperature slider to fit 6500K to the white point on temperature gradient texture --- .../Lighting/LightUnit/LightUnitSlider.cs | 103 +++++++++--------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index a5b068f50bb..d2e538422ae 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -251,55 +251,6 @@ protected virtual float GetPositionOnSlider(float value) } } - /// - /// Formats the provided descriptor into an exponential slider with contextual slider markers, tooltips, and icons. - /// - class ExponentialLightUnitSlider : LightUnitSlider - { - private Vector3 m_ExponentialConstraints; - - /// - /// Exponential slider modeled to set a f(0.5) value. - /// ref: https://stackoverflow.com/a/17102320 - /// - void PrepareExponentialConstraints(float lo, float mi, float hi) - { - float x = lo; - float y = mi; - float z = hi; - - // https://www.desmos.com/calculator/yx2yf4huia - m_ExponentialConstraints.x = ((x * z) - (y * y)) / (x - (2 * y) + z); - m_ExponentialConstraints.y = ((y - x) * (y - x)) / (x - (2 * y) + z); - m_ExponentialConstraints.z = 2 * Mathf.Log((z - y) / (y - x)); - } - - float ValueToSlider(float x) => Mathf.Log((x - m_ExponentialConstraints.x) / m_ExponentialConstraints.y) / m_ExponentialConstraints.z; - float SliderToValue(float x) => m_ExponentialConstraints.x + m_ExponentialConstraints.y * Mathf.Exp(m_ExponentialConstraints.z * x); - - public ExponentialLightUnitSlider(LightUnitSliderUIDescriptor descriptor) : base(descriptor) - { - var halfValue = 300; // TODO: Compute the median - PrepareExponentialConstraints(m_Descriptor.sliderRange.x, halfValue, m_Descriptor.sliderRange.y); - } - - protected override float GetPositionOnSlider(float value) - { - return ValueToSlider(value); - } - - protected override void DoSlider(Rect rect, SerializedProperty value, Vector2 sliderRange) - { - value.floatValue = ExponentialSlider(rect, value.floatValue); - } - - float ExponentialSlider(Rect rect, float value) - { - var internalValue = GUI.HorizontalSlider(rect, ValueToSlider(value), 0f, 1f); - return SliderToValue(internalValue); - } - } - /// /// Formats the provided descriptor into a piece-wise linear slider with contextual slider markers, tooltips, and icons. /// @@ -510,7 +461,7 @@ protected override void SetValueToPreset(SerializedProperty value, LightUnitSlid { m_Light?.Update(); - // Convert to the actual unit. + // Convert to the actual unit value. value.floatValue = LumenToUnit(preset.presetValue); m_Light?.Apply(); @@ -522,10 +473,43 @@ protected override void SetValueToPreset(SerializedProperty value, LightUnitSlid /// class TemperatureSlider : LightUnitSlider { + private Vector3 m_ExponentialConstraints; + private LightEditor.Settings m_Settings; private static Texture2D s_KelvinGradientTexture; + /// + /// Exponential slider modeled to set a f(0.5) value. + /// ref: https://stackoverflow.com/a/17102320 + /// + void PrepareExponentialConstraints(float lo, float mi, float hi) + { + // float x = lo; + // float y = mi; + // float z = hi; + // + // // https://www.desmos.com/calculator/yx2yf4huia + // m_ExponentialConstraints.x = ((x * z) - (y * y)) / (x - (2 * y) + z); + // m_ExponentialConstraints.y = ((y - x) * (y - x)) / (x - (2 * y) + z); + // m_ExponentialConstraints.z = 2 * Mathf.Log((z - y) / (y - x)); + + // Warning: These are the coefficients for a system of equation fit for a continuous, monotonic curve that fits a f(0.44) value. + // f(0.44) is required instead of f(0.5) due to the location of the white in the temperature gradient texture. + // The equation is solved to get the coefficient for the following constraint for low, mid, hi: + // f(0) = 1500 + // f(0.44) = 6500 + // f(1.0) = 20000 + // If for any reason the constraints are changed, then the function must be refit and the new coefficients found. + // Note that we can't re-use the original PowerSlider instead due to how it forces a text field, which we don't want in this case. + m_ExponentialConstraints.x = -3935.53965427f; + m_ExponentialConstraints.y = 5435.53965427f; + m_ExponentialConstraints.z = 1.48240556f; + } + + protected float ValueToSlider(float x) => Mathf.Log((x - m_ExponentialConstraints.x) / m_ExponentialConstraints.y) / m_ExponentialConstraints.z; + protected float SliderToValue(float x) => m_ExponentialConstraints.x + m_ExponentialConstraints.y * Mathf.Exp(m_ExponentialConstraints.z * x); + static Texture2D GetKelvinGradientTexture(LightEditor.Settings settings) { if (s_KelvinGradientTexture == null) @@ -543,7 +527,11 @@ static Texture2D GetKelvinGradientTexture(LightEditor.Settings settings) return s_KelvinGradientTexture; } - public TemperatureSlider(LightUnitSliderUIDescriptor descriptor) : base(descriptor) {} + public TemperatureSlider(LightUnitSliderUIDescriptor descriptor) : base(descriptor) + { + var halfValue = 6500; + PrepareExponentialConstraints(m_Descriptor.sliderRange.x, halfValue, m_Descriptor.sliderRange.y); + } public void Setup(LightEditor.Settings settings) { @@ -569,7 +557,18 @@ protected override void DoSlider(Rect rect, SerializedProperty value, Vector2 sl void SliderWithTextureNoTextField(Rect rect, SerializedProperty value, Vector2 range, LightEditor.Settings settings) { GUI.DrawTexture(rect, GetKelvinGradientTexture(settings)); - value.floatValue = GUI.HorizontalSlider(rect, value.floatValue, range.x, range.y, SliderStyles.k_TemperatureBorder, SliderStyles.k_TemperatureThumb); + + EditorGUI.BeginChangeCheck(); + + // Draw the exponential slider that fits 6500K to the white point on the gradient texture. + var internalValue = GUI.HorizontalSlider(rect, ValueToSlider(value.floatValue), 0f, 1f, SliderStyles.k_TemperatureBorder, SliderStyles.k_TemperatureThumb); + + // Map the value back into kelvin. + value.floatValue = SliderToValue(internalValue); + + // Round to nearest since so much precision is not necessary for kelvin while sliding. + if (EditorGUI.EndChangeCheck()) + value.floatValue = Mathf.Round(value.floatValue); } } From ee226a08625e3adc50738a723271c0a93926f4e0 Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 20:28:18 -0400 Subject: [PATCH 15/16] Ensure position on temperature slider uses the exponential function to place tooltips --- .../Editor/Lighting/LightUnit/LightUnitSlider.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index d2e538422ae..cf0a0ab4f89 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -510,6 +510,11 @@ void PrepareExponentialConstraints(float lo, float mi, float hi) protected float ValueToSlider(float x) => Mathf.Log((x - m_ExponentialConstraints.x) / m_ExponentialConstraints.y) / m_ExponentialConstraints.z; protected float SliderToValue(float x) => m_ExponentialConstraints.x + m_ExponentialConstraints.y * Mathf.Exp(m_ExponentialConstraints.z * x); + protected override float GetPositionOnSlider(float value, Vector2 valueRange) + { + return ValueToSlider(value); + } + static Texture2D GetKelvinGradientTexture(LightEditor.Settings settings) { if (s_KelvinGradientTexture == null) From c91a40a6f22f6fff78e4a9220060a904ac3d790b Mon Sep 17 00:00:00 2001 From: John Parsaie Date: Wed, 7 Oct 2020 22:59:55 -0400 Subject: [PATCH 16/16] Revert context menu rect to use the icon rect --- .../Editor/Lighting/LightUnit/LightUnitSlider.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs index cf0a0ab4f89..32aeb3c1e2f 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/LightUnit/LightUnitSlider.cs @@ -146,9 +146,7 @@ void DoSliderMarker(Rect rect, float position, float value, string tooltip) void DoIcon(Rect rect, GUIContent icon, SerializedProperty value, float range) { // Draw the context menu feedback before the icon - var menuRect = rect; - menuRect.width += 5; - GUI.Box(menuRect, GUIContent.none, SliderStyles.k_IconButton); + GUI.Box(rect, GUIContent.none, SliderStyles.k_IconButton); var oldColor = GUI.color; GUI.color = Color.clear;