Add per-viewport AOV selection (stageView.py GetRendererAovs port)

Exposes the render delegate's available AOVs in the gear popup under a new
"AOV" sub-menu. Selecting an AOV calls SetRendererAov on the engine and
persists the choice per-viewport in viewport_settings.ini. Switching the
render delegate resets the AOV to "color", matching stageView.py's
_handleRendererChanged. Menu is greyed-out when the delegate reports no AOVs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 03:03:00 +08:00
parent 6adf022c13
commit 862f3c9745
5 changed files with 47 additions and 4 deletions
+17
View File
@@ -94,6 +94,7 @@ ViewportTileSettings ViewportTile::GetSettings() const
s.renderDelegate = m_renderer.GetCurrentRendererId().GetString();
s.showGrid = m_renderer.ShowGrid();
s.showCameraGuide = m_renderer.ShowCameraGuide();
s.aov = m_renderer.GetCurrentAov().GetString();
s.aaEnabled = m_renderer.GetAAEnabled();
const pxr::GfVec3f& bg = m_renderer.GetBackgroundColor();
s.bgColorR = bg[0]; s.bgColorG = bg[1]; s.bgColorB = bg[2];
@@ -110,6 +111,8 @@ void ViewportTile::ApplySettings(const ViewportTileSettings& s)
m_renderer.SetRendererPlugin(pxr::TfToken(s.renderDelegate));
m_renderer.SetShowGrid(s.showGrid);
m_renderer.SetShowCameraGuide(s.showCameraGuide);
if (!s.aov.empty())
m_renderer.SetCurrentAov(pxr::TfToken(s.aov));
m_renderer.SetAAEnabled(s.aaEnabled);
m_renderer.SetBackgroundColor(pxr::GfVec3f(s.bgColorR, s.bgColorG, s.bgColorB));
m_renderer.SetBBoxMode(static_cast<BBoxMode>(s.bboxMode));
@@ -1008,6 +1011,20 @@ void ViewportTile::RenderCompactToolbar(int tileIndex)
ImGui::EndMenu();
}
// -- AOV ---------------------------------------------------------
{
pxr::TfTokenVector aovs = m_renderer.GetRendererAovs();
if (ImGui::BeginMenu("AOV", !aovs.empty())) {
pxr::TfToken currentAov = m_renderer.GetCurrentAov();
for (const auto& aov : aovs) {
bool checked = (aov == currentAov);
if (ImGui::MenuItem(aov.GetText(), nullptr, checked) && !checked)
m_renderer.SetCurrentAov(aov);
}
ImGui::EndMenu();
}
}
// -- Lighting ----------------------------------------------------
if (ImGui::BeginMenu("Lighting")) {
bool ambient = m_renderer.GetAmbientLightOnly();