From 6756a66e6c1b1828ecb85a7fca584203e52254ab Mon Sep 17 00:00:00 2001 From: David Lanier <122012029+lanierd-adsk@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:07:38 +0200 Subject: [PATCH] HYDRA-1054 : Fix material assignment not working in our code, a fix which is in USD 24.08 will be needed to fully validate this * HYDRA-1054 : Fix material assignment not working in our code, a fix which is in USD 24.08 will be needed to fully validate this. * Add unit test for default material on usd procedural prims * Fix scene version * Fix compilation with prior versions of USD and fix the test scene as cone and cilynder_1 are not supported on OSX for USD 24.05 * Update test image * Make the tests work on OSX for USD versions prior to 24.05 * Fix a comment from code review * Using std::set * Update lib/flowViewport/sceneIndex/fvpDefaultMaterialSceneIndex.cpp --- .../fvpDefaultMaterialSceneIndex.cpp | 22 +- lib/mayaHydra/hydraExtensions/mixedUtils.cpp | 5 + .../sceneIndex/registration.cpp | 19 +- .../defaultMaterialUsdPrims.png | Bin 0 -> 12331 bytes .../mayaToHydra/testMayaDefaultMaterial.py | 15 ++ ...ayaDefaultMaterial_Usd_proceduralShapes.ma | 247 ++++++++++++++++++ 6 files changed, 299 insertions(+), 9 deletions(-) create mode 100644 test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/defaultMaterialUsdPrims.png create mode 100644 test/testSamples/testDefaultMaterial/testMayaDefaultMaterial_Usd_proceduralShapes.ma diff --git a/lib/flowViewport/sceneIndex/fvpDefaultMaterialSceneIndex.cpp b/lib/flowViewport/sceneIndex/fvpDefaultMaterialSceneIndex.cpp index 7a27d31aac..ffb0afab2e 100644 --- a/lib/flowViewport/sceneIndex/fvpDefaultMaterialSceneIndex.cpp +++ b/lib/flowViewport/sceneIndex/fvpDefaultMaterialSceneIndex.cpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace FVP_NS_DEF { @@ -29,6 +30,24 @@ PXR_NAMESPACE_USING_DIRECTIVE namespace{ static const TfToken purposes[] = { HdMaterialBindingsSchemaTokens->allPurpose }; + + // Support implicit surfaces from USD as well, not only meshes + bool _IsDefaultMaterialCompliantPrimitive(const TfToken& primType) + { + static std::set const compliantPrimitives = { HdPrimTypeTokens->cone, + HdPrimTypeTokens->cylinder, + HdPrimTypeTokens->cylinder_1, + HdPrimTypeTokens->cube, + HdPrimTypeTokens->sphere, + HdPrimTypeTokens->capsule, + HdPrimTypeTokens->capsule_1, + #if HD_API_VERSION >= 67 // USD 24.05+ + UsdGeomTokens->TetMesh, + #endif + UsdGeomTokens->Plane, + HdPrimTypeTokens->mesh}; + return compliantPrimitives.count(primType) == 1; + } } // static @@ -67,8 +86,7 @@ HdSceneIndexPrim DefaultMaterialSceneIndex::GetPrim(const SdfPath& primPath) con bool DefaultMaterialSceneIndex::_ShouldWeApplyTheDefaultMaterial(const HdSceneIndexPrim& prim)const { - // Only for meshes so far - if (HdPrimTypeTokens->mesh != prim.primType) { + if (! _IsDefaultMaterialCompliantPrimitive(prim.primType)) { return false; } diff --git a/lib/mayaHydra/hydraExtensions/mixedUtils.cpp b/lib/mayaHydra/hydraExtensions/mixedUtils.cpp index 7c87125d06..741eee16c8 100644 --- a/lib/mayaHydra/hydraExtensions/mixedUtils.cpp +++ b/lib/mayaHydra/hydraExtensions/mixedUtils.cpp @@ -78,6 +78,11 @@ SdfPath DagPathToSdfPath( const bool stripNamespaces) { std::string name = dagPath.fullPathName().asChar(); + if ( name.empty() ) { + MFnDependencyNode dep(dagPath.node()); + TF_WARN("Empty fullpath name for DAG object : %s of type : %s", dep.name().asChar(), dep.typeName().asChar()); + return SdfPath(); + } SanitizeNameForSdfPath(name, stripNamespaces); SdfPath usdPath(name); diff --git a/lib/mayaHydra/hydraExtensions/sceneIndex/registration.cpp b/lib/mayaHydra/hydraExtensions/sceneIndex/registration.cpp index e9a8f26167..5068ae3cc5 100644 --- a/lib/mayaHydra/hydraExtensions/sceneIndex/registration.cpp +++ b/lib/mayaHydra/hydraExtensions/sceneIndex/registration.cpp @@ -139,8 +139,9 @@ class PathInterfaceSceneIndex : public Fvp::PathInterfaceSceneIndexBase auto secondSegment = appPath.getSegments()[1]; const auto lastComponentString = secondSegment.components().back().string(); const bool lastComponentIsNumeric = lastComponentString.find_first_not_of(digits) == std::string::npos; + const size_t lastComponentIndex = secondSegment.size() - 1; - for (size_t iSecondSegment = 0; iSecondSegment < secondSegment.size(); iSecondSegment++) { + for (size_t iComponent = 0; iComponent < secondSegment.size(); iComponent++) { // Native instancing : if the current prim path points to a native instance, repath to the prototype // before appending the following UFE components HdSceneIndexPrim prim = GetInputSceneIndex()->GetPrim(primPath); @@ -155,16 +156,20 @@ class PathInterfaceSceneIndex : public Fvp::PathInterfaceSceneIndexBase instanceSelection = {instancerPath, prototypeIndex, {instanceSchema.GetInstanceIndex()->GetTypedValue(0)}}; } - auto targetChildPath = primPath.AppendChild(TfToken(secondSegment.components()[iSecondSegment].string())); + auto targetChildPath = primPath.AppendChild(TfToken(secondSegment.components()[iComponent].string())); auto actualChildPaths = GetInputSceneIndex()->GetChildPrimPaths(primPath); if (std::find(actualChildPaths.begin(), actualChildPaths.end(), targetChildPath) != actualChildPaths.end()) { // Append if the new path is valid - primPath = primPath.AppendChild(TfToken(secondSegment.components()[iSecondSegment].string())); + primPath = targetChildPath; } - else if (iSecondSegment == secondSegment.size() - 1) { - // Point instancing : instance selection. The path should end with a number corresponding to the selected instance, - // and the remainder of the path points to the point instancer. - if (TF_VERIFY(lastComponentIsNumeric, "Expected number as final UFE path component but got an invalid path instead.")) { + else if (iComponent == lastComponentIndex) { + // If the last component is a number, we are dealing with an instance selection. + // But there are other cases like when you assign a USD Preview surface material to a usd prim, it has a shader prim in the material + // which doesn't appear in the hydra hierarchy but is actually present and we end up in this case as well. + if (lastComponentIsNumeric) { + // Point instancing : instance selection. The path should end with a number + // corresponding to the selected instance, + // and the remainder of the path points to the point instancer. HdSceneIndexPrim instancerPrim = GetInputSceneIndex()->GetPrim(primPath); HdInstancerTopologySchema instancerTopologySchema = HdInstancerTopologySchema::GetFromParent(instancerPrim.dataSource); auto instanceIndicesByPrototype = instancerTopologySchema.GetInstanceIndices(); diff --git a/test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/defaultMaterialUsdPrims.png b/test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/defaultMaterialUsdPrims.png new file mode 100644 index 0000000000000000000000000000000000000000..df7a55bcf8781219f2dd16affe9d3ea65d907339 GIT binary patch literal 12331 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 hKc>|aiT4Y9qNOSD|Cs#${~Uk79TN*/OCIO-configs/Maya2022-default/config.ocio"; + setAttr ".vtn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".vn" -type "string" "ACES 1.0 SDR-video"; + setAttr ".dn" -type "string" "sRGB"; + setAttr ".wsn" -type "string" "ACEScg"; + setAttr ".otn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".potn" -type "string" "ACES 1.0 SDR-video (sRGB)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr ":time1.o" "stageShape1.tm"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of testMayaDefaultMaterial_Usd_proceduralShapes.ma