Skip to content

USDMeshLight - #7098

Open
ericmehl wants to merge 15 commits into
1.7_maintenancefrom
usdMeshLight
Open

USDMeshLight#7098
ericmehl wants to merge 15 commits into
1.7_maintenancefrom
usdMeshLight

Conversation

@ericmehl

Copy link
Copy Markdown
Contributor

This is a continuation of #6970, but this PR comes from the GafferHQ repo so it can run unit tests on Arnold and RenderMan.

This adds USDMeshLight support for Arnold and RenderMan. The USD spec, in the default mode, calls for taking the mesh light color texture from the surface shader, if one exists and multiplying it with the light color. There are a couple of other simpler modes I haven't implemented yet, but I can add those in a follow-up PR.

There's also new support in this PR for visualising mesh light textures using the existing renderer-specific texture registration system.

Checklist

  • I have read the contribution guidelines.
  • I have updated the documentation, if applicable.
  • I have tested my change(s) in the test suite, and added new test cases where necessary.
  • My code follows the Gaffer project's prevailing coding style and conventions.

@ericmehl ericmehl mentioned this pull request Aug 13, 2026
4 tasks

@johnhaddon johnhaddon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Eric!

I've made a few comments inline, but just small stuff.

Looking at the bigger picture, I think it's really important that this PR doesn't change behaviour for existing renderer-specific mesh lights. I reviewed pretty closely in that regard, but if you could confirm that is the intention that would be great (we likely discussed this already, but I'm a little fuzzy).

In addition to the ShaderNetworkAlgo tests, I think it would be valuable to have some image-based tests in RenderTest, that will naturally apply to all subclassed tests and give us coverage for all renderers. That'll help keep us honest in future.

I made my own little contact-sheet of various setups to compare our implementation across different renderers and to compare to RenderMan and Arnold in Hydra. I think you have something similar at your end, but I'm here's mine in case it's useful at all :

Details
import Gaffer
import GafferArnold
import GafferCycles
import GafferDelight
import GafferDispatch
import GafferImage
import GafferOSL
import GafferRenderMan
import GafferScene
import GafferUSD
import IECore
import imath

Gaffer.Metadata.registerValue( parent, "serialiser:milestoneVersion", 1, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:majorVersion", 7, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:minorVersion", 0, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:patchVersion", 0, persistent=False )

__children = {}

parent["variables"].addChild( Gaffer.NameValuePlug( "image:catalogue:port", Gaffer.IntPlug( "value", defaultValue = 0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "imageCataloguePort", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
parent["variables"].addChild( Gaffer.NameValuePlug( "project:name", Gaffer.StringPlug( "value", defaultValue = 'default', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "projectName", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
parent["variables"].addChild( Gaffer.NameValuePlug( "project:rootDirectory", Gaffer.StringPlug( "value", defaultValue = '$HOME/gaffer/projects/${project:name}', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "projectRootDirectory", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
parent["variables"].addChild( Gaffer.NameValuePlug( "renderPass", Gaffer.StringPlug( "value", defaultValue = '', ), "renderPass", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["openColorIO"] = GafferImage.OpenColorIOConfigPlug( "openColorIO", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, )
parent.addChild( __children["openColorIO"] )
__children["defaultFormat"] = GafferImage.FormatPlug( "defaultFormat", defaultValue = GafferImage.Format( 1920, 1080, 1.000 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, )
parent.addChild( __children["defaultFormat"] )
__children["Plane"] = GafferScene.Plane( "Plane" )
parent.addChild( __children["Plane"] )
__children["Plane"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["USDMeshLight"] = GafferUSD.USDMeshLight( "USDMeshLight" )
parent.addChild( __children["USDMeshLight"] )
__children["USDMeshLight"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["PathFilter"] = GafferScene.PathFilter( "PathFilter" )
parent.addChild( __children["PathFilter"] )
__children["PathFilter"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["UsdPreviewSurface"] = GafferUSD.USDShader( "UsdPreviewSurface" )
parent.addChild( __children["UsdPreviewSurface"] )
__children["UsdPreviewSurface"].loadShader( "UsdPreviewSurface" )
__children["UsdPreviewSurface"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["SphereLight"] = GafferUSD.USDLight( "SphereLight" )
parent.addChild( __children["SphereLight"] )
__children["SphereLight"].loadShader( "SphereLight" )
__children["SphereLight"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Plane1"] = GafferScene.Plane( "Plane1" )
parent.addChild( __children["Plane1"] )
__children["Plane1"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment"] = GafferScene.ShaderAssignment( "ShaderAssignment" )
parent.addChild( __children["ShaderAssignment"] )
__children["ShaderAssignment"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Parent"] = GafferScene.Parent( "Parent" )
parent.addChild( __children["Parent"] )
__children["Parent"]["children"].resize( 3 )
__children["Parent"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Camera"] = GafferScene.Camera( "Camera" )
parent.addChild( __children["Camera"] )
__children["Camera"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["StandardOptions"] = GafferScene.StandardOptions( "StandardOptions" )
parent.addChild( __children["StandardOptions"] )
__children["StandardOptions"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"] = GafferScene.Catalogue( "Catalogue" )
parent.addChild( __children["Catalogue"] )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image2", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image3", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image4", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image5", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image6", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image7", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image8", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image9", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image10", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image11", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image12", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image13", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image14", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image15", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image16", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image17", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image18", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image19", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image20", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image21", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image22", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image23", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image24", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image25", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image26", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image27", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image28", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image29", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image30", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image31", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image32", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image33", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image34", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image35", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image36", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image37", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image38", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image39", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image40", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image41", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image42", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"]["images"].addChild( GafferScene.Catalogue.Image( "Image43", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Catalogue"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveRender"] = GafferScene.InteractiveRender( "InteractiveRender" )
parent.addChild( __children["InteractiveRender"] )
__children["InteractiveRender"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ArnoldOptions"] = GafferArnold.ArnoldOptions( "ArnoldOptions" )
parent.addChild( __children["ArnoldOptions"] )
__children["ArnoldOptions"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment2"] = GafferScene.ShaderAssignment( "ShaderAssignment2" )
parent.addChild( __children["ShaderAssignment2"] )
__children["ShaderAssignment2"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ArnoldSurface"] = GafferArnold.ArnoldShader( "ArnoldSurface" )
parent.addChild( __children["ArnoldSurface"] )
__children["ArnoldSurface"].loadShader( "standard_surface" )
__children["ArnoldSurface"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["PxrChecker1"] = GafferOSL.OSLShader( "PxrChecker1" )
parent.addChild( __children["PxrChecker1"] )
__children["PxrChecker1"].loadShader( "PxrChecker" )
__children["PxrChecker1"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Node"] = Gaffer.Node( "Node" )
parent.addChild( __children["Node"] )
__children["Node"]["user"].addChild( Gaffer.Color3fPlug( "surfaceColor", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Node"]["user"].addChild( Gaffer.Color3fPlug( "lightColor", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Node"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["SurfaceTextureTweaks"] = GafferScene.ShaderTweaks( "SurfaceTextureTweaks" )
parent.addChild( __children["SurfaceTextureTweaks"] )
__children["SurfaceTextureTweaks"]["tweaks"].addChild( Gaffer.TweakPlug( name = "tweak1", valuePlug = Gaffer.Color3fPlug( "value", defaultValue = imath.Color3f( 1, 1, 0 ), ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["SurfaceTextureTweaks"]["tweaks"].addChild( Gaffer.TweakPlug( name = "tweak0", valuePlug = Gaffer.Color3fPlug( "value", defaultValue = imath.Color3f( 1, 1, 0 ), ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["SurfaceTextureTweaks"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment3"] = GafferScene.ShaderAssignment( "ShaderAssignment3" )
parent.addChild( __children["ShaderAssignment3"] )
__children["ShaderAssignment3"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RenderManSurface"] = GafferRenderMan.RenderManShader( "RenderManSurface" )
parent.addChild( __children["RenderManSurface"] )
__children["RenderManSurface"].loadShader( "PxrSurface" )
__children["RenderManSurface"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment4"] = GafferScene.ShaderAssignment( "ShaderAssignment4" )
parent.addChild( __children["ShaderAssignment4"] )
__children["ShaderAssignment4"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["CyclesSurface"] = GafferCycles.CyclesShader( "CyclesSurface" )
parent.addChild( __children["CyclesSurface"] )
__children["CyclesSurface"].loadShader( "principled_bsdf" )
__children["CyclesSurface"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment5"] = GafferScene.ShaderAssignment( "ShaderAssignment5" )
parent.addChild( __children["ShaderAssignment5"] )
__children["ShaderAssignment5"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["DelightSurface"] = GafferOSL.OSLShader( "DelightSurface" )
parent.addChild( __children["DelightSurface"] )
__children["DelightSurface"].loadShader( "dlStandard" )
__children["DelightSurface"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"] = GafferScene.Outputs( "InteractiveOutputs" )
parent.addChild( __children["InteractiveOutputs"] )
__children["InteractiveOutputs"]["outputs"].addChild( Gaffer.ValuePlug( "output1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "name", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.BoolPlug( "active", defaultValue = True, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "fileName", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "type", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "data", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"].addChild( Gaffer.CompoundDataPlug( "parameters", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "driverType", Gaffer.StringPlug( "value", defaultValue = 'ClientDisplayDriver', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "driverType", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "displayHost", Gaffer.StringPlug( "value", defaultValue = 'localhost', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "displayHost", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "displayPort", Gaffer.StringPlug( "value", defaultValue = '${image:catalogue:port}', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "displayPort", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "remoteDisplayType", Gaffer.StringPlug( "value", defaultValue = 'GafferScene::GafferDisplayDriver', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "remoteDisplayType", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "quantize", Gaffer.IntVectorDataPlug( "value", defaultValue = IECore.IntVectorData( [ 0, 0, 0, 0 ] ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "quantize", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "catalogue:imageName", Gaffer.StringPlug( "value", defaultValue = 'Image', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "catalogue_imageName", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["InteractiveOutputs"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["CyclesOptions"] = GafferCycles.CyclesOptions( "CyclesOptions" )
parent.addChild( __children["CyclesOptions"] )
__children["CyclesOptions"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"] = GafferDispatch.Wedge( "RendererWedge" )
parent.addChild( __children["RendererWedge"] )
__children["RendererWedge"]["preTasks"].resize( 2 )
__children["RendererWedge"]["ramp"].clearPoints()
__children["RendererWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p0", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"]["ramp"]["p0"].addChild( Gaffer.FloatPlug( "x", defaultValue = 0.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"]["ramp"]["p0"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"]["ramp"]["p1"].addChild( Gaffer.FloatPlug( "x", defaultValue = 1.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"]["ramp"]["p1"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 1, 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererWedge"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Render"] = GafferScene.Render( "Render" )
parent.addChild( __children["Render"] )
__children["Render"]["preTasks"].resize( 2 )
__children["Render"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"] = GafferScene.Outputs( "Outputs" )
parent.addChild( __children["Outputs"] )
__children["Outputs"]["outputs"].addChild( Gaffer.ValuePlug( "output1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "name", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.BoolPlug( "active", defaultValue = True, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "fileName", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "type", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.StringPlug( "data", defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"].addChild( Gaffer.CompoundDataPlug( "parameters", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outputs"]["outputs"]["output1"]["parameters"].addChild( Gaffer.NameValuePlug( "quantize", Gaffer.IntVectorDataPlug( "value", defaultValue = IECore.IntVectorData( [ 0, 0, 0, 0 ] ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ), "quantize", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["Outputs"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["LocalDispatcher1"] = GafferDispatch.LocalDispatcher( "LocalDispatcher1" )
parent.addChild( __children["LocalDispatcher1"] )
__children["LocalDispatcher1"]["tasks"].resize( 2 )
__children["LocalDispatcher1"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ContextQuery"] = Gaffer.ContextQuery( "ContextQuery" )
parent.addChild( __children["ContextQuery"] )
__children["ContextQuery"].addQuery( Gaffer.StringPlug( "value", defaultValue = '', ) )
__children["ContextQuery"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ImageReader"] = GafferImage.ImageReader( "ImageReader" )
parent.addChild( __children["ImageReader"] )
__children["ImageReader"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["RendererContactSheet"] = GafferImage.ContactSheet( "RendererContactSheet" )
parent.addChild( __children["RendererContactSheet"] )
__children["RendererContactSheet"]["in"].resize( 2 )
__children["RendererContactSheet"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["LightTextureTweaks"] = GafferScene.ShaderTweaks( "LightTextureTweaks" )
parent.addChild( __children["LightTextureTweaks"] )
__children["LightTextureTweaks"]["tweaks"].addChild( Gaffer.TweakPlug( name = "tweak0", valuePlug = Gaffer.Color3fPlug( "value", defaultValue = imath.Color3f( 0, 1, 1 ), ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["LightTextureTweaks"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["PxrChecker2"] = GafferOSL.OSLShader( "PxrChecker2" )
parent.addChild( __children["PxrChecker2"] )
__children["PxrChecker2"].loadShader( "PxrChecker" )
__children["PxrChecker2"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["WedgeContactSheet"] = GafferImage.ContactSheet( "WedgeContactSheet" )
parent.addChild( __children["WedgeContactSheet"] )
__children["WedgeContactSheet"]["in"].resize( 2 )
__children["WedgeContactSheet"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ContextVariables"] = Gaffer.ContextVariables( "ContextVariables" )
parent.addChild( __children["ContextVariables"] )
__children["ContextVariables"].setup( GafferScene.ScenePlug( "in", ) )
__children["ContextVariables"]["variables"].addChild( Gaffer.NameValuePlug( "", Gaffer.StringPlug( "value", defaultValue = '', ), True, "member0", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["ContextVariables"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression"] = Gaffer.Expression( "Expression" )
parent.addChild( __children["Expression"] )
__children["Expression"]["__in"].addChild( Gaffer.V2iPlug( "p0", defaultValue = imath.V2i( 3, 3 ), minValue = imath.V2i( 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression"]["__out"].addChild( Gaffer.V2iPlug( "p0", direction = Gaffer.Plug.Direction.Out, defaultValue = imath.V2i( -2147483648, -2147483648 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression1"] = Gaffer.Expression( "Expression1" )
parent.addChild( __children["Expression1"] )
__children["Expression1"]["__in"].addChild( Gaffer.V2iPlug( "p0", defaultValue = imath.V2i( -2147483648, -2147483648 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression1"]["__in"].addChild( Gaffer.V2iPlug( "p1", defaultValue = imath.V2i( 3, 3 ), minValue = imath.V2i( 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression1"]["__out"].addChild( Gaffer.V2iPlug( "p0", direction = Gaffer.Plug.Direction.Out, defaultValue = imath.V2i( -2147483648, -2147483648 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression1"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression2"] = Gaffer.Expression( "Expression2" )
parent.addChild( __children["Expression2"] )
__children["Expression2"]["__in"].addChild( Gaffer.V2iPlug( "p0", defaultValue = imath.V2i( -2147483648, -2147483648 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression2"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["DelightOptions"] = GafferDelight.DelightOptions( "DelightOptions" )
parent.addChild( __children["DelightOptions"] )
__children["DelightOptions"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["SceneWriter"] = GafferScene.SceneWriter( "SceneWriter" )
parent.addChild( __children["SceneWriter"] )
__children["SceneWriter"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["SystemCommand"] = GafferDispatch.SystemCommand( "SystemCommand" )
parent.addChild( __children["SystemCommand"] )
__children["SystemCommand"]["preTasks"].resize( 2 )
__children["SystemCommand"]["substitutions"].addChild( Gaffer.NameValuePlug( "", Gaffer.StringPlug( "value", defaultValue = '', ), True, "member0", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["SystemCommand"]["substitutions"].addChild( Gaffer.NameValuePlug( "", Gaffer.StringPlug( "value", defaultValue = '', ), True, "member1", Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
__children["SystemCommand"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Switch"] = Gaffer.Switch( "Switch" )
parent.addChild( __children["Switch"] )
__children["Switch"].setup( GafferDispatch.TaskNode.TaskPlug( "in", ) )
__children["Switch"]["in"].resize( 3 )
__children["Switch"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["PatternMatch2"] = Gaffer.PatternMatch( "PatternMatch2" )
parent.addChild( __children["PatternMatch2"] )
__children["PatternMatch2"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression3"] = Gaffer.Expression( "Expression3" )
parent.addChild( __children["Expression3"] )
__children["Expression3"]["__in"].addChild( Gaffer.CompoundObjectPlug( "p0", defaultValue = IECore.CompoundObject(), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression3"]["__out"].addChild( Gaffer.StringPlug( "p0", direction = Gaffer.Plug.Direction.Out, defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression3"]["__out"].addChild( Gaffer.StringPlug( "p1", direction = Gaffer.Plug.Direction.Out, defaultValue = '', flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression3"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["LocalDispatcher"] = GafferDispatch.LocalDispatcher( "LocalDispatcher" )
parent.addChild( __children["LocalDispatcher"] )
__children["LocalDispatcher"]["tasks"].resize( 2 )
__children["LocalDispatcher"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"] = GafferDispatch.Wedge( "Wedge" )
parent.addChild( __children["Wedge"] )
__children["Wedge"]["preTasks"].resize( 2 )
__children["Wedge"]["ramp"].clearPoints()
__children["Wedge"]["ramp"].addChild( Gaffer.ValuePlug( "p0", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"]["ramp"]["p0"].addChild( Gaffer.FloatPlug( "x", defaultValue = 0.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"]["ramp"]["p0"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"]["ramp"].addChild( Gaffer.ValuePlug( "p1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"]["ramp"]["p1"].addChild( Gaffer.FloatPlug( "x", defaultValue = 1.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"]["ramp"]["p1"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 1, 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Wedge"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["WedgeSpreadsheet"] = Gaffer.Spreadsheet( "WedgeSpreadsheet" )
parent.addChild( __children["WedgeSpreadsheet"] )
__children["WedgeSpreadsheet"]["rows"].addColumn( Gaffer.BoolPlug( "surfaceTexture", defaultValue = False, ) )
__children["WedgeSpreadsheet"]["rows"].addColumn( Gaffer.BoolPlug( "lightTexture", defaultValue = False, ) )
__children["WedgeSpreadsheet"]["rows"].addColumn( Gaffer.BoolPlug( "surfaceShader", defaultValue = False, ) )
__children["WedgeSpreadsheet"]["rows"].addColumn( Gaffer.BoolPlug( "emission", defaultValue = False, ) )
__children["WedgeSpreadsheet"]["rows"].addRows( 5 )
__children["WedgeSpreadsheet"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"] = GafferDispatch.Wedge( "TextureWedge" )
parent.addChild( __children["TextureWedge"] )
__children["TextureWedge"]["preTasks"].resize( 2 )
__children["TextureWedge"]["ramp"].clearPoints()
__children["TextureWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p0", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"]["ramp"]["p0"].addChild( Gaffer.FloatPlug( "x", defaultValue = 0.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"]["ramp"]["p0"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"]["ramp"]["p1"].addChild( Gaffer.FloatPlug( "x", defaultValue = 1.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"]["ramp"]["p1"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 1, 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["TextureWedge"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"] = GafferDispatch.Wedge( "EmissionWedge" )
parent.addChild( __children["EmissionWedge"] )
__children["EmissionWedge"]["preTasks"].resize( 2 )
__children["EmissionWedge"]["ramp"].clearPoints()
__children["EmissionWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p0", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"]["ramp"]["p0"].addChild( Gaffer.FloatPlug( "x", defaultValue = 0.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"]["ramp"]["p0"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 0, 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"]["ramp"].addChild( Gaffer.ValuePlug( "p1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"]["ramp"]["p1"].addChild( Gaffer.FloatPlug( "x", defaultValue = 1.0, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"]["ramp"]["p1"].addChild( Gaffer.Color3fPlug( "y", defaultValue = imath.Color3f( 1, 1, 1 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["EmissionWedge"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression4"] = Gaffer.Expression( "Expression4" )
parent.addChild( __children["Expression4"] )
__children["Expression4"]["__in"].addChild( Gaffer.StringVectorDataPlug( "p0", defaultValue = IECore.StringVectorData( [  ] ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression4"]["__out"].addChild( Gaffer.IntPlug( "p0", direction = Gaffer.Plug.Direction.Out, defaultValue = 3, minValue = 1, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression4"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression5"] = Gaffer.Expression( "Expression5" )
parent.addChild( __children["Expression5"] )
__children["Expression5"]["__in"].addChild( Gaffer.StringVectorDataPlug( "p0", defaultValue = IECore.StringVectorData( [  ] ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression5"]["__out"].addChild( Gaffer.IntPlug( "p0", direction = Gaffer.Plug.Direction.Out, defaultValue = 3, minValue = 1, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Expression5"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["ShaderAssignment6"] = GafferScene.ShaderAssignment( "ShaderAssignment6" )
parent.addChild( __children["ShaderAssignment6"] )
__children["ShaderAssignment6"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["principled_bsdf"] = GafferCycles.CyclesShader( "principled_bsdf" )
parent.addChild( __children["principled_bsdf"] )
__children["principled_bsdf"].loadShader( "principled_bsdf" )
__children["principled_bsdf"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
parent["variables"]["imageCataloguePort"]["value"].setValue( 40359 )
Gaffer.Metadata.registerValue( parent["variables"]["imageCataloguePort"], 'readOnly', True )
Gaffer.Metadata.registerValue( parent["variables"]["projectName"]["name"], 'readOnly', True )
Gaffer.Metadata.registerValue( parent["variables"]["projectRootDirectory"]["name"], 'readOnly', True )
Gaffer.Metadata.registerValue( parent["variables"]["renderPass"]["name"], 'readOnly', True )
Gaffer.Metadata.registerValue( parent["variables"]["renderPass"]["value"], 'plugValueWidget:type', 'GafferSceneUI.RenderPassEditor._RenderPassPlugValueWidget' )
__children["Plane"]["name"].setValue( 'meshLight' )
__children["Plane"]["__uiPosition"].setValue( imath.V2f( 5.65125275, 34.1672554 ) )
__children["USDMeshLight"]["in"].setInput( __children["ShaderAssignment5"]["out"] )
__children["USDMeshLight"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["USDMeshLight"]["parameters"]["intensity"].setValue( 6.079999923706055 )
__children["USDMeshLight"]["parameters"]["exposure"].setValue( 1.0 )
__children["USDMeshLight"]["parameters"]["color"].setInput( __children["Node"]["user"]["lightColor"] )
__children["USDMeshLight"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -88.1247482 ) )
__children["PathFilter"]["paths"].setValue( IECore.StringVectorData( [ '/meshLight' ] ) )
__children["PathFilter"]["__uiPosition"].setValue( imath.V2f( 67.2909317, 28.4331245 ) )
__children["UsdPreviewSurface"]["__uiPosition"].setValue( imath.V2f( -50.9474144, -137.906052 ) )
__children["SphereLight"]["name"].setValue( 'sphereLight' )
__children["SphereLight"]["parameters"]["enableColorTemperature"].setValue( True )
__children["SphereLight"]["parameters"]["shaping:cone:angle"]["value"].setValue( 25.0 )
__children["SphereLight"]["__uiPosition"].setValue( imath.V2f( 50.9571648, -134.686447 ) )
__children["Plane1"]["transform"]["rotate"].setValue( imath.V3f( 0, 90, 0 ) )
__children["Plane1"]["transform"]["scale"].setValue( imath.V3f( 2.04000235, 2.04000235, 2.04000235 ) )
__children["Plane1"]["__uiPosition"].setValue( imath.V2f( -33.2801781, -129.241989 ) )
__children["ShaderAssignment"]["in"].setInput( __children["Plane1"]["out"] )
__children["ShaderAssignment"]["shader"].setInput( __children["UsdPreviewSurface"]["out"]["surface"] )
__children["ShaderAssignment"]["__uiPosition"].setValue( imath.V2f( -33.2801781, -137.406052 ) )
__children["Parent"]["in"].setInput( __children["ShaderAssignment6"]["out"] )
__children["Parent"]["parent"].setValue( '/' )
__children["Parent"]["children"][0].setInput( __children["LightTextureTweaks"]["out"] )
__children["Parent"]["children"][1].setInput( __children["Camera"]["out"] )
__children["Parent"]["__uiPosition"].setValue( imath.V2f( 5.65125322, -148.175339 ) )
__children["Camera"]["transform"]["translate"].setValue( imath.V3f( 1.54553092, 0.119303122, 1.28027153 ) )
__children["Camera"]["transform"]["rotate"].setValue( imath.V3f( -4.0106988, 60.733532, -2.13443414e-07 ) )
__children["Camera"]["__uiPosition"].setValue( imath.V2f( 33.104538, -134.727173 ) )
__children["StandardOptions"]["in"].setInput( __children["Parent"]["out"] )
__children["StandardOptions"]["options"]["render:camera"]["value"].setValue( '/camera' )
__children["StandardOptions"]["options"]["render:camera"]["enabled"].setValue( True )
__children["StandardOptions"]["options"]["render:manifestFilePath"]["value"].setValue( '${project:rootDirectory}/renders/${script:name}/${renderPass}/renderManifest/renderManifest.####.exr' )
__children["StandardOptions"]["__uiPosition"].setValue( imath.V2f( 5.65125322, -153.839401 ) )
Gaffer.MetadataAlgo.setNumericBookmark( __children["Catalogue"].scriptNode(), 1, __children["Catalogue"] )
__children["Catalogue"]["images"]["Image"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/ed9efebb5775e081d0a6eb63bb5ee1a0.exr' )
__children["Catalogue"]["images"]["Image1"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/ed9efebb5775e081d0a6eb63bb5ee1a0.exr' )
__children["Catalogue"]["images"]["Image2"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/56f6a21c0445fd07dbed1bac5b88ed2c.exr' )
__children["Catalogue"]["images"]["Image3"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/545ac1ecb2ad99cb791a4f8e82709303.exr' )
__children["Catalogue"]["images"]["Image4"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/5aa59303027f1d0bb7e6a3ec9ef2cd16.exr' )
__children["Catalogue"]["images"]["Image5"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/b0ced0bf7112c17e928bf7251eed3686.exr' )
__children["Catalogue"]["images"]["Image6"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/8df5925022f0b3d1ff88a636c9533e80.exr' )
__children["Catalogue"]["images"]["Image7"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/6a5f4370d6aa4aa13457ec4cc07f7daf.exr' )
__children["Catalogue"]["images"]["Image8"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/b0ced0bf7112c17e928bf7251eed3686.exr' )
__children["Catalogue"]["images"]["Image9"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/1e85b038e289f8558d923ac67f1fc2fc.exr' )
__children["Catalogue"]["images"]["Image10"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/2da6b2158690e283dea93bc432897539.exr' )
__children["Catalogue"]["images"]["Image11"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/8b5377f05b604a0adbef9d12c42837ca.exr' )
__children["Catalogue"]["images"]["Image12"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image13"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/f0d6257fa58b4f0a4f3176c682ceb9a8.exr' )
__children["Catalogue"]["images"]["Image14"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image15"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image16"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image17"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/9a73c1ad66b3ad8c45ae969783dbe54a.exr' )
__children["Catalogue"]["images"]["Image18"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/a6f6cd4831c87ef26e70c358345f0a43.exr' )
__children["Catalogue"]["images"]["Image19"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/69b46a3a3774a3e9bea1978731c3bc1e.exr' )
__children["Catalogue"]["images"]["Image20"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/4263609c90e148690751f671416aba4e.exr' )
__children["Catalogue"]["images"]["Image21"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/1b67f1217b3d8a85abf4c65d2ce1d9a8.exr' )
__children["Catalogue"]["images"]["Image22"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/836545122d457ce9bf030068c90321b6.exr' )
__children["Catalogue"]["images"]["Image23"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/dff13b02b08460a641f282a93b6e0fa2.exr' )
__children["Catalogue"]["images"]["Image24"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/2f06de7946af52210e7aaa47e168bde1.exr' )
__children["Catalogue"]["images"]["Image25"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image26"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/95722cb370cffc3dbe1db1d47312aa34.exr' )
__children["Catalogue"]["images"]["Image27"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/190c3312181f30912a6e0267a3c5ef97.exr' )
__children["Catalogue"]["images"]["Image28"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/5da2e61193cdefd280252110ae9f9091.exr' )
__children["Catalogue"]["images"]["Image29"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/c8b4f2bd88632a5c6ddd33e02f85542f.exr' )
__children["Catalogue"]["images"]["Image30"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/c377208323ade87158035a0a20322bf3.exr' )
__children["Catalogue"]["images"]["Image31"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/1010936022478ccf87c544e49f23a59c.exr' )
__children["Catalogue"]["images"]["Image32"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/ff74107ae155c000970116d2ab18a43f.exr' )
__children["Catalogue"]["images"]["Image33"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/ed0548c31130579b47ec32cd6e2a078a.exr' )
__children["Catalogue"]["images"]["Image34"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/e2fd05bd20f89a15f58c68722742f01e.exr' )
__children["Catalogue"]["images"]["Image35"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/9c1cf3890bab582c55bb7aae61e04485.exr' )
__children["Catalogue"]["images"]["Image36"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/29b3949fcff79c7e1904effa4ced3675.exr' )
__children["Catalogue"]["images"]["Image37"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image38"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image39"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/e303a57194bf90f635660afb5bc86c51.exr' )
__children["Catalogue"]["images"]["Image40"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/6a42d7e7553847feed34ca4464a95348.exr' )
__children["Catalogue"]["images"]["Image41"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image42"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["images"]["Image43"]["fileName"].setValue( '/home/john/gaffer/projects/default/catalogues/usdMeshLightTest/979103c62898c7b78f8c86eb82940f6b.exr' )
__children["Catalogue"]["imageIndex"].setValue( 43 )
__children["Catalogue"]["directory"].setValue( '${project:rootDirectory}/catalogues/${script:name}' )
__children["Catalogue"]["__uiPosition"].setValue( imath.V2f( 33.9924698, -164.773331 ) )
__children["InteractiveRender"]["in"].setInput( __children["ContextVariables"]["out"] )
__children["InteractiveRender"]["renderer"].setValue( 'Cycles' )
__children["InteractiveRender"]["__uiPosition"].setValue( imath.V2f( -26.5294228, -221.072693 ) )
__children["ArnoldOptions"]["in"].setInput( __children["DelightOptions"]["out"] )
__children["ArnoldOptions"]["options"]["ai:AA_samples"]["value"].setValue( 5 )
__children["ArnoldOptions"]["options"]["ai:AA_samples"]["enabled"].setValue( True )
__children["ArnoldOptions"]["__uiPosition"].setValue( imath.V2f( 5.65208483, -164.503433 ) )
__children["ShaderAssignment2"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["surfaceShader"] )
__children["ShaderAssignment2"]["in"].setInput( __children["Plane"]["out"] )
__children["ShaderAssignment2"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["ShaderAssignment2"]["shader"].setInput( __children["ArnoldSurface"]["out"] )
__children["ShaderAssignment2"]["__uiPosition"].setValue( imath.V2f( 5.65125275, 13.4886293 ) )
__children["ArnoldSurface"]["parameters"]["emission"].setInput( __children["WedgeSpreadsheet"]["out"]["emission"] )
Gaffer.Metadata.registerValue( __children["ArnoldSurface"]["parameters"]["emission"], 'noduleLayout:visible', True )
__children["ArnoldSurface"]["parameters"]["emission_color"].setInput( __children["Node"]["user"]["surfaceColor"] )
Gaffer.Metadata.registerValue( __children["ArnoldSurface"]["parameters"]["emission_color"], 'noduleLayout:visible', True )
__children["ArnoldSurface"]["__uiPosition"].setValue( imath.V2f( -13.5179386, 13.4886293 ) )
__children["PxrChecker1"]["parameters"]["colorA"].setInput( __children["Node"]["user"]["surfaceColor"] )
__children["PxrChecker1"]["parameters"]["colorB"].setInput( __children["PxrChecker1"]["parameters"]["colorA"] )
__children["PxrChecker1"]["__uiPosition"].setValue( imath.V2f( -27.1362705, -105.380112 ) )
__children["Node"]["user"]["surfaceColor"].setValue( imath.Color3f( 1, 1, 0 ) )
__children["Node"]["user"]["lightColor"].setValue( imath.Color3f( 0, 1, 1 ) )
__children["Node"]["__uiPosition"].setValue( imath.V2f( -69.7285538, 51.0341339 ) )
__children["SurfaceTextureTweaks"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["surfaceTexture"] )
__children["SurfaceTextureTweaks"]["in"].setInput( __children["USDMeshLight"]["out"] )
__children["SurfaceTextureTweaks"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["SurfaceTextureTweaks"]["shader"].setValue( '*surface' )
Gaffer.Metadata.registerValue( __children["SurfaceTextureTweaks"]["shader"], 'presetsPlugValueWidget:isCustom', True )
__children["SurfaceTextureTweaks"]["ignoreMissing"].setValue( True )
__children["SurfaceTextureTweaks"]["tweaks"]["tweak1"]["name"].setValue( 'emission_color' )
__children["SurfaceTextureTweaks"]["tweaks"]["tweak0"]["name"].setValue( 'glowColor' )
Gaffer.Metadata.registerValue( __children["SurfaceTextureTweaks"]["tweaks"]["tweak1"], 'noduleLayout:visible', True )
__children["SurfaceTextureTweaks"]["tweaks"]["tweak1"]["value"].setInput( __children["PxrChecker1"]["out"]["resultRGB"] )
Gaffer.Metadata.registerValue( __children["SurfaceTextureTweaks"]["tweaks"]["tweak0"], 'noduleLayout:visible', True )
__children["SurfaceTextureTweaks"]["tweaks"]["tweak0"]["value"].setInput( __children["PxrChecker1"]["out"]["resultRGB"] )
__children["SurfaceTextureTweaks"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -104.180107 ) )
__children["ShaderAssignment3"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["surfaceShader"] )
__children["ShaderAssignment3"]["in"].setInput( __children["ShaderAssignment2"]["out"] )
__children["ShaderAssignment3"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["ShaderAssignment3"]["shader"].setInput( __children["RenderManSurface"]["out"]["bxdf_out"] )
__children["ShaderAssignment3"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -7.21289301 ) )
__children["RenderManSurface"]["parameters"]["glowGain"].setInput( __children["WedgeSpreadsheet"]["out"]["emission"] )
__children["RenderManSurface"]["parameters"]["glowColor"].setInput( __children["Node"]["user"]["surfaceColor"] )
__children["RenderManSurface"]["__uiPosition"].setValue( imath.V2f( -9.95909882, -7.21289349 ) )
__children["ShaderAssignment4"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["surfaceShader"] )
__children["ShaderAssignment4"]["in"].setInput( __children["ShaderAssignment3"]["out"] )
__children["ShaderAssignment4"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["ShaderAssignment4"]["shader"].setInput( __children["CyclesSurface"]["out"]["BSDF"] )
__children["ShaderAssignment4"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -26.4774895 ) )
__children["CyclesSurface"]["parameters"]["subsurface_radius"].setValue( imath.V3f( 1, 0.200000003, 0.100000001 ) )
__children["CyclesSurface"]["parameters"]["emission_color"].setInput( __children["Node"]["user"]["surfaceColor"] )
__children["CyclesSurface"]["parameters"]["emission_strength"].setInput( __children["WedgeSpreadsheet"]["out"]["emission"] )
Gaffer.Metadata.registerValue( __children["CyclesSurface"]["parameters"]["emission_strength"], 'noduleLayout:visible', True )
__children["CyclesSurface"]["__uiPosition"].setValue( imath.V2f( -13.2957954, -26.4774895 ) )
__children["ShaderAssignment5"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["surfaceShader"] )
__children["ShaderAssignment5"]["in"].setInput( __children["ShaderAssignment4"]["out"] )
__children["ShaderAssignment5"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["ShaderAssignment5"]["shader"].setInput( __children["DelightSurface"]["out"]["outColor"] )
__children["ShaderAssignment5"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -44.0041542 ) )
__children["DelightSurface"]["parameters"]["emission_w"].setInput( __children["WedgeSpreadsheet"]["out"]["emission"] )
__children["DelightSurface"]["parameters"]["emission_color"].setInput( __children["Node"]["user"]["surfaceColor"] )
__children["DelightSurface"]["__uiPosition"].setValue( imath.V2f( -32.8396225, -44.0041542 ) )
__children["InteractiveOutputs"]["in"].setInput( __children["CyclesOptions"]["out"] )
__children["InteractiveOutputs"]["outputs"]["output1"]["name"].setValue( 'Interactive/Beauty' )
__children["InteractiveOutputs"]["outputs"]["output1"]["fileName"].setValue( 'beauty' )
__children["InteractiveOutputs"]["outputs"]["output1"]["type"].setValue( 'ieDisplay' )
__children["InteractiveOutputs"]["outputs"]["output1"]["data"].setValue( 'rgba' )
__children["InteractiveOutputs"]["__uiPosition"].setValue( imath.V2f( -26.5294228, -197.731903 ) )
__children["CyclesOptions"]["in"].setInput( __children["ArnoldOptions"]["out"] )
__children["CyclesOptions"]["__uiPosition"].setValue( imath.V2f( 5.65208483, -170.167496 ) )
__children["RendererWedge"]["preTasks"][0].setInput( __children["Wedge"]["task"] )
__children["RendererWedge"]["variable"].setValue( 'rendererWedge:value' )
__children["RendererWedge"]["indexVariable"].setValue( '' )
__children["RendererWedge"]["mode"].setValue( 5 )
__children["RendererWedge"]["strings"].setValue( IECore.StringVectorData( [ 'Arnold', 'RenderMan', 'Cycles', '3Delight', 'HdArnold', 'HdRenderMan RIS' ] ) )
__children["RendererWedge"]["__uiPosition"].setValue( imath.V2f( 20.1113949, -255.160828 ) )
__children["Render"]["in"].setInput( __children["Outputs"]["out"] )
__children["Render"]["renderer"].setInput( __children["ContextQuery"]["out"][0]["value"] )
__children["Render"]["__uiPosition"].setValue( imath.V2f( 15.0113945, -193.039673 ) )
__children["Outputs"]["in"].setInput( __children["CyclesOptions"]["out"] )
__children["Outputs"]["outputs"]["output1"]["name"].setValue( 'Batch/Beauty' )
__children["Outputs"]["outputs"]["output1"]["fileName"].setValue( '${project:rootDirectory}/renders/${script:name}/${renderPass}/beauty/beauty-${rendererWedge:value}-${wedge:value}.####.exr' )
__children["Outputs"]["outputs"]["output1"]["type"].setValue( 'exr' )
__children["Outputs"]["outputs"]["output1"]["data"].setValue( 'rgba' )
__children["Outputs"]["__uiPosition"].setValue( imath.V2f( 15.0113945, -182.054337 ) )
__children["LocalDispatcher1"]["tasks"][0].setInput( __children["RendererWedge"]["task"] )
__children["LocalDispatcher1"]["jobName"].setValue( '${script:name}' )
__children["LocalDispatcher1"]["jobsDirectory"].setValue( '${project:rootDirectory}/dispatcher/local' )
__children["LocalDispatcher1"]["executeInBackground"].setValue( True )
__children["LocalDispatcher1"]["__uiPosition"].setValue( imath.V2f( 20.8113937, -263.32489 ) )
__children["ContextQuery"]["queries"][0]["name"].setValue( 'rendererWedge:value' )
__children["ContextQuery"]["__uiPosition"].setValue( imath.V2f( 4.51088333, -193.038834 ) )
__children["ImageReader"]["fileName"].setInput( __children["Outputs"]["outputs"]["output1"]["fileName"] )
__children["ImageReader"]["refreshCount"].setValue( 7 )
__children["ImageReader"]["__uiPosition"].setValue( imath.V2f( 98.2511826, -180.951828 ) )
__children["RendererContactSheet"]["in"][0].setInput( __children["ImageReader"]["out"] )
__children["RendererContactSheet"]["out"].setInput( __children["RendererContactSheet"]["BoxOut"]["__out"] )
__children["RendererContactSheet"]["format"]["displayWindow"]["min"].setValue( imath.V2i( 0, 0 ) )
Gaffer.Metadata.registerValue( __children["RendererContactSheet"]["format"], 'formatPlugValueWidget:mode', 'custom' )
__children["RendererContactSheet"]["format"]["displayWindow"]["max"].setInput( __children["Expression"]["__out"]["p0"] )
__children["RendererContactSheet"]["mode"].setValue( 4 )
__children["RendererContactSheet"]["divisionsMode"].setValue( 1 )
__children["RendererContactSheet"]["tileNames"].setInput( __children["RendererWedge"]["strings"] )
__children["RendererContactSheet"]["tileNameVariable"].setValue( 'rendererWedge:value' )
__children["RendererContactSheet"]["divisions"]["y"].setValue( 1 )
__children["RendererContactSheet"]["divisions"]["x"].setInput( __children["Expression4"]["__out"]["p0"] )
__children["RendererContactSheet"]["outDivisions"].setInput( __children["RendererContactSheet"]["Divisions"]["out"] )
__children["RendererContactSheet"]["spacing"].setValue( imath.V2f( 0, 100 ) )
__children["RendererContactSheet"]["labelsEnabled"].setValue( True )
__children["RendererContactSheet"]["labelVerticalAlignment"].setValue( 3 )
__children["RendererContactSheet"]["__uiPosition"].setValue( imath.V2f( 99.750351, -189.115891 ) )
__children["LightTextureTweaks"]["enabled"].setInput( __children["WedgeSpreadsheet"]["out"]["lightTexture"] )
__children["LightTextureTweaks"]["in"].setInput( __children["SurfaceTextureTweaks"]["out"] )
__children["LightTextureTweaks"]["filter"].setInput( __children["PathFilter"]["out"] )
__children["LightTextureTweaks"]["shader"].setValue( 'light' )
__children["LightTextureTweaks"]["tweaks"]["tweak0"]["name"].setValue( 'color' )
Gaffer.Metadata.registerValue( __children["LightTextureTweaks"]["tweaks"]["tweak0"], 'noduleLayout:visible', True )
__children["LightTextureTweaks"]["tweaks"]["tweak0"]["value"].setInput( __children["PxrChecker2"]["out"]["resultRGB"] )
__children["LightTextureTweaks"]["__uiPosition"].setValue( imath.V2f( 5.65125275, -117.775665 ) )
__children["PxrChecker2"]["parameters"]["colorA"].setInput( __children["Node"]["user"]["lightColor"] )
__children["PxrChecker2"]["parameters"]["colorB"].setInput( __children["PxrChecker2"]["parameters"]["colorA"] )
__children["PxrChecker2"]["__uiPosition"].setValue( imath.V2f( -26.5296307, -119.575668 ) )
__children["WedgeContactSheet"]["in"][0].setInput( __children["RendererContactSheet"]["out"] )
__children["WedgeContactSheet"]["out"].setInput( __children["WedgeContactSheet"]["BoxOut"]["__out"] )
__children["WedgeContactSheet"]["format"]["displayWindow"]["min"].setValue( imath.V2i( 0, 0 ) )
Gaffer.Metadata.registerValue( __children["WedgeContactSheet"]["format"], 'formatPlugValueWidget:mode', 'custom' )
__children["WedgeContactSheet"]["format"]["displayWindow"]["max"].setInput( __children["Expression1"]["__out"]["p0"] )
__children["WedgeContactSheet"]["mode"].setValue( 4 )
__children["WedgeContactSheet"]["divisionsMode"].setValue( 1 )
__children["WedgeContactSheet"]["tileNames"].setInput( __children["Wedge"]["strings"] )
__children["WedgeContactSheet"]["tileNameVariable"].setValue( 'wedge:value' )
__children["WedgeContactSheet"]["divisions"]["x"].setValue( 1 )
__children["WedgeContactSheet"]["divisions"]["y"].setInput( __children["Expression5"]["__out"]["p0"] )
__children["WedgeContactSheet"]["outDivisions"].setInput( __children["WedgeContactSheet"]["Divisions"]["out"] )
__children["WedgeContactSheet"]["spacing"].setValue( imath.V2f( 0, 100 ) )
__children["WedgeContactSheet"]["labelsEnabled"].setValue( True )
__children["WedgeContactSheet"]["labelVerticalAlignment"].setValue( 3 )
__children["WedgeContactSheet"]["__uiPosition"].setValue( imath.V2f( 101.250351, -200.016663 ) )
__children["ContextVariables"]["variables"]["member0"]["name"].setValue( 'textureWedge:value' )
__children["ContextVariables"]["in"].setInput( __children["InteractiveOutputs"]["out"] )
Gaffer.Metadata.registerValue( __children["ContextVariables"]["in"], 'noduleLayout:section', 'top' )
Gaffer.Metadata.registerValue( __children["ContextVariables"]["out"], 'noduleLayout:section', 'bottom' )
__children["ContextVariables"]["__uiPosition"].setValue( imath.V2f( -26.5294228, -208.352097 ) )
__children["Expression"]["__in"]["p0"].setInput( __children["RendererContactSheet"]["divisions"] )
__children["Expression"]["__uiPosition"].setValue( imath.V2f( 110.113876, -189.115067 ) )
__children["Expression1"]["__in"]["p0"].setInput( __children["RendererContactSheet"]["format"]["displayWindow"]["max"] )
__children["Expression1"]["__in"]["p1"].setInput( __children["WedgeContactSheet"]["divisions"] )
__children["Expression1"]["__uiPosition"].setValue( imath.V2f( 124.880402, -200.769409 ) )
__children["Expression2"]["__in"]["p0"].setInput( __children["WedgeContactSheet"]["format"]["displayWindow"]["max"] )
__children["Expression2"]["__uiPosition"].setValue( imath.V2f( 126.23687, -194.905746 ) )
__children["DelightOptions"]["in"].setInput( __children["StandardOptions"]["out"] )
__children["DelightOptions"]["options"]["dl:oversampling"]["value"].setValue( 10 )
__children["DelightOptions"]["options"]["dl:oversampling"]["enabled"].setValue( True )
__children["DelightOptions"]["options"]["dl:quality_shadingsamples"]["value"].setValue( 25 )
__children["DelightOptions"]["options"]["dl:quality_shadingsamples"]["enabled"].setValue( True )
__children["DelightOptions"]["__uiPosition"].setValue( imath.V2f( 5.65125322, -159.503464 ) )
__children["SceneWriter"]["in"].setInput( __children["Outputs"]["out"] )
__children["SceneWriter"]["fileName"].setValue( '/tmp/test.usda' )
__children["SceneWriter"]["__uiPosition"].setValue( imath.V2f( 33.1630745, -190.218399 ) )
__children["SystemCommand"]["preTasks"][0].setInput( __children["SceneWriter"]["task"] )
__children["SystemCommand"]["command"].setValue( '/home/john/bin/usdrecord --renderer "{renderer}" --camera /camera --disableCameraLight /tmp/test.usda "{outputPath}"' )
__children["SystemCommand"]["substitutions"]["member0"]["name"].setValue( 'renderer' )
__children["SystemCommand"]["substitutions"]["member1"]["name"].setValue( 'outputPath' )
__children["SystemCommand"]["substitutions"]["member0"]["value"].setInput( __children["Expression3"]["__out"]["p0"] )
__children["SystemCommand"]["substitutions"]["member1"]["value"].setInput( __children["Expression3"]["__out"]["p1"] )
__children["SystemCommand"]["__uiPosition"].setValue( imath.V2f( 33.8639793, -198.382462 ) )
__children["Switch"]["index"].setInput( __children["PatternMatch2"]["match"] )
Gaffer.Metadata.registerValue( __children["Switch"]["in"], 'noduleLayout:section', 'top' )
__children["Switch"]["in"][0].setInput( __children["Render"]["task"] )
__children["Switch"]["in"][1].setInput( __children["SystemCommand"]["task"] )
Gaffer.Metadata.registerValue( __children["Switch"]["out"], 'noduleLayout:section', 'bottom' )
__children["Switch"]["__uiPosition"].setValue( imath.V2f( 18.0113945, -216.282455 ) )
__children["PatternMatch2"]["string"].setValue( '${rendererWedge:value}' )
__children["PatternMatch2"]["pattern"].setValue( 'Hd*' )
__children["PatternMatch2"]["__uiPosition"].setValue( imath.V2f( 26.0690346, -216.268936 ) )
__children["Expression3"]["__in"]["p0"].setInput( __children["Outputs"]["out"]["globals"] )
__children["Expression3"]["__uiPosition"].setValue( imath.V2f( 25.3772392, -191.668945 ) )
__children["LocalDispatcher"]["tasks"][0].setInput( __children["SystemCommand"]["task"] )
__children["LocalDispatcher"]["jobName"].setValue( '${script:name}' )
__children["LocalDispatcher"]["jobsDirectory"].setValue( '${project:rootDirectory}/dispatcher/local' )
__children["LocalDispatcher"]["executeInBackground"].setValue( True )
__children["LocalDispatcher"]["__uiPosition"].setValue( imath.V2f( 43.5270691, -206.546524 ) )
__children["Wedge"]["preTasks"][0].setInput( __children["Switch"]["out"] )
Gaffer.Metadata.registerValue( __children["Wedge"]["variable"], 'readOnly', False )
__children["Wedge"]["mode"].setValue( 5 )
__children["Wedge"]["strings"].setInput( __children["WedgeSpreadsheet"]["enabledRowNames"] )
__children["Wedge"]["__uiPosition"].setValue( imath.V2f( 20.1113949, -240.774643 ) )
__children["WedgeSpreadsheet"]["selector"].setValue( '${wedge:value}' )
Gaffer.Metadata.registerValue( __children["WedgeSpreadsheet"]["selector"], 'readOnly', False )
__children["WedgeSpreadsheet"]["rows"][0]["cells"]["surfaceShader"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][0]["cells"]["emission"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][1]["name"].setValue( 'noSurface' )
__children["WedgeSpreadsheet"]["rows"][2]["name"].setValue( 'noEmission' )
__children["WedgeSpreadsheet"]["rows"][2]["cells"]["surfaceShader"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][3]["name"].setValue( 'flatEmission' )
__children["WedgeSpreadsheet"]["rows"][3]["cells"]["surfaceShader"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][3]["cells"]["emission"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][4]["name"].setValue( 'texturedEmission' )
__children["WedgeSpreadsheet"]["rows"][4]["cells"]["surfaceTexture"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][4]["cells"]["surfaceShader"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][4]["cells"]["emission"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][5]["name"].setValue( 'texturedLight' )
__children["WedgeSpreadsheet"]["rows"][5]["cells"]["lightTexture"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][5]["cells"]["surfaceShader"]["value"].setValue( True )
__children["WedgeSpreadsheet"]["rows"][5]["cells"]["emission"]["value"].setValue( True )
Gaffer.Metadata.registerValue( __children["WedgeSpreadsheet"]["rows"][0]["cells"]["surfaceTexture"], 'spreadsheet:columnIndex', 2 )
Gaffer.Metadata.registerValue( __children["WedgeSpreadsheet"]["rows"][0]["cells"]["lightTexture"], 'spreadsheet:columnIndex', 3 )
Gaffer.Metadata.registerValue( __children["WedgeSpreadsheet"]["rows"][0]["cells"]["surfaceShader"], 'spreadsheet:columnIndex', 0 )
Gaffer.Metadata.registerValue( __children["WedgeSpreadsheet"]["rows"][0]["cells"]["emission"], 'spreadsheet:columnIndex', 1 )
__children["WedgeSpreadsheet"]["__uiPosition"].setValue( imath.V2f( -62.8318253, -92.0955505 ) )
__children["TextureWedge"]["variable"].setValue( 'textureWedge:value' )
__children["TextureWedge"]["indexVariable"].setValue( '' )
__children["TextureWedge"]["mode"].setValue( 5 )
__children["TextureWedge"]["strings"].setValue( IECore.StringVectorData( [ 'None', 'Surface', 'Light', 'Surface+Light' ] ) )
__children["TextureWedge"]["__uiPosition"].setValue( imath.V2f( 1.1397934, -226.75174 ) )
__children["EmissionWedge"]["preTasks"][0].setInput( __children["TextureWedge"]["task"] )
__children["EmissionWedge"]["variable"].setValue( 'emissionWedge:value' )
__children["EmissionWedge"]["indexVariable"].setValue( '' )
__children["EmissionWedge"]["mode"].setValue( 3 )
__children["EmissionWedge"]["floats"].setValue( IECore.FloatVectorData( [ 1, 0 ] ) )
__children["EmissionWedge"]["__uiPosition"].setValue( imath.V2f( 1.83979225, -234.915802 ) )
__children["Expression4"]["__in"]["p0"].setInput( __children["RendererContactSheet"]["tileNames"] )
__children["Expression4"]["__uiPosition"].setValue( imath.V2f( 86.8859634, -189.115753 ) )
__children["Expression5"]["__in"]["p0"].setInput( __children["WedgeContactSheet"]["tileNames"] )
__children["Expression5"]["__uiPosition"].setValue( imath.V2f( 89.0379486, -200.015793 ) )
__children["ShaderAssignment6"]["in"].setInput( __children["ShaderAssignment"]["out"] )
__children["ShaderAssignment6"]["shader"].setInput( __children["principled_bsdf"]["out"]["BSDF"] )
__children["ShaderAssignment6"]["__uiPosition"].setValue( imath.V2f( -18.8399525, -143.442917 ) )
__children["principled_bsdf"]["parameters"]["subsurface_radius"].setValue( imath.V3f( 1, 0.200000003, 0.100000001 ) )
__children["principled_bsdf"]["__uiPosition"].setValue( imath.V2f( -47.821682, -152.506058 ) )
__children["Expression"]["__engine"].setValue( 'python' )
__children["Expression"]["__expression"].setValue( 'import imath\nimport GafferImage\n\nparent["__out"]["p0"] = ( imath.V2i( 1920, 1080 ) * parent["__in"]["p0"] ) / 2\n' )
__children["Expression1"]["__engine"].setValue( 'python' )
__children["Expression1"]["__expression"].setValue( 'parent["__out"]["p0"] = parent["__in"]["p0"] * parent["__in"]["p1"]' )
__children["Expression2"]["__engine"].setValue( 'python' )
__children["Expression2"]["__expression"].setValue( '__disconnected = parent["__in"]["p0"] * V2i(3, 3)' )
__children["Expression3"]["__engine"].setValue( 'python' )
__children["Expression3"]["__expression"].setValue( 'parent["__out"]["p0"] = context.get( "rendererWedge:value", "HdArnold" ).replace( "Hd", "" )\n\n\nglobals = parent["__in"]["p0"]\n\npath = globals["output:Batch/Beauty"].getName()\n\nparent["__out"]["p1"] = path' )
__children["Expression4"]["__engine"].setValue( 'python' )
__children["Expression4"]["__expression"].setValue( 'parent["__out"]["p0"] = len( parent["__in"]["p0"] )' )
__children["Expression5"]["__engine"].setValue( 'python' )
__children["Expression5"]["__expression"].setValue( 'parent["__out"]["p0"] = len( parent["__in"]["p0"] )' )


del __children

That gives me these results :

Image

Things I noted :

  • Our Arnold and RenderMan implementations are a good match. The only major deviation is when texturing the light directly.
  • We're a reasonable match to HdPrman, except it illuminates from both sides of the mesh.
  • hdArnold seems to be in its own world when compared to our implementation and hdPrman.
  • Cycles and 3Delight seem very broken. I expect this is something I did wrong, and am hoping you can point me in the right direction.

Hopefully GitHub lets me send this - it has been very broken most of today...

Comment thread src/GafferUSD/USDShader.cpp Outdated

std::string shaderType = "surface";
const TfToken shaderNameToken( shaderName );
const TfToken apiNameToken( shaderName != "MeshLight" ? shaderName : "MeshLightAPI" );

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

apiNameToken seems misleading, since in most cases we're actually looking at a concrete schema. I think schemaName would be more appropriate (API schemas are still schemas).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense, I had thought "all schemas are APIs" rather than "all APIs (and other stuff) are schemas". Fixed in 4856cac

Comment thread src/GafferUSD/USDShader.cpp Outdated
Comment on lines +361 to +364
auto primDefinition = apiNameToken == TfToken( "MeshLightAPI" ) ?
schemaRegistry.FindAppliedAPIPrimDefinition( TfToken( "MeshLightAPI" ) ) :
schemaRegistry.FindConcretePrimDefinition( apiNameToken )
;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performance doesn't matter here, but it's a bit odd to construct the same TfToken multiple times. For == TfToken( "MeshLightAPI" ) I think we can just compare to the string literal. And for FindAppliedAPIPrimDefinition(), we can use apiNameToken.

Alternatively, we could just use UsdLuxTokens->MeshLightAPI everywhere - maybe this is better?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used UsdLuxTokens->MeshLightAPI in 4856cac

Comment thread python/GafferUSDUI/USDLightUI.py Outdated
Comment on lines 80 to 84
for rendererTarget in Gaffer.Metadata.targetsWithMetadata( "renderer:*", "optionPrefix" ) :
renderer = rendererTarget[9:] # Trim off "renderer:"
# \todo Once we standardize on `arnold:` prefix instead of `ai:`, we can remove this special case.
prefix = "arnold:" if renderer == "Arnold" else Gaffer.Metadata.value( rendererTarget, "optionPrefix" )

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NodeEditor construction is slower than we'd like. I don't see any evidence that this metadata lookup is a significant part of that, but it still seems a pity to lead with this linear search for everything.

Can we start by splitting key on :, and then only do the search when we find that the parameter name contains a prefix?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 880f884


"description" : "Refer to Arnold's documentation for further details.",

},

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we achieve the same by registering metadata against light:*:arnold:*? If so, I think that would work for all USD lights, not just the mesh light.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We discussed offline leaving this as-is with an additional to-do which I've added here 28de40a.

Currently USDLight and USDMeshLight get metadata through different mechanisms, neither of which fallback on the light:shader:parameter pattern. It sounds like that's worth doing, but worthy of breaking off into its own PR.

Comment thread src/IECoreDelight/Renderer.cpp Outdated
// surfaces), we support "light" attributes as well for compatibility with
// other renderers and some specific workflows in Gaffer.
std::array<std::string, 4> g_surfaceShaderAttributeNames = { "osl:light", "light", "osl:surface", "surface" };
std::array<std::string, 2> g_USDMeshLightAttributeNames = { "light", "osl:light" };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would a USD mesh light be assigned as osl:light?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We wouldn't - that was a holdover from a previous iteration I missed cleaning up. Fixed in 0aa97d2

@ericmehl
ericmehl changed the base branch from main to 1.7_maintenance August 18, 2026 15:28
@ericmehl

Copy link
Copy Markdown
Contributor Author

One issue with your 3Delight test was easy to solve, they have one shader that uses a different name for surface emission and you happened to land on that one. That's fixed in a997611

There's a bigger concern I found though that needs more investigation. If I switch your mesh light geometry from a plane to a sphere or cube, it works as expected. Switching it back to a plane during a live render (by moving the connection in my case) helps the plane to work like a mesh light. I'm suspecting there may be something happening in 3Delight with the order of mesh intersection / visibility attributes / mesh intersection accuracy that may be causing problems with the duplicated-mesh approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants