Add per-viewport cull style option
Exposes UsdImagingGLCullStyle as a Cull Style sub-menu in the gear popup (Back Unless Double-Sided / Back / Front / Nothing / No Opinion). Defaults to BackUnlessDoubleSided, matching usdview. Setting persists per-viewport to viewport_settings.ini. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -174,6 +174,7 @@ UsdSceneRenderer::UsdSceneRenderer()
|
|||||||
, m_aaEnabled(false)
|
, m_aaEnabled(false)
|
||||||
, m_backgroundColor(0.15f, 0.15f, 0.15f)
|
, m_backgroundColor(0.15f, 0.15f, 0.15f)
|
||||||
, m_shadingMode(ShadingMode::SmoothShaded)
|
, m_shadingMode(ShadingMode::SmoothShaded)
|
||||||
|
, m_cullStyle(CullStyle::BackUnlessDoubleSided)
|
||||||
, m_colorCorrectionMode(ColorCorrectionMode::sRGB)
|
, m_colorCorrectionMode(ColorCorrectionMode::sRGB)
|
||||||
, m_ambientLightOnly(true)
|
, m_ambientLightOnly(true)
|
||||||
, m_domeLightEnabled(false)
|
, m_domeLightEnabled(false)
|
||||||
@@ -728,7 +729,7 @@ void UsdSceneRenderer::Render(int width, int height)
|
|||||||
m_renderParams.showRender = m_showRender;
|
m_renderParams.showRender = m_showRender;
|
||||||
m_renderParams.enableSampleAlphaToCoverage = true;
|
m_renderParams.enableSampleAlphaToCoverage = true;
|
||||||
m_renderParams.gammaCorrectColors = false;
|
m_renderParams.gammaCorrectColors = false;
|
||||||
m_renderParams.cullStyle = pxr::UsdImagingGLCullStyle::CULL_STYLE_BACK_UNLESS_DOUBLE_SIDED;
|
m_renderParams.cullStyle = static_cast<pxr::UsdImagingGLCullStyle>(m_cullStyle);
|
||||||
m_renderParams.enableSceneMaterials = true;
|
m_renderParams.enableSceneMaterials = true;
|
||||||
m_renderParams.enableSceneLights = true;
|
m_renderParams.enableSceneLights = true;
|
||||||
m_renderParams.highlight = true;
|
m_renderParams.highlight = true;
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ enum class ShadingMode {
|
|||||||
Unlit, ///< Smooth geometry, lighting disabled
|
Unlit, ///< Smooth geometry, lighting disabled
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Back-face culling style — maps directly to UsdImagingGLCullStyle.
|
||||||
|
enum class CullStyle {
|
||||||
|
NoOpinion = 0,
|
||||||
|
Nothing = 1,
|
||||||
|
Back = 2,
|
||||||
|
Front = 3,
|
||||||
|
BackUnlessDoubleSided = 4,
|
||||||
|
};
|
||||||
|
|
||||||
/// Viewport color correction mode — maps to UsdImagingGLRenderParams::colorCorrectionMode.
|
/// Viewport color correction mode — maps to UsdImagingGLRenderParams::colorCorrectionMode.
|
||||||
enum class ColorCorrectionMode {
|
enum class ColorCorrectionMode {
|
||||||
Disabled, ///< No correction (raw linear output)
|
Disabled, ///< No correction (raw linear output)
|
||||||
@@ -240,6 +249,9 @@ public:
|
|||||||
ShadingMode GetShadingMode() const { return m_shadingMode; }
|
ShadingMode GetShadingMode() const { return m_shadingMode; }
|
||||||
void SetShadingMode(ShadingMode m) { m_shadingMode = m; m_forceRefresh = true; }
|
void SetShadingMode(ShadingMode m) { m_shadingMode = m; m_forceRefresh = true; }
|
||||||
|
|
||||||
|
CullStyle GetCullStyle() const { return m_cullStyle; }
|
||||||
|
void SetCullStyle(CullStyle c) { m_cullStyle = c; m_forceRefresh = true; }
|
||||||
|
|
||||||
ColorCorrectionMode GetColorCorrectionMode() const { return m_colorCorrectionMode; }
|
ColorCorrectionMode GetColorCorrectionMode() const { return m_colorCorrectionMode; }
|
||||||
void SetColorCorrectionMode(ColorCorrectionMode m) { m_colorCorrectionMode = m; m_forceRefresh = true; }
|
void SetColorCorrectionMode(ColorCorrectionMode m) { m_colorCorrectionMode = m; m_forceRefresh = true; }
|
||||||
|
|
||||||
@@ -358,6 +370,7 @@ private:
|
|||||||
|
|
||||||
// Lighting settings (mirrors stageView.py viewSettings)
|
// Lighting settings (mirrors stageView.py viewSettings)
|
||||||
ShadingMode m_shadingMode; // draw mode + lighting flags
|
ShadingMode m_shadingMode; // draw mode + lighting flags
|
||||||
|
CullStyle m_cullStyle; // back/front/none face culling
|
||||||
ColorCorrectionMode m_colorCorrectionMode; // viewport color correction
|
ColorCorrectionMode m_colorCorrectionMode; // viewport color correction
|
||||||
std::string m_ocioDisplay;
|
std::string m_ocioDisplay;
|
||||||
std::string m_ocioView;
|
std::string m_ocioView;
|
||||||
|
|||||||
@@ -670,6 +670,7 @@ void ViewportPanel::SaveSettings(const std::string& path) const
|
|||||||
f << "AmbientLightOnly=" << (s.ambientLightOnly ? 1 : 0) << "\n";
|
f << "AmbientLightOnly=" << (s.ambientLightOnly ? 1 : 0) << "\n";
|
||||||
f << "DomeLightEnabled=" << (s.domeLightEnabled ? 1 : 0) << "\n";
|
f << "DomeLightEnabled=" << (s.domeLightEnabled ? 1 : 0) << "\n";
|
||||||
f << "ShadingMode=" << s.shadingMode << "\n";
|
f << "ShadingMode=" << s.shadingMode << "\n";
|
||||||
|
f << "CullStyle=" << s.cullStyle << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -741,6 +742,7 @@ void ViewportPanel::LoadSettings(const std::string& path)
|
|||||||
else if (key == "AmbientLightOnly") ts.ambientLightOnly = (val == "1");
|
else if (key == "AmbientLightOnly") ts.ambientLightOnly = (val == "1");
|
||||||
else if (key == "DomeLightEnabled") ts.domeLightEnabled = (val == "1");
|
else if (key == "DomeLightEnabled") ts.domeLightEnabled = (val == "1");
|
||||||
else if (key == "ShadingMode") ts.shadingMode = toInt(val, ts.shadingMode);
|
else if (key == "ShadingMode") ts.shadingMode = toInt(val, ts.shadingMode);
|
||||||
|
else if (key == "CullStyle") ts.cullStyle = toInt(val, ts.cullStyle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ ViewportTileSettings ViewportTile::GetSettings() const
|
|||||||
s.ambientLightOnly = m_renderer.GetAmbientLightOnly();
|
s.ambientLightOnly = m_renderer.GetAmbientLightOnly();
|
||||||
s.domeLightEnabled = m_renderer.GetDomeLightEnabled();
|
s.domeLightEnabled = m_renderer.GetDomeLightEnabled();
|
||||||
s.shadingMode = static_cast<int>(m_renderer.GetShadingMode());
|
s.shadingMode = static_cast<int>(m_renderer.GetShadingMode());
|
||||||
|
s.cullStyle = static_cast<int>(m_renderer.GetCullStyle());
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,6 +127,7 @@ void ViewportTile::ApplySettings(const ViewportTileSettings& s)
|
|||||||
m_renderer.SetAmbientLightOnly(s.ambientLightOnly);
|
m_renderer.SetAmbientLightOnly(s.ambientLightOnly);
|
||||||
m_renderer.SetDomeLightEnabled(s.domeLightEnabled);
|
m_renderer.SetDomeLightEnabled(s.domeLightEnabled);
|
||||||
m_renderer.SetShadingMode(static_cast<ShadingMode>(s.shadingMode));
|
m_renderer.SetShadingMode(static_cast<ShadingMode>(s.shadingMode));
|
||||||
|
m_renderer.SetCullStyle(static_cast<CullStyle>(s.cullStyle));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -1018,6 +1020,21 @@ void ViewportTile::RenderCompactToolbar(int tileIndex)
|
|||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- Cull Style --------------------------------------------------
|
||||||
|
if (ImGui::BeginMenu("Cull Style")) {
|
||||||
|
CullStyle curCull = m_renderer.GetCullStyle();
|
||||||
|
auto cullItem = [&](const char* label, CullStyle style) {
|
||||||
|
if (ImGui::MenuItem(label, nullptr, curCull == style))
|
||||||
|
m_renderer.SetCullStyle(style);
|
||||||
|
};
|
||||||
|
cullItem("Back Unless Double-Sided", CullStyle::BackUnlessDoubleSided);
|
||||||
|
cullItem("Back", CullStyle::Back);
|
||||||
|
cullItem("Front", CullStyle::Front);
|
||||||
|
cullItem("Nothing", CullStyle::Nothing);
|
||||||
|
cullItem("No Opinion", CullStyle::NoOpinion);
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
|
||||||
// -- AOV ---------------------------------------------------------
|
// -- AOV ---------------------------------------------------------
|
||||||
{
|
{
|
||||||
pxr::TfTokenVector aovs = m_renderer.GetRendererAovs();
|
pxr::TfTokenVector aovs = m_renderer.GetRendererAovs();
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ struct ViewportTileSettings {
|
|||||||
bool ambientLightOnly = true;
|
bool ambientLightOnly = true;
|
||||||
bool domeLightEnabled = false;
|
bool domeLightEnabled = false;
|
||||||
int shadingMode = 0;
|
int shadingMode = 0;
|
||||||
|
int cullStyle = 4; // CullStyle::BackUnlessDoubleSided
|
||||||
bool showGuides = false;
|
bool showGuides = false;
|
||||||
bool showProxy = true;
|
bool showProxy = true;
|
||||||
bool showRender = false;
|
bool showRender = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user