From b10d665663a1d3e2aff17068eca7265270c33096 Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:56:04 -0700 Subject: [PATCH] ArnoldShaderUI : Fix Imager metadata support for Arnold 7.3 The change of node type from 'driver' to 'imager' in Arnold 7.3 meant that we were filtering out the imager entries from `gaffer.mtd` and then not attempting to translate their metadata in ArnoldShaderUI. --- Changes.md | 3 +++ SConstruct | 2 +- python/GafferArnoldUI/ArnoldShaderUI.py | 7 +++++- .../GafferArnoldUITest/ArnoldShaderUITest.py | 25 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Changes.md b/Changes.md index ed1e4e2d256..0b7d376770f 100644 --- a/Changes.md +++ b/Changes.md @@ -1,7 +1,10 @@ 1.4.x.x (relative to 1.4.10.0) ======= +Fixes +----- +- Arnold : Fixed bug preventing UI metadata for Imagers from being loaded for Arnold 7.3. 1.4.10.0 (relative to 1.4.9.0) ======== diff --git a/SConstruct b/SConstruct index 1df746a80cd..f0f2d27eeb7 100644 --- a/SConstruct +++ b/SConstruct @@ -972,7 +972,7 @@ if env["ARNOLD_ROOT"] : shell = True ) - nodeDefRegex = re.compile( r"\s*([a-zA-Z0-9_]+)\s+(driver|color_manager|driver|filter|light|operator|options|override|shader|shape)" ) + nodeDefRegex = re.compile( r"\s*([a-zA-Z0-9_]+)\s+(driver|color_manager|driver|filter|imager|light|operator|options|override|shader|shape)" ) nodes = set() for line in kickOutput.split( "\n" ) : m = nodeDefRegex.match( line ) diff --git a/python/GafferArnoldUI/ArnoldShaderUI.py b/python/GafferArnoldUI/ArnoldShaderUI.py index 2efd0196230..3720182d6e1 100644 --- a/python/GafferArnoldUI/ArnoldShaderUI.py +++ b/python/GafferArnoldUI/ArnoldShaderUI.py @@ -461,9 +461,14 @@ def addActivator( activator ) : if value is not None : __metadata[paramPath][gafferKey] = value +if [ int( x ) for x in arnold.AiGetVersion()[:3] ] < [ 7, 3, 1 ] : + __AI_NODE_IMAGER = arnold.AI_NODE_DRIVER +else : + __AI_NODE_IMAGER = arnold.AI_NODE_IMAGER + with IECoreArnold.UniverseBlock( writable = False ) : - nodeIt = arnold.AiUniverseGetNodeEntryIterator( arnold.AI_NODE_SHADER | arnold.AI_NODE_LIGHT | arnold.AI_NODE_COLOR_MANAGER | arnold.AI_NODE_DRIVER ) + nodeIt = arnold.AiUniverseGetNodeEntryIterator( arnold.AI_NODE_SHADER | arnold.AI_NODE_LIGHT | arnold.AI_NODE_COLOR_MANAGER | __AI_NODE_IMAGER ) while not arnold.AiNodeEntryIteratorFinished( nodeIt ) : __translateNodeMetadata( arnold.AiNodeEntryIteratorGetNext( nodeIt ) ) diff --git a/python/GafferArnoldUITest/ArnoldShaderUITest.py b/python/GafferArnoldUITest/ArnoldShaderUITest.py index 349a9420faa..04c6c9c5b58 100644 --- a/python/GafferArnoldUITest/ArnoldShaderUITest.py +++ b/python/GafferArnoldUITest/ArnoldShaderUITest.py @@ -127,6 +127,31 @@ def testLightMetadata( self ) : Gaffer.Metadata.value( light["parameters"]["format"], "presetNames" ), ) + def testImagerMetadata( self ) : + + shader = GafferArnold.ArnoldShader() + shader.loadShader( "imager_white_balance" ) + + self.assertEqual( + Gaffer.Metadata.value( shader["parameters"]["mode"], "nodule:type" ), + "" + ) + + self.assertEqual( + Gaffer.Metadata.value( shader["parameters"]["mode"], "plugValueWidget:type" ), + "GafferUI.PresetsPlugValueWidget" + ) + + self.assertEqual( + Gaffer.Metadata.value( shader["parameters"]["mode"], "presetNames" ), + IECore.StringVectorData( [ "illuminant", "temperature", "custom" ] ), + ) + + self.assertEqual( + Gaffer.Metadata.value( shader["parameters"]["mode"], "presetValues" ), + Gaffer.Metadata.value( shader["parameters"]["mode"], "presetNames" ), + ) + def testUserDefaultMetadata( self ) : cacheFilePath = self.temporaryDirectory() / "testShaderUserDefaults.scc"