コード例 #1
0
        internal static void ConvertLightIntensity(LightUnit oldLightUnit, LightUnit newLightUnit, HDAdditionalLightData hdLight, Light light)
        {
            float       intensity     = hdLight.intensity;
            float       luxAtDistance = hdLight.luxAtDistance;
            HDLightType lightType     = hdLight.ComputeLightType(light);

            // For punctual lights
            if (lightType != HDLightType.Area)
            {
                // Lumen ->
                if (oldLightUnit == LightUnit.Lumen && newLightUnit == LightUnit.Candela)
                {
                    intensity = LightUtils.ConvertPunctualLightLumenToCandela(lightType, intensity, light.intensity, hdLight.enableSpotReflector);
                }
                else if (oldLightUnit == LightUnit.Lumen && newLightUnit == LightUnit.Lux)
                {
                    intensity = LightUtils.ConvertPunctualLightLumenToLux(lightType, intensity, light.intensity, hdLight.enableSpotReflector, hdLight.luxAtDistance);
                }
                else if (oldLightUnit == LightUnit.Lumen && newLightUnit == LightUnit.Ev100)
                {
                    intensity = LightUtils.ConvertPunctualLightLumenToEv(lightType, intensity, light.intensity, hdLight.enableSpotReflector);
                }
                // Candela ->
                else if (oldLightUnit == LightUnit.Candela && newLightUnit == LightUnit.Lumen)
                {
                    intensity = LightUtils.ConvertPunctualLightCandelaToLumen(lightType, hdLight.spotLightShape, intensity, hdLight.enableSpotReflector, light.spotAngle, hdLight.aspectRatio);
                }
                else if (oldLightUnit == LightUnit.Candela && newLightUnit == LightUnit.Lux)
                {
                    intensity = LightUtils.ConvertCandelaToLux(intensity, hdLight.luxAtDistance);
                }
                else if (oldLightUnit == LightUnit.Candela && newLightUnit == LightUnit.Ev100)
                {
                    intensity = LightUtils.ConvertCandelaToEv(intensity);
                }
                // Lux ->
                else if (oldLightUnit == LightUnit.Lux && newLightUnit == LightUnit.Lumen)
                {
                    intensity = LightUtils.ConvertPunctualLightLuxToLumen(lightType, hdLight.spotLightShape, intensity, hdLight.enableSpotReflector,
                                                                          light.spotAngle, hdLight.aspectRatio, hdLight.luxAtDistance);
                }
                else if (oldLightUnit == LightUnit.Lux && newLightUnit == LightUnit.Candela)
                {
                    intensity = LightUtils.ConvertLuxToCandela(intensity, hdLight.luxAtDistance);
                }
                else if (oldLightUnit == LightUnit.Lux && newLightUnit == LightUnit.Ev100)
                {
                    intensity = LightUtils.ConvertLuxToEv(intensity, hdLight.luxAtDistance);
                }
                // EV100 ->
                else if (oldLightUnit == LightUnit.Ev100 && newLightUnit == LightUnit.Lumen)
                {
                    intensity = LightUtils.ConvertPunctualLightEvToLumen(lightType, hdLight.spotLightShape, intensity, hdLight.enableSpotReflector,
                                                                         light.spotAngle, hdLight.aspectRatio);
                }
                else if (oldLightUnit == LightUnit.Ev100 && newLightUnit == LightUnit.Candela)
                {
                    intensity = LightUtils.ConvertEvToCandela(intensity);
                }
                else if (oldLightUnit == LightUnit.Ev100 && newLightUnit == LightUnit.Lux)
                {
                    intensity = LightUtils.ConvertEvToLux(intensity, hdLight.luxAtDistance);
                }
            }
            else  // For area lights
            {
                if (oldLightUnit == LightUnit.Lumen && newLightUnit == LightUnit.Nits)
                {
                    intensity = LightUtils.ConvertAreaLightLumenToLuminance(hdLight.areaLightShape, intensity, hdLight.shapeWidth, hdLight.shapeHeight);
                }
                if (oldLightUnit == LightUnit.Nits && newLightUnit == LightUnit.Lumen)
                {
                    intensity = LightUtils.ConvertAreaLightLuminanceToLumen(hdLight.areaLightShape, intensity, hdLight.shapeWidth, hdLight.shapeHeight);
                }
                if (oldLightUnit == LightUnit.Nits && newLightUnit == LightUnit.Ev100)
                {
                    intensity = LightUtils.ConvertLuminanceToEv(intensity);
                }
                if (oldLightUnit == LightUnit.Ev100 && newLightUnit == LightUnit.Nits)
                {
                    intensity = LightUtils.ConvertEvToLuminance(intensity);
                }
                if (oldLightUnit == LightUnit.Ev100 && newLightUnit == LightUnit.Lumen)
                {
                    intensity = LightUtils.ConvertAreaLightEvToLumen(hdLight.areaLightShape, intensity, hdLight.shapeWidth, hdLight.shapeHeight);
                }
                if (oldLightUnit == LightUnit.Lumen && newLightUnit == LightUnit.Ev100)
                {
                    intensity = LightUtils.ConvertAreaLightLumenToEv(hdLight.areaLightShape, intensity, hdLight.shapeWidth, hdLight.shapeHeight);
                }
            }

            hdLight.intensity = intensity;
        }