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_);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs