diff --git a/cmake/modules/FindUSD.cmake b/cmake/modules/FindUSD.cmake index 1b75cdeb4..99960684d 100644 --- a/cmake/modules/FindUSD.cmake +++ b/cmake/modules/FindUSD.cmake @@ -107,23 +107,6 @@ find_library(USD_LIBRARY get_filename_component(USD_LIBRARY_DIR ${USD_LIBRARY} DIRECTORY) -# Get the boost version from the one built with USD -if(USD_INCLUDE_DIR) - file(GLOB _USD_VERSION_HPP_FILE "${USD_INCLUDE_DIR}/boost-*/boost/version.hpp") - list(LENGTH _USD_VERSION_HPP_FILE found_one) - if(${found_one} STREQUAL "1") - list(GET _USD_VERSION_HPP_FILE 0 USD_VERSION_HPP) - file(STRINGS - "${USD_VERSION_HPP}" - _usd_tmp - REGEX "#define BOOST_VERSION .*$") - string(REGEX MATCH "[0-9]+" USD_BOOST_VERSION ${_usd_tmp}) - unset(_usd_tmp) - unset(_USD_VERSION_HPP_FILE) - unset(USD_VERSION_HPP) - endif() -endif() - # See if MaterialX shaders with color4 inputs exist natively in Sdr: # Not yet in a tagged USD version: https://github.com/PixarAnimationStudios/USD/pull/1894 set(USD_HAS_COLOR4_SDR_SUPPORT FALSE CACHE INTERNAL "USD.Sdr.PropertyTypes.Color4") diff --git a/lib/mayaHydra/hydraExtensions/CMakeLists.txt b/lib/mayaHydra/hydraExtensions/CMakeLists.txt index 48cde0c4c..0dcee0208 100644 --- a/lib/mayaHydra/hydraExtensions/CMakeLists.txt +++ b/lib/mayaHydra/hydraExtensions/CMakeLists.txt @@ -55,7 +55,6 @@ target_include_directories(${TARGET_NAME} target_include_directories(${TARGET_NAME} PUBLIC ${PYTHON_INCLUDE_DIR} - ${BOOST_INCLUDE_DIR} ${CMAKE_BINARY_DIR}/include PRIVATE $<$:${UFE_INCLUDE_DIR}> diff --git a/lib/mayaHydra/hydraExtensions/adapters/lightAdapter.cpp b/lib/mayaHydra/hydraExtensions/adapters/lightAdapter.cpp index 390dbc544..845be7eac 100644 --- a/lib/mayaHydra/hydraExtensions/adapters/lightAdapter.cpp +++ b/lib/mayaHydra/hydraExtensions/adapters/lightAdapter.cpp @@ -154,7 +154,12 @@ VtValue MayaHydraLightAdapter::Get(const TfToken& key) MFnLight mayaLight(GetDagPath()); GlfSimpleLight light; const auto color = mayaLight.color(); - const auto intensity = mayaLight.intensity(); + auto intensity = mayaLight.intensity(); +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + if( LightType() == HdPrimTypeTokens->simpleLight){ + intensity /= M_PI; + } +#endif MPoint pt(0.0, 0.0, 0.0, 1.0); const auto inclusiveMatrix = GetDagPath().inclusiveMatrix(); const auto position = pt * inclusiveMatrix; @@ -232,7 +237,13 @@ VtValue MayaHydraLightAdapter::GetLightParamValue(const TfToken& paramName) const auto color = light.color(); return VtValue(GfVec3f(color.r, color.g, color.b)); } else if (paramName == HdLightTokens->intensity) { - return VtValue(light.intensity()); + auto intensity = light.intensity(); +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + if( LightType() == HdPrimTypeTokens->simpleLight){ + intensity /= M_PI; + } +#endif + return VtValue(intensity); } else if (paramName == HdLightTokens->exposure) { return VtValue(0.0f); } else if (paramName == HdLightTokens->normalize) { diff --git a/lib/mayaHydra/hydraExtensions/adapters/materialNetworkConverter.cpp b/lib/mayaHydra/hydraExtensions/adapters/materialNetworkConverter.cpp index fcad6cf21..d7b104407 100644 --- a/lib/mayaHydra/hydraExtensions/adapters/materialNetworkConverter.cpp +++ b/lib/mayaHydra/hydraExtensions/adapters/materialNetworkConverter.cpp @@ -144,7 +144,11 @@ TfToken GetOutputName(const HdMaterialNode& material, SdfValueTypeName type) auto addMatchingOutputs = [&](SdfValueTypeName matchingType) { for (const auto& outName : outputNames) { auto* sdrInfo = sdrNode->GetShaderOutput(outName); +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + if (sdrInfo && sdrInfo->GetTypeAsSdfType().GetSdfType() == matchingType) { +#else if (sdrInfo && sdrInfo->GetTypeAsSdfType().first == matchingType) { +#endif validOutputs.push_back(outName); } } @@ -1246,7 +1250,12 @@ const MayaHydraShaderParams& MayaHydraMaterialNetworkConverter::GetPreviewShader continue; } _previewShaderParams.emplace_back( - inputName, property->GetDefaultValue(), property->GetTypeAsSdfType().first); + inputName, property->GetDefaultValue(), +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + property->GetTypeAsSdfType().GetSdfType()); +#else + property->GetTypeAsSdfType().first); +#endif } std::sort( _previewShaderParams.begin(), diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index f17ac9e46..cab1faad6 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -524,6 +524,10 @@ void MtohRenderOverride::_DetectMayaDefaultLighting(const MHWRender::MDrawContex if (hasDirection && !hasPosition) { +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + intensity /= M_PI;//Is a HdPrimTypeTokens->simpleLight +#endif + // Note for devs : if you update more parameters in the default light, don't forget // to update MtohDefaultLightDelegate::SetDefaultLight and MayaHydraSceneIndex::SetDefaultLight, currently there are only 3 : // position, diffuse, specular diff --git a/test/lib/mayaUsd/render/mayaToHydra/FlowViewportAPITest/usd_2411+/filter_VP2AndThenBackToStorm_MovedSphereUnFiltered.png b/test/lib/mayaUsd/render/mayaToHydra/FlowViewportAPITest/usd_2411+/filter_VP2AndThenBackToStorm_MovedSphereUnFiltered.png new file mode 100644 index 000000000..019bfac3c Binary files /dev/null and b/test/lib/mayaUsd/render/mayaToHydra/FlowViewportAPITest/usd_2411+/filter_VP2AndThenBackToStorm_MovedSphereUnFiltered.png differ diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/usd_2411+/loadingFootPrintScene.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/usd_2411+/loadingFootPrintScene.png new file mode 100644 index 000000000..97dfe72ae Binary files /dev/null and b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/usd_2411+/loadingFootPrintScene.png differ diff --git a/test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/usd_2411+/sceneLoaded.png b/test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/usd_2411+/sceneLoaded.png new file mode 100644 index 000000000..3e98dd048 Binary files /dev/null and b/test/lib/mayaUsd/render/mayaToHydra/MayaDefaultMaterialTest/usd_2411+/sceneLoaded.png differ diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/IsolateSelectTest/usd_2411+/singleViewportIsolateSelectCylinder1.png b/test/lib/mayaUsd/render/mayaToHydra/cpp/IsolateSelectTest/usd_2411+/singleViewportIsolateSelectCylinder1.png new file mode 100644 index 000000000..1150384ec Binary files /dev/null and b/test/lib/mayaUsd/render/mayaToHydra/cpp/IsolateSelectTest/usd_2411+/singleViewportIsolateSelectCylinder1.png differ diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testIsolateSelect.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testIsolateSelect.py index 66ce4191e..769a621aa 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testIsolateSelect.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testIsolateSelect.py @@ -53,6 +53,14 @@ class TestIsolateSelect(mtohUtils.MayaHydraBaseTestCase): _requiredPlugins = ['mayaHydraCppTests', 'mayaHydraFlowViewportAPILocator'] + imageVersion = None + + @classmethod + def setUpClass(cls): + super(TestIsolateSelect, cls).setUpClass() + if cls._usdVersion >= (0, 24, 11): + cls.imageVersion = 'usd_2411+' + def setupScene(self): proxyShapePathStr = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() stage = mayaUsd.lib.GetPrim(proxyShapePathStr).GetStage() @@ -320,9 +328,9 @@ def test_isolateSelectMultiViewport(self): cmds.select(clear=1) cmds.refresh() - - self.assertSnapshotClose("singleViewportIsolateSelectCylinder1.png", 0.1, 2) - + #Has a different version for usd 24.11+ + self.assertSnapshotClose("singleViewportIsolateSelectCylinder1.png", 0.1, 2, self.imageVersion) + # Switch to four-up viewport mode. Set the renderer in each new # viewport to be Hydra Storm. Viewport 4 is already set. cmds.FourViewLayout() diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp index 520d6bbc6..6477efed3 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp @@ -32,6 +32,9 @@ #include #include #include +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + #include +#endif #include #include @@ -240,7 +243,11 @@ void SceneIndexInspector::_WriteLeafDataSource( = "SampledDataSource -> " + sampledDataSource->GetValue(0).GetTypeName(); } else if ( auto extComputationCallbackDataSource +#if defined(HD_API_VERSION) && HD_API_VERSION >= 74 // For USD 24.11+ + = HdExtComputationCpuCallbackDataSource::Cast(dataSource)) { +#else = HdExtComputationCallbackDataSource::Cast(dataSource)) { +#endif dataSourceDescription = "ExtComputationCallbackDataSource"; } else { dataSourceDescription = "Unidentified data source type"; diff --git a/test/lib/mayaUsd/render/mayaToHydra/testDataProducerSelHighlight.py b/test/lib/mayaUsd/render/mayaToHydra/testDataProducerSelHighlight.py index e32659875..a51eacc00 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testDataProducerSelHighlight.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testDataProducerSelHighlight.py @@ -110,8 +110,11 @@ def test_UsdKeepSelectionHighlighting(self): self.assertSnapshotClose("Storm_Wireframe_AllSelected.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) #Switch to bounding box display mode, we should keep the selected items and their color + #For this snapshot and only for it, we need to modify the default lighting and reset it after the snapshot cmds.modelEditor(panel, edit=True, displayAppearance="boundingBox") + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("Storm_BoundingBox_AllSelected.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() #Switch to wireframe on shaded display mode, we should keep the selected items and their color cmds.modelEditor(panel, edit=True, displayAppearance="smoothShaded") diff --git a/test/lib/mayaUsd/render/mayaToHydra/testFlowPluginsHierarchicalProperties.py b/test/lib/mayaUsd/render/mayaToHydra/testFlowPluginsHierarchicalProperties.py index 51fae30f6..c87ab6bba 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testFlowPluginsHierarchicalProperties.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testFlowPluginsHierarchicalProperties.py @@ -77,11 +77,17 @@ def test_Authoring_Locator(self): self.assertSnapshotClose("authoring_locator_visibility_off.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) # Check that updating a parent's visibility works after creation cmds.setAttr(locatorGrandParent + ".visibility", True) + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("authoring_locator_visibility_on.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() + # Check that changing the visibility on the shape itself works cmds.setAttr(locatorShape + ".visibility", False) self.assertSnapshotClose("authoring_locator_visibility_off.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) # Restore visibility + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() cmds.setAttr(locatorShape + ".visibility", True) self.assertSnapshotClose("authoring_locator_visibility_on.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) @@ -91,12 +97,16 @@ def test_Authoring_Locator(self): # Change the shape's transform directly cmds.xform(cmds.listRelatives(locatorShape, parent=True)[0], translation=[-3,2,-1], rotation=[-15,10,-5], scale=[-2.5, 2.0, -1.5]) self.assertSnapshotClose("authoring_locator_shapeTransformChanged.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() def test_Authoring_UsdStage(self): self.setBasicCam(10) stageParent, stageShape = self.usdStageSetup() + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() + # Hide/unhide parent cmds.select(clear=True) self.assertSnapshotAndCompareVp2("usdStage_visibility_on.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) @@ -122,6 +132,7 @@ def test_Authoring_UsdStage(self): cmds.xform(cmds.listRelatives(stageShape, parent=True)[0], translation=[-3,2,-1], rotation=[-15,10,-5], scale=[-2.5, 2.0, -1.5]) cmds.select(clear=True) self.assertSnapshotAndCompareVp2("usdStage_shapeTransformChanged.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() def test_Playback_Locator(self): self.setBasicCam(10) @@ -139,12 +150,15 @@ def test_Playback_Locator(self): self.keyframeAttribute(locatorGrandParent, "translateX", 15) cmds.currentTime(0) + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("locator_playback_initial.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) cmds.currentTime(2) self.assertSnapshotClose("locator_playback_translated.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) cmds.currentTime(7) + self.resetDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("locator_playback_hidden.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) def test_Playback_UsdStage(self): @@ -162,6 +176,9 @@ def test_Playback_UsdStage(self): self.keyframeAttribute(stageParent, "visibility", False) self.keyframeAttribute(stageParent, "translateX", 15) + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() + cmds.currentTime(0) self.assertSnapshotClose("usdStage_playback_initial.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) @@ -181,11 +198,14 @@ def test_Playback_UsdStage(self): cmds.currentTime(7) self.assertSnapshotSilhouetteClose("usdStage_playback_hidden.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() def test_UsdStageAnimatedPrim(self): self.setBasicCam(10) stageParent, stageTransform = self.usdStageAnimatedPrimSetup() + #Is needed with usd 24.11 to keep the same images + self.modifyDefaultLightIntensityByUsdVersion() cmds.currentTime(0) self.keyframeAttribute(stageParent, "translateY", 0) @@ -203,6 +223,8 @@ def test_UsdStageAnimatedPrim(self): cmds.select(clear=True) self.assertSnapshotClose("usdStageAnimatedPrim_t" + str(time) + ".png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.resetDefaultLightIntensityByUsdVersion() + self.setViewport2Renderer() for time in checkedTimes: cmds.currentTime(time) diff --git a/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py b/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py index 7add64acd..b0b5e0ed8 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py @@ -37,12 +37,26 @@ class TestFlowViewportAPI(mtohUtils.MayaHydraBaseTestCase): #Subclassing mtohUti IMAGE_DIFF_FAIL_THRESHOLD = 0.1 IMAGE_DIFF_FAIL_PERCENT = 2 + imageVersion = None + + @classmethod + def setUpClass(cls): + super(TestFlowViewportAPI, cls).setUpClass() + if cls._usdVersion >= (0, 24, 11): + cls.imageVersion = 'usd_2411+' @classmethod def tearDownClass(cls): #Finish by a File New command to check that it's not crashing when cleaning up everything' cmds.file(new=True, force=True) + #This function is called before each test is launched + def setUp(self): + #call parent function first + super(TestFlowViewportAPI, self).setUp() + #modify light intensity for usd 24.11+ + self.modifyDefaultLightIntensityByUsdVersion() + def setupScene(self): self.setHdStormRenderer() @@ -184,7 +198,7 @@ def test_FilteringPrimitives(self): self.setHdStormRenderer() cmds.setAttr(sphereShape + '.subdivisionsAxis', 30) #Unfilter the prim cmds.refresh() - self.assertSnapshotClose("filter_VP2AndThenBackToStorm_MovedSphereUnFiltered.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + self.assertSnapshotClose("filter_VP2AndThenBackToStorm_MovedSphereUnFiltered.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT, self.imageVersion) #Test Cube grids parameters def test_CubeGrid(self): diff --git a/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py b/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py index 288dcd61f..7f49a30eb 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py @@ -32,6 +32,20 @@ class TestFootPrintNode(mtohUtils.MayaHydraBaseTestCase): #Subclassing mtohUtils IMAGE_DIFF_FAIL_THRESHOLD = 0.01 IMAGE_DIFF_FAIL_PERCENT = 0.1 + imageVersion = None + + @classmethod + def setUpClass(cls): + super(TestFootPrintNode, cls).setUpClass() + if cls._usdVersion >= (0, 24, 11): + cls.imageVersion = 'usd_2411+' + + #This function is called before each test is launched + def setUp(self): + #call parent function first + super(TestFootPrintNode, self).setUp() + #modify light intensity for usd 24.11+ + self.modifyDefaultLightIntensityByUsdVersion() def tearDown(self): #is called after each test : finish by a File New command to check that it's not crashing when cleaning up everything' @@ -240,7 +254,8 @@ def test_Load(self): "testFootPrintNode", "testFootPrintNodeSaved.ma") cmds.refresh() - self.assertSnapshotClose("loadingFootPrintScene.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + #using imageVersion as the color is different for this image under usd 24.11+ + self.assertSnapshotClose("loadingFootPrintScene.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT, self.imageVersion) if __name__ == '__main__': fixturesUtils.runTests(globals()) diff --git a/test/lib/mayaUsd/render/mayaToHydra/testMayaDefaultMaterial.py b/test/lib/mayaUsd/render/mayaToHydra/testMayaDefaultMaterial.py index 70836be6f..83d9944b0 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testMayaDefaultMaterial.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testMayaDefaultMaterial.py @@ -28,6 +28,13 @@ class TestMayaDefaultMaterial(mtohUtils.MayaHydraBaseTestCase): #Subclassing mto IMAGE_DIFF_FAIL_THRESHOLD = 0.05 IMAGE_DIFF_FAIL_PERCENT = 1.5 + imageVersion = None + + @classmethod + def setUpClass(cls): + super(TestMayaDefaultMaterial, cls).setUpClass() + if cls._usdVersion >= (0, 24, 11): + cls.imageVersion = 'usd_2411+' def test_MayaDefaultMaterial(self): @@ -39,7 +46,8 @@ def test_MayaDefaultMaterial(self): cmds.refresh() panel = mayaUtils.activeModelPanel() if platform.system() != "Darwin": #Don't do the image comparison on OSX the flow viewport cubes have a lighter pixel look - self.assertSnapshotClose("sceneLoaded" + ".png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) + #This image compare has a special version for usd 24.11+ + self.assertSnapshotClose("sceneLoaded" + ".png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT, self.imageVersion) #Use Default Material cmds.modelEditor(panel, edit=True, useDefaultMaterial=True) diff --git a/test/lib/mayaUsd/render/mayaToHydra/testRefinement.py b/test/lib/mayaUsd/render/mayaToHydra/testRefinement.py index 0488b3c8d..aa7549f03 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testRefinement.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testRefinement.py @@ -24,6 +24,13 @@ class TestRefinement(mtohUtils.MayaHydraBaseTestCase): IMAGEDIFF_FAIL_THRESHOLD = 0.01 IMAGEDIFF_FAIL_PERCENT = 0.1 + #This function is called before each test is launched + def setUp(self): + #call parent function first + super(TestRefinement, self).setUp() + #modify light intensity for usd 24.11+ + self.modifyDefaultLightIntensityByUsdVersion() + def verifySnapshot(self, imageName): cmds.refresh() self.assertSnapshotClose(imageName, diff --git a/test/lib/mayaUsd/render/mayaToHydra/testStagePayloadsReferences.py b/test/lib/mayaUsd/render/mayaToHydra/testStagePayloadsReferences.py index 3cd3e05be..97b3b7658 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testStagePayloadsReferences.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testStagePayloadsReferences.py @@ -142,6 +142,7 @@ def test_UsdStagePayloadsOnTheFly(self): def test_UsdStagePayloadsFromScene(self): from mayaUsd import lib as mayaUsdLib self.loadUsdPayloadScene() + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("payloadSceneLoadedPotA.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) #Change the variant @@ -159,9 +160,11 @@ def test_UsdStagePayloadsFromScene(self): def test_UsdStageReferences(self): self.setUpReferenceScene() + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("referencesSceneCreated.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) self.loadUsdReferencesScene() + self.modifyDefaultLightIntensityByUsdVersion() self.assertSnapshotClose("referencesSceneLoaded.png", self.IMAGE_DIFF_FAIL_THRESHOLD, self.IMAGE_DIFF_FAIL_PERCENT) if __name__ == '__main__': diff --git a/test/lib/mayaUsd/render/mayaToHydra/testStageVariants.py b/test/lib/mayaUsd/render/mayaToHydra/testStageVariants.py index afec074e6..c23ed0837 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testStageVariants.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testStageVariants.py @@ -47,6 +47,9 @@ def test_UsdStageVariants(self): self.assertIsNotNone(modVariant) self.assertEqual(modVariant.GetVariantSelection(), 'OneCube') + #modify light intensity for usd 24.11+ + self.modifyDefaultLightIntensityByUsdVersion() + #Select the USD Cubes to see the selection highlight cubesPath = ufe.Path([ mayaUtils.createUfePathSegment("|variants|variantsShape"), diff --git a/test/lib/mayaUsd/render/mayaToHydra/testTransforms.py b/test/lib/mayaUsd/render/mayaToHydra/testTransforms.py index 7efbf12d9..e5b942adf 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testTransforms.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testTransforms.py @@ -74,6 +74,9 @@ def test_usdPrim(self): parentPrimA = stage.DefinePrim(parentA, 'Xform') childPrimCube = stage.DefinePrim(childCube, 'Cube') + #modify light intensity for usd 24.11+ + self.modifyDefaultLightIntensityByUsdVersion() + self.verifySnapshot("usd_cube_untransformed.png") UsdGeom.XformCommonAPI(childPrimCube).SetScale((2, 1, 2)) @@ -94,6 +97,7 @@ def test_usdPrim(self): UsdGeom.XformCommonAPI(parentPrimA).SetScale((2, 3, 2)) self.verifySnapshot("usd_cube_parent_moved_rotated_scaled.png") + self.resetDefaultLightIntensityByUsdVersion() if __name__ == '__main__': fixturesUtils.runTests(globals()) diff --git a/test/lib/mayaUsd/render/mayaToHydra/testViewportFilters.py b/test/lib/mayaUsd/render/mayaToHydra/testViewportFilters.py index a09780cfa..5488b828e 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testViewportFilters.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testViewportFilters.py @@ -172,7 +172,10 @@ def ikHandleCreator(): cmds.select([joint1, ikHandle], replace=True) self.stackInstances(ikHandleCreator, 50, [0, 0, 0.005]) cmds.select(all=True) + #For this snapshot with usd 24.11+, we need to modify the default lighting and reset it after the snapshot + self.modifyDefaultLightIntensityByUsdVersion() self.checkFilter("ikHandles", kExcludeIkHandles, 5) + self.resetDefaultLightIntensityByUsdVersion() def test_Joints(self): def jointCreator(): @@ -218,7 +221,10 @@ def test_Lights(self): def test_Strokes(self): mayaUtils.openTestScene("testViewportFilters", "strokes.ma") self.setHdStormRenderer() + #For this snapshot with usd 24.11+, we need to modify the default lighting and reset it after the snapshot + self.modifyDefaultLightIntensityByUsdVersion() self.checkFilter("strokes", kExcludeStrokes, 4) + self.resetDefaultLightIntensityByUsdVersion() # TODO : Texture Placements (not working in Hydra as of 2024-05-03) diff --git a/test/testUtils/mtohUtils.py b/test/testUtils/mtohUtils.py index d1c9842fe..84e413017 100644 --- a/test/testUtils/mtohUtils.py +++ b/test/testUtils/mtohUtils.py @@ -24,10 +24,12 @@ import testUtils from imageUtils import ImageDiffingTestCase from testUtils import PluginLoaded +from pxr import Usd import platform import subprocess import sys +import math HD_STORM = "HdStormRendererPlugin" HD_STORM_OVERRIDE = "mayaHydraRenderOverride_" + HD_STORM @@ -52,6 +54,9 @@ class MayaHydraBaseTestCase(unittest.TestCase, ImageDiffingTestCase): _requiredPlugins = [] _pluginsToUnload = [] + #The OpenUSD version + _usdVersion = None + # Unloading mayaHydraFlowViewportAPILocator crashes Maya (HYDRA-1304). # Unloading mtoa succeeds on Linux, but fails on Windows and macOS # with "cannot be unloaded because it is still in use" error. @@ -92,6 +97,9 @@ def setUpClass(cls): if not cmds.pluginInfo(p, q=True, loaded=True): cls._pluginsToUnload.append(p) cmds.loadPlugin(p, quiet=True) + + #Set the usd version + cls._usdVersion = Usd.GetVersion() def setUp(self): # Maya is not closed/reset between each test of a test suite, @@ -138,6 +146,25 @@ def setBasicCam(self, dist=DEFAULT_CAM_DIST): cmds.setAttr('persp.rotate', -30, 45, 0, type='float3') cmds.setAttr('persp.translate', dist, .75 * dist, dist, type='float3') + def setMayaDefaultLightIntensity(self, intensity): + if maya.mel.eval("optionVar -exists defaultLightIntensity"): + maya.mel.eval("optionVar -fv defaultLightIntensity {}".format(intensity)) + if cmds.attributeQuery('defaultLightIntensity', node='hardwareRenderingGlobals', exists=True): + cmds.setAttr('hardwareRenderingGlobals.defaultLightIntensity', intensity) + + def modifyDefaultLightIntensityByUsdVersion(self): + #Add any new case here + if self._usdVersion >= (0, 24, 11): + #For Usd 24.11+ set the default light intensity to PI instead of 1.0 to counter balance the changes in usd 24.11 + #The original setUp() function sets the default light to 1.0 + self.setMayaDefaultLightIntensity(math.pi) + + def resetDefaultLightIntensityByUsdVersion(self): + #Add any case for here + if self._usdVersion >= (0, 24, 11): + #For Usd 24.11+ reset the default light intensity to 1 instead of PI to counter balance the changes in usd 24.11 + self.setMayaDefaultLightIntensity(1.0) + def makeCubeScene(self, camDist=DEFAULT_CAM_DIST): mayaUtils.openNewScene() self.cubeTrans = cmds.polyCube()[0]