Skip to content

Commit

Permalink
ArnoldShaderUI : Fix Imager metadata support for Arnold 7.3
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
murraystevenson authored and johnhaddon committed Jul 31, 2024
1 parent 9c929e0 commit 0a4e5b0
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 2 deletions.
5 changes: 5 additions & 0 deletions Changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ Improvements

- SetExpressions : Set Expressions containing only whitespace characters are now treated as empty rather than producing an error.

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)
========

Expand Down
2 changes: 1 addition & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
7 changes: 6 additions & 1 deletion python/GafferArnoldUI/ArnoldShaderUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) )
Expand Down
25 changes: 25 additions & 0 deletions python/GafferArnoldUITest/ArnoldShaderUITest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 0a4e5b0

Please sign in to comment.