diff --git a/lib/mayaUsd/base/tokens.h b/lib/mayaUsd/base/tokens.h index fec3533fc9..fc29a91258 100644 --- a/lib/mayaUsd/base/tokens.h +++ b/lib/mayaUsd/base/tokens.h @@ -68,7 +68,9 @@ PXR_NAMESPACE_OPEN_SCOPE /* Notice that only newly opened USD stage would be affected. */ \ ((DisableAsyncTextureLoading, "mayaUsd_DisableAsyncTextureLoading")) \ /* option var to remember if the stage in the layer editor is pinned. */ \ - ((PinLayerEditorStage, "mayaUsd_PinLayerEditorStage")) + ((PinLayerEditorStage, "mayaUsd_PinLayerEditorStage")) \ + /* option var to remember if use display color when texture mode off */ \ + ((ShowDisplayColorTextureOff, "mayaUsd_ShowDisplayColorTextureOff")) // clang-format on TF_DECLARE_PUBLIC_TOKENS(MayaUsdOptionVars, MAYAUSD_CORE_PUBLIC, MAYA_USD_OPTIONVAR_TOKENS); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index d0168280cf..1d6b78340d 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -22,6 +22,7 @@ #include "render_delegate.h" #include "tokens.h" +#include #include #include @@ -891,7 +892,13 @@ void HdVP2Mesh::Sync( auto addRequiredPrimvars = [&](const SdfPath& materialId) { TfTokenVector requiredPrimvars; - if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars)) { + if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) + || ((reprToken == HdVP2ReprTokens->smoothHullUntextured) + && (MGlobal::optionVarIntValue( + MayaUsdOptionVars->ShowDisplayColorTextureOff.GetText()) + != 0))) { + // if user selected present display color in untextured mode, use fallback shader as + // well requiredPrimvars = sFallbackShaderPrimvars; } @@ -1746,16 +1753,27 @@ void HdVP2Mesh::_UpdateDrawItem( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); if (material) { - const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); - MHWRender::MShaderInstance* shader = material->GetSurfaceShader( - _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); - if (shader != nullptr - && (shader != drawItemData._shader || shader != stateToCommit._shader)) { - drawItemData._shader = shader; - drawItemData._shaderIsFallback = false; - stateToCommit._shader = shader; - stateToCommit._isTransparent - = shader->isTransparent() || renderItemData._transparent; + const MString optionVarName( + MayaUsdOptionVars->ShowDisplayColorTextureOff.GetText()); + + // if untextured mode with show display color specified, use fallback shader + if ((reprToken == HdVP2ReprTokens->smoothHullUntextured) + && (MGlobal::optionVarIntValue( + MayaUsdOptionVars->ShowDisplayColorTextureOff.GetText()) + != 0)) { + drawItemData._shaderIsFallback = true; + } else { + const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); + MHWRender::MShaderInstance* shader = material->GetSurfaceShader( + _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); + if (shader != nullptr + && (shader != drawItemData._shader || shader != stateToCommit._shader)) { + drawItemData._shader = shader; + drawItemData._shaderIsFallback = false; + stateToCommit._shader = shader; + stateToCommit._isTransparent + = shader->isTransparent() || renderItemData._transparent; + } } } else { drawItemData._shaderIsFallback = true; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp index 13bce8d29b..e3571d9e3b 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp @@ -661,6 +661,13 @@ void ProxyRenderDelegate::_InitRenderDelegate() { TF_VERIFY(_proxyShapeData->ProxyShape()); + // Initialize the optionVar ShowDisplayColorTextureOff, which will decide if display color will + // be used when untextured mode is selected + const MString optionVarName(MayaUsdOptionVars->ShowDisplayColorTextureOff.GetText()); + if (!MGlobal::optionVarExists(optionVarName)) { + MGlobal::setOptionVarValue(optionVarName, 0); + } + // No need to run all the checks if we got till the end if (_isInitialized()) return;