From 9d247456ce3f2e04da055e8bcae434287952a238 Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Fri, 4 Aug 2023 15:45:36 -0400 Subject: [PATCH 1/8] Debug displaying displayColor when texture is turned off --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index d0168280cf..778fad7809 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -891,7 +891,8 @@ void HdVP2Mesh::Sync( auto addRequiredPrimvars = [&](const SdfPath& materialId) { TfTokenVector requiredPrimvars; - if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars)) { + if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) + || !(reprToken == HdReprTokens->smoothHull)) { requiredPrimvars = sFallbackShaderPrimvars; } @@ -1745,7 +1746,8 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - if (material) { + if (material && (reprToken == HdReprTokens->smoothHull)) { + //debug const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); From 31de55bbaa1f7caf88977faa9c59ff5ecf6867ec Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Fri, 11 Aug 2023 13:02:30 -0400 Subject: [PATCH 2/8] Check for material base color when using untextured mode --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 778fad7809..eaf68310df 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -893,6 +893,7 @@ void HdVP2Mesh::Sync( TfTokenVector requiredPrimvars; if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) || !(reprToken == HdReprTokens->smoothHull)) { + // debug requiredPrimvars = sFallbackShaderPrimvars; } @@ -1746,12 +1747,24 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - if (material && (reprToken == HdReprTokens->smoothHull)) { - //debug + //if (material && (reprToken == HdReprTokens->smoothHull)) { + if (material) { const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); - if (shader != nullptr + + // If untextured mode is selected, check if the material has base color + if (reprToken == HdVP2ReprTokens->smoothHullUntextured){ + MStringArray parameters; + shader->parameterList(parameters); + const bool hasColor = parameters.indexOf("base_color") != -1 + || parameters.indexOf("diffuseColor") != -1 + || parameters.indexOf("color") != -1; + // if not, use the fallback shader, which will use the display color + if (!hasColor) + drawItemData._shaderIsFallback = true; + } + else if (shader != nullptr && (shader != drawItemData._shader || shader != stateToCommit._shader)) { drawItemData._shader = shader; drawItemData._shaderIsFallback = false; From 5b0026de4fb60559d45c827f200eee0cc588b44b Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Fri, 11 Aug 2023 15:24:54 -0400 Subject: [PATCH 3/8] Comment clean up --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index eaf68310df..bd0bcec4ed 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -891,9 +891,9 @@ void HdVP2Mesh::Sync( auto addRequiredPrimvars = [&](const SdfPath& materialId) { TfTokenVector requiredPrimvars; + // Only load textures when texture mode is selected if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) || !(reprToken == HdReprTokens->smoothHull)) { - // debug requiredPrimvars = sFallbackShaderPrimvars; } @@ -1747,14 +1747,13 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - //if (material && (reprToken == HdReprTokens->smoothHull)) { if (material) { const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); // If untextured mode is selected, check if the material has base color - if (reprToken == HdVP2ReprTokens->smoothHullUntextured){ + if (reprToken == HdVP2ReprTokens->smoothHullUntextured) { MStringArray parameters; shader->parameterList(parameters); const bool hasColor = parameters.indexOf("base_color") != -1 @@ -1763,8 +1762,8 @@ void HdVP2Mesh::_UpdateDrawItem( // if not, use the fallback shader, which will use the display color if (!hasColor) drawItemData._shaderIsFallback = true; - } - else if (shader != nullptr + } else if ( + shader != nullptr && (shader != drawItemData._shader || shader != stateToCommit._shader)) { drawItemData._shader = shader; drawItemData._shaderIsFallback = false; From d7ef0b7e579d615dd7475f9d1b03d77f8bbef2b1 Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Tue, 15 Aug 2023 13:56:04 -0400 Subject: [PATCH 4/8] Revert "Comment clean up" This reverts commit 5b0026de4fb60559d45c827f200eee0cc588b44b. --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index bd0bcec4ed..eaf68310df 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -891,9 +891,9 @@ void HdVP2Mesh::Sync( auto addRequiredPrimvars = [&](const SdfPath& materialId) { TfTokenVector requiredPrimvars; - // Only load textures when texture mode is selected if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) || !(reprToken == HdReprTokens->smoothHull)) { + // debug requiredPrimvars = sFallbackShaderPrimvars; } @@ -1747,13 +1747,14 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); + //if (material && (reprToken == HdReprTokens->smoothHull)) { if (material) { const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); // If untextured mode is selected, check if the material has base color - if (reprToken == HdVP2ReprTokens->smoothHullUntextured) { + if (reprToken == HdVP2ReprTokens->smoothHullUntextured){ MStringArray parameters; shader->parameterList(parameters); const bool hasColor = parameters.indexOf("base_color") != -1 @@ -1762,8 +1763,8 @@ void HdVP2Mesh::_UpdateDrawItem( // if not, use the fallback shader, which will use the display color if (!hasColor) drawItemData._shaderIsFallback = true; - } else if ( - shader != nullptr + } + else if (shader != nullptr && (shader != drawItemData._shader || shader != stateToCommit._shader)) { drawItemData._shader = shader; drawItemData._shaderIsFallback = false; From 477d071d2139d2bc78444e0398a5b09e24376aae Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Tue, 15 Aug 2023 13:56:21 -0400 Subject: [PATCH 5/8] Revert "Check for material base color when using untextured mode" This reverts commit 31de55bbaa1f7caf88977faa9c59ff5ecf6867ec. --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index eaf68310df..778fad7809 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -893,7 +893,6 @@ void HdVP2Mesh::Sync( TfTokenVector requiredPrimvars; if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) || !(reprToken == HdReprTokens->smoothHull)) { - // debug requiredPrimvars = sFallbackShaderPrimvars; } @@ -1747,24 +1746,12 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - //if (material && (reprToken == HdReprTokens->smoothHull)) { - if (material) { + if (material && (reprToken == HdReprTokens->smoothHull)) { + //debug const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); - - // If untextured mode is selected, check if the material has base color - if (reprToken == HdVP2ReprTokens->smoothHullUntextured){ - MStringArray parameters; - shader->parameterList(parameters); - const bool hasColor = parameters.indexOf("base_color") != -1 - || parameters.indexOf("diffuseColor") != -1 - || parameters.indexOf("color") != -1; - // if not, use the fallback shader, which will use the display color - if (!hasColor) - drawItemData._shaderIsFallback = true; - } - else if (shader != nullptr + if (shader != nullptr && (shader != drawItemData._shader || shader != stateToCommit._shader)) { drawItemData._shader = shader; drawItemData._shaderIsFallback = false; From 2df11fe200df6b3d20add13a1049e9065437bf6e Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Tue, 15 Aug 2023 13:56:26 -0400 Subject: [PATCH 6/8] Revert "Debug displaying displayColor when texture is turned off" This reverts commit 9d247456ce3f2e04da055e8bcae434287952a238. --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 778fad7809..d0168280cf 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -891,8 +891,7 @@ void HdVP2Mesh::Sync( auto addRequiredPrimvars = [&](const SdfPath& materialId) { TfTokenVector requiredPrimvars; - if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars) - || !(reprToken == HdReprTokens->smoothHull)) { + if (!_GetMaterialPrimvars(renderIndex, materialId, requiredPrimvars)) { requiredPrimvars = sFallbackShaderPrimvars; } @@ -1746,8 +1745,7 @@ void HdVP2Mesh::_UpdateDrawItem( const HdVP2Material* material = static_cast( renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - if (material && (reprToken == HdReprTokens->smoothHull)) { - //debug + if (material) { const HdCullStyle cullStyle = GetCullStyle(sceneDelegate); MHWRender::MShaderInstance* shader = material->GetSurfaceShader( _GetMaterialNetworkToken(reprToken), cullStyle == HdCullStyleBack); From 81ecc6fdea1c7613363243487316d1f7491762ee Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Fri, 18 Aug 2023 13:19:31 -0400 Subject: [PATCH 7/8] Change the design to use optionVar to specify use display color or not --- lib/mayaUsd/base/tokens.h | 4 +- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 39 +++++++++++++------ lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 1 + 3 files changed, 32 insertions(+), 12 deletions(-) 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..ff0b24c94e 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -891,7 +891,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 +1752,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/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 4c619cf5c7..63a5ec65a1 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -21,6 +21,7 @@ #include "meshViewportCompute.h" #include "primvarInfo.h" +#include #include #include From e4f0f59ef54b38ecadd1f5c2d7722f1b601eaaba Mon Sep 17 00:00:00 2001 From: Samuel Liu Date: Mon, 21 Aug 2023 15:05:29 -0400 Subject: [PATCH 8/8] Initialize optionVar if it doesn't exist --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 1 + lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 1 - .../render/vp2RenderDelegate/proxyRenderDelegate.cpp | 7 +++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index ff0b24c94e..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 diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 63a5ec65a1..4c619cf5c7 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -21,7 +21,6 @@ #include "meshViewportCompute.h" #include "primvarInfo.h" -#include #include #include 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;