[Bf-blender-cvs] [1d5d49775c7] universal-scene-description: USD import: fix light intensity scaling.

Michael Kowalski noreply at git.blender.org
Wed Jun 15 05:59:17 CEST 2022


Commit: 1d5d49775c7e9c5890bbbe62cb96efb3368bd3cb
Author: Michael Kowalski
Date:   Tue Jun 14 23:56:43 2022 -0400
Branches: universal-scene-description
https://developer.blender.org/rB1d5d49775c7e9c5890bbbe62cb96efb3368bd3cb

USD import: fix light intensity scaling.

Updated light intensity calculations on import
to preserve values on round trip Blender ->
USD -> Blender.

===================================================================

M	source/blender/io/usd/intern/usd_reader_light.cc
M	source/blender/io/usd/intern/usd_reader_stage.cc

===================================================================

diff --git a/source/blender/io/usd/intern/usd_reader_light.cc b/source/blender/io/usd/intern/usd_reader_light.cc
index 2fac35735b6..d4699d15bd3 100644
--- a/source/blender/io/usd/intern/usd_reader_light.cc
+++ b/source/blender/io/usd/intern/usd_reader_light.cc
@@ -279,6 +279,11 @@ void USDLightReader::read_object_data(Main *bmain, const double motionSampleTime
       break;
   }
 
+  const float meters_per_unit = static_cast<float>(
+      pxr::UsdGeomGetStageMetersPerUnit(prim_.GetStage()));
+
+  const float radius_scale = meters_per_unit * usd_world_scale_;
+
   float intensity;
   if (get_authored_value(light_api.GetIntensityAttr(), motionSampleTime, &intensity) ||
       prim_.GetAttribute(usdtokens::intensity).Get(&intensity, motionSampleTime)) {
@@ -286,18 +291,14 @@ void USDLightReader::read_object_data(Main *bmain, const double motionSampleTime
     float intensity_scale = this->import_params_.light_intensity_scale;
 
     if (import_params_.convert_light_from_nits) {
-      /* It's important that we perform the light unit conversion before applying any scaling to
-       * the light size, so we can use the USD's meters per unit value. */
-      const float meters_per_unit = static_cast<float>(
-          pxr::UsdGeomGetStageMetersPerUnit(prim_.GetStage()));
-      intensity_scale *= nits_to_energy_scale_factor(blight, meters_per_unit * usd_world_scale_);
+      intensity_scale *= nits_to_energy_scale_factor(blight, radius_scale);
     }
 
     blight->energy = intensity * intensity_scale;
   }
 
   if ((blight->type == LA_SPOT || blight->type == LA_LOCAL) && import_params_.scale_light_radius) {
-    blight->area_size *= settings_->scale;
+    blight->area_size *= radius_scale;
   }
 
   USDXformReader::read_object_data(bmain, motionSampleTime);
diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc
index 4ba86c822dc..6bd47704945 100644
--- a/source/blender/io/usd/intern/usd_reader_stage.cc
+++ b/source/blender/io/usd/intern/usd_reader_stage.cc
@@ -77,7 +77,7 @@ USDPrimReader *USDStageReader::create_reader_if_allowed(const pxr::UsdPrim &prim
 #else
   if (params_.import_lights && prim.IsA<pxr::UsdLuxLight>()) {
 #endif
-    return new USDLightReader(prim, params_, settings_);
+    return new USDLightReader(prim, params_, settings_, xf_cache);
   }
   if (params_.import_volumes && prim.IsA<pxr::UsdVolVolume>()) {
     return new USDVolumeReader(prim, params_, settings_);
@@ -116,7 +116,7 @@ USDPrimReader *USDStageReader::create_reader(const pxr::UsdPrim &prim,
 #else
   if (prim.IsA<pxr::UsdLuxLight>()) {
 #endif
-    return new USDLightReader(prim, params_, settings_);
+    return new USDLightReader(prim, params_, settings_, xf_cache);
   }
   if (prim.IsA<pxr::UsdVolVolume>()) {
     return new USDVolumeReader(prim, params_, settings_);



More information about the Bf-blender-cvs mailing list