Renderer: suppress camera headlight when stage contains authored lights
Mirrors usdview behaviour -- when the stage has at least one UsdLux light the default camera fill-light is disabled so the scene is lit purely by its authored lights. StageHasAuthoredLights() early-exits on the first HasAPI<UsdLuxLightAPI>() hit to keep the per-frame cost minimal. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -571,7 +571,13 @@ void UsdSceneRenderer::Render(int width, int height)
|
||||
// Camera headlight: point light (w=1) positioned at the camera world-origin,
|
||||
// transformed by the view-inverse so it tracks the camera each frame.
|
||||
// (stageView.py: l.position = cam_pos + (1,); l.transform = frustum.ComputeViewInverse())
|
||||
if (m_ambientLightOnly) {
|
||||
//
|
||||
// The headlight is the *default* fill used only while the stage has no
|
||||
// authored lights. Once the scene contains real UsdLux lights, suppress it
|
||||
// so the scene is lit purely by those lights (Hydra evaluates them via
|
||||
// enableSceneLights) -- mirrors usdview's "use scene lights when present".
|
||||
const bool stageHasLights = StageHasAuthoredLights();
|
||||
if (m_ambientLightOnly && !stageHasLights) {
|
||||
pxr::GfMatrix4d viewInverse = m_viewMatrix.GetInverse();
|
||||
pxr::GfVec3d camPos = viewInverse.ExtractTranslation();
|
||||
|
||||
@@ -1527,6 +1533,20 @@ void UsdSceneRenderer::BuildLightWireframeLines(const pxr::UsdPrim& lightPrim
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// StageHasAuthoredLights
|
||||
// ===========================================================================
|
||||
|
||||
bool UsdSceneRenderer::StageHasAuthoredLights() const
|
||||
{
|
||||
if (!m_stage) return false;
|
||||
for (const pxr::UsdPrim& prim : m_stage->Traverse()) {
|
||||
if (prim.HasAPI<pxr::UsdLuxLightAPI>())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// DrawLightWireframes (mirrors DrawCameraWireframes)
|
||||
// ===========================================================================
|
||||
|
||||
Reference in New Issue
Block a user