diff --git a/lib/mayaHydra/hydraExtensions/adapters/renderItemAdapter.cpp b/lib/mayaHydra/hydraExtensions/adapters/renderItemAdapter.cpp index c51b49a90..f0c578d3a 100644 --- a/lib/mayaHydra/hydraExtensions/adapters/renderItemAdapter.cpp +++ b/lib/mayaHydra/hydraExtensions/adapters/renderItemAdapter.cpp @@ -33,11 +33,7 @@ #include #include -#include #include -#include -#include -#include #include diff --git a/lib/mayaHydra/hydraExtensions/mayaUtils.cpp b/lib/mayaHydra/hydraExtensions/mayaUtils.cpp index 50eb0469b..314f8318b 100644 --- a/lib/mayaHydra/hydraExtensions/mayaUtils.cpp +++ b/lib/mayaHydra/hydraExtensions/mayaUtils.cpp @@ -25,6 +25,7 @@ #include #include #include +#include namespace { @@ -193,6 +194,37 @@ bool IsDagPathAnArnoldSkyDomeLight(const MDagPath& dagPath) shapeDagPath.extendToShape(); return _aiSkyDomeLight == MFnDependencyNode(shapeDagPath.node()).typeName(); } - + + +MObject getDefaultMaterialShadingGroupNode() +{ + MStatus status; + + // Iterate over all shading engines + MItDependencyNodes itDep(MFn::kShadingEngine, &status); + if (status != MStatus::kSuccess) { + MGlobal::displayError("Failed to create dependency node iterator."); + return MObject::kNullObj; + } + + while (!itDep.isDone()) { + MObject shadingEngine = itDep.item(); + MFnDependencyNode shadingEngineFn(shadingEngine, &status); + if (status != MStatus::kSuccess) { + MGlobal::displayError("Failed to create dependency node function set."); + return MObject::kNullObj; + } + + // Is this shading engine the default material ? + if (shadingEngineFn.name() == "initialShadingGroup") { + return shadingEngine; + } + + itDep.next(); + } + + MGlobal::displayError("Failed to find the default material shader."); + return MObject::kNullObj; +} } // namespace MAYAHYDRA_NS_DEF diff --git a/lib/mayaHydra/hydraExtensions/mayaUtils.h b/lib/mayaHydra/hydraExtensions/mayaUtils.h index 6c9ac5ede..cf1d55af3 100644 --- a/lib/mayaHydra/hydraExtensions/mayaUtils.h +++ b/lib/mayaHydra/hydraExtensions/mayaUtils.h @@ -185,6 +185,14 @@ MObject GetShadingGroupFromShader(const MObject& shader); */ bool IsDagPathAnArnoldSkyDomeLight(const MDagPath& dagPath); +/** + * @brief Get the default material shading group node using the shadingEngine named "initialShadingGroup". + * + * @return a valid MObject if we succeeded finding the default material shading group or MObject::kNullObj otherwise + */ + +MObject getDefaultMaterialShadingGroupNode(); + } // namespace MAYAHYDRA_NS_DEF #endif // MAYAHYDRALIB_MAYA_UTILS_H diff --git a/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.cpp b/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.cpp index af577d15f..72424aef5 100644 --- a/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.cpp +++ b/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.cpp @@ -24,15 +24,11 @@ #include #include #include -#include #include -#include #include #include -#include -#include +#include #include -#include #include #include #include @@ -163,7 +159,7 @@ TF_DEFINE_PRIVATE_TOKENS( SdfPath MayaHydraSceneIndex::_fallbackMaterial; SdfPath MayaHydraSceneIndex::_mayaDefaultMaterialPath; // Common to all scene indexes -VtValue MayaHydraSceneIndex::_mayaDefaultMaterialFallback;//Used only if we cannot find the default material named standardSurface1 +VtValue MayaHydraSceneIndex::_mayaDefaultMaterialFallback;//Used only if we cannot find the maya default material SdfPath MayaHydraSceneIndex::_mayaDefaultLightPath; // Common to all scene indexes SdfPath MayaHydraSceneIndex::_mayaFacesSelectionMaterialPath; // Common to all scene indexes @@ -773,26 +769,20 @@ VtValue MayaHydraSceneIndex::GetMaterialResource(const SdfPath& id) return ret.IsEmpty() ? MayaHydraMaterialAdapter::GetPreviewMaterialResource(id) : ret; } -//Create the default material from the "standardSurface1" maya material or create a fallback material if it cannot be found +//Create the default maya material or create a fallback material if it cannot be found void MayaHydraSceneIndex::CreateMayaDefaultMaterialData() { - // Try to get the standardSurface1 material - MObject defaultShaderObj; - GetDependNodeFromNodeName("standardSurface1", defaultShaderObj); // From mayautils.cpp - bool defaultMaterialSuccessfullyCreated = false; - if (MObjectHandle(defaultShaderObj).isValid()) { - //Get its shading group as it is what we use to create a material adapter - MObject defaultMaterialShadingGroupObj - = GetShadingGroupFromShader(defaultShaderObj); // From mayautils.cpp - if (MObjectHandle(defaultMaterialShadingGroupObj).isValid()) { - defaultMaterialSuccessfullyCreated = _CreateMaterial(MayaHydraSceneIndex::_mayaDefaultMaterialPath, defaultMaterialShadingGroupObj); - } - } - - if (! defaultMaterialSuccessfullyCreated){ - TF_CODING_WARNING("standardSurface1 material and its shading group could not be retrieved, using a fallback material"); - // In case we could not create the default material from the standardSurface1 material, we - // create a fallback material + bool defaultMaterialCreatedSuccessfully = false; + + MObject defaultMaterialShadingGroupObj = getDefaultMaterialShadingGroupNode(); + if (defaultMaterialShadingGroupObj != MObject::kNullObj) { + defaultMaterialCreatedSuccessfully = _CreateMaterial( + MayaHydraSceneIndex::_mayaDefaultMaterialPath, defaultMaterialShadingGroupObj); + } + + if (! defaultMaterialCreatedSuccessfully){ + TF_CODING_WARNING("maya default material and its shading group could not be retrieved, using a fallback material"); + _mayaDefaultMaterialFallback = MayaHydraSceneIndex::_CreateDefaultMaterialFallback(); auto mayaHydraDefaultMaterialDataSource = MayaHydraMaterialDataSource::New( diff --git a/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.h b/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.h index bea85a75f..a731f9a1b 100644 --- a/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.h +++ b/lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.h @@ -21,7 +21,6 @@ #include #include #include -#include #include #include @@ -257,7 +256,7 @@ class MAYAHYDRALIB_API MayaHydraSceneIndex : public HdRetainedSceneIndex, public /// Is using an environment variable to tell if we should pass normals to Hydra when using the render item and mesh adapters static bool passNormalsToHydra(); - ///Create the default material from the "standardSurface1" maya material or create a fallback material if it cannot be found + ///Create the default hydra material from maya default material or create a fallback material if it cannot be found void CreateMayaDefaultMaterialData(); /// Get the maya default light path to be used in filtering scene indices to recognize the default light in primitives path @@ -342,7 +341,7 @@ class MAYAHYDRALIB_API MayaHydraSceneIndex : public HdRetainedSceneIndex, public static SdfPath _fallbackMaterial; /// _mayaDefaultMaterialPath is common to all scene indexes static SdfPath _mayaDefaultMaterialPath; - static VtValue _mayaDefaultMaterialFallback;//Used only if we cannot find the default material named standardSurface1 + static VtValue _mayaDefaultMaterialFallback;//Used only if we cannot find the maya default material /// _mayaFacesSelectionMaterialPath is a path to a Hydra material used to display the faces selection on nodes when being in components selection mode static SdfPath _mayaFacesSelectionMaterialPath; diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.h b/lib/mayaHydra/mayaPlugin/renderOverride.h index cfcc5215f..79a7140ad 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.h +++ b/lib/mayaHydra/mayaPlugin/renderOverride.h @@ -66,10 +66,7 @@ #include #include -#include -#include #include -#include #include #include diff --git a/lib/mayaHydra/mayaPlugin/renderOverrideUtils.h b/lib/mayaHydra/mayaPlugin/renderOverrideUtils.h index 731dff012..63f38daad 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverrideUtils.h +++ b/lib/mayaHydra/mayaPlugin/renderOverrideUtils.h @@ -20,8 +20,6 @@ #include -#include - PXR_NAMESPACE_OPEN_SCOPE class MayaHydraPreRender : public MHWRender::MSceneRender diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaSceneFlattening.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaSceneFlattening.cpp index 7c66d63d3..088d881bf 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaSceneFlattening.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaSceneFlattening.cpp @@ -20,7 +20,8 @@ #include -#include +#include +#include #include diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaUsdUfeItems.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaUsdUfeItems.cpp index 1b6a673ca..7d595bdc4 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaUsdUfeItems.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testMayaUsdUfeItems.cpp @@ -19,8 +19,6 @@ #include -#include - #include PXR_NAMESPACE_USING_DIRECTIVE