def testLightFilters(self): s = Gaffer.ScriptNode() s["lightFilter"] = GafferArnold.ArnoldLightFilter() s["lightFilter"].loadShader("light_blocker") s["attributes"] = GafferScene.StandardAttributes() s["attributes"]["in"].setInput(s["lightFilter"]["out"]) s["attributes"]["attributes"]["filteredLights"]["enabled"].setValue( True) s["attributes"]["attributes"]["filteredLights"]["value"].setValue( "defaultLights") s["light"] = GafferArnold.ArnoldLight() s["light"].loadShader("point_light") s["gobo"] = GafferArnold.ArnoldShader() s["gobo"].loadShader("gobo") s["assignment"] = GafferScene.ShaderAssignment() s["assignment"]["in"].setInput(s["light"]["out"]) s["assignment"]["shader"].setInput(s["gobo"]["out"]) s["group"] = GafferScene.Group() s["group"]["in"][0].setInput(s["attributes"]["out"]) s["group"]["in"][1].setInput(s["assignment"]["out"]) s["render"] = GafferArnold.ArnoldRender() s["render"]["in"].setInput(s["group"]["out"]) s["render"]["mode"].setValue(s["render"].Mode.SceneDescriptionMode) s["render"]["fileName"].setValue(self.temporaryDirectory() + "/test.ass") s["render"]["task"].execute() with IECoreArnold.UniverseBlock(writable=True): arnold.AiASSLoad(self.temporaryDirectory() + "/test.ass") light = arnold.AiNodeLookUpByName("light:/group/light") linkedFilters = arnold.AiNodeGetArray(light, "filters") numFilters = arnold.AiArrayGetNumElements(linkedFilters.contents) self.assertEqual(numFilters, 2) linkedFilter = arnold.cast(arnold.AiArrayGetPtr(linkedFilters, 0), arnold.POINTER(arnold.AtNode)) linkedGobo = arnold.cast(arnold.AiArrayGetPtr(linkedFilters, 1), arnold.POINTER(arnold.AtNode)) self.assertEqual(arnold.AiNodeGetName(linkedFilter), "lightFilter:/group/lightFilter") self.assertEqual( arnold.AiNodeEntryGetName( arnold.AiNodeGetNodeEntry(linkedFilter)), "light_blocker") self.assertEqual( arnold.AiNodeEntryGetName( arnold.AiNodeGetNodeEntry(linkedGobo)), "gobo")
def testShaderInputs(self): # Test setting up a checkerboard connected to the lightfilter's "shader" input. s = GafferArnold.ArnoldShader("Checkerboard") s.loadShader("checkerboard") l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") l["parameters"]["shader"].setInput(s["out"]) network = l["out"].attributes("/lightFilter")["ai:lightFilter:filter"] self.assertEqual(len(network), 2) self.assertEqual(network.getShader("__shader").name, "light_blocker") self.assertEqual( network.getShader("Checkerboard").name, "checkerboard") self.assertEqual( network.getShader("Checkerboard").parameters["color1"].value, imath.Color3f(1, 1, 1)) self.assertEqual(network.inputConnections(network.getOutput().shader), [ network.Connection( ("Checkerboard", ""), (network.getOutput().shader, "shader")), ])
def testLightFiltersMany(self): # \todo: this can easily be turned into a performance test s = Gaffer.ScriptNode() s["lightFilter"] = GafferArnold.ArnoldLightFilter() s["lightFilter"].loadShader("light_blocker") s["lightFilter"]["filteredLights"].setValue("defaultLights") s["planeFilters"] = GafferScene.Plane("Plane") s["planeFilters"]["divisions"].setValue(imath.V2i(9)) s["instancerFilters"] = GafferScene.Instancer("Instancer") s["instancerFilters"]["in"].setInput(s["planeFilters"]["out"]) s["instancerFilters"]["instances"].setInput(s["lightFilter"]["out"]) s["instancerFilters"]["parent"].setValue("/plane") s["light"] = GafferArnold.ArnoldLight() s["light"].loadShader("point_light") s["planeLights"] = GafferScene.Plane("Plane") s["planeLights"]["divisions"].setValue(imath.V2i(9)) s["instancerLights"] = GafferScene.Instancer("Instancer") s["instancerLights"]["in"].setInput(s["planeLights"]["out"]) s["instancerLights"]["instances"].setInput(s["light"]["out"]) s["instancerLights"]["parent"].setValue("/plane") s["group"] = GafferScene.Group("Group") s["group"]["in"][0].setInput(s["instancerFilters"]["out"]) s["group"]["in"][1].setInput(s["instancerLights"]["out"]) s["render"] = GafferArnold.ArnoldRender() s["render"]["in"].setInput(s["group"]["out"]) s["render"]["mode"].setValue(s["render"].Mode.SceneDescriptionMode) s["render"]["fileName"].setValue(self.temporaryDirectory() + "/testMany.ass") s["render"]["task"].execute() with IECoreArnold.UniverseBlock(writable=True): foo = self.temporaryDirectory() + "/testMany.ass" print foo arnold.AiASSLoad(foo) for i in range(100): light = arnold.AiNodeLookUpByName( "light:/group/plane1/instances/light/%s" % i) linkedFilters = arnold.AiNodeGetArray(light, "filters") numFilters = arnold.AiArrayGetNumElements( linkedFilters.contents) self.assertEqual(numFilters, 100)
def testUsesShaders(self): l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") n = l["out"].attributes("/lightFilter")["ai:lightFilter:filter"] self.assertTrue(isinstance(n, IECoreScene.ShaderNetwork)) self.assertEqual(len(n), 1) self.assertTrue(isinstance(n.outputShader(), IECoreScene.Shader)) self.assertEqual(n.outputShader().type, "ai:lightFilter") self.assertEqual(n.outputShader().name, "light_blocker")
def testSets(self): l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") self.assertEqual(l["out"].set("__lightFilters").value.paths(), ["/lightFilter"]) l["sets"].setValue("myLightFilters") self.assertEqual(l["out"].set("myLightFilters").value.paths(), ["/lightFilter"])
def testDisabling(self): l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") attributesHash = l["out"].attributesHash("/lightFilter") attributes = l["out"].attributes("/lightFilter") self.assertSceneValid(l["out"]) l["enabled"].setValue(False) attributesHash2 = l["out"].attributesHash("/lightFilter") self.assertNotEqual(attributesHash2, attributesHash) attributes2 = l["out"].attributes("/lightFilter") self.assertEqual(len(attributes2), 0) self.assertSceneValid(l["out"])
def testLightFiltersMany(self): numLights = 10000 numLightFilters = 10000 s = Gaffer.ScriptNode() s["lightFilter"] = GafferArnold.ArnoldLightFilter() s["lightFilter"].loadShader("light_blocker") s["lightFilter"]["filteredLights"].setValue("defaultLights") s["planeFilters"] = GafferScene.Plane("Plane") s["planeFilters"]["divisions"].setValue( imath.V2i(1, numLightFilters / 2 - 1)) s["instancerFilters"] = GafferScene.Instancer("Instancer") s["instancerFilters"]["in"].setInput(s["planeFilters"]["out"]) s["instancerFilters"]["instances"].setInput(s["lightFilter"]["out"]) s["instancerFilters"]["parent"].setValue("/plane") s["light"] = GafferArnold.ArnoldLight() s["light"].loadShader("point_light") s["planeLights"] = GafferScene.Plane("Plane") s["planeLights"]["divisions"].setValue(imath.V2i(1, numLights / 2 - 1)) s["instancerLights"] = GafferScene.Instancer("Instancer") s["instancerLights"]["in"].setInput(s["planeLights"]["out"]) s["instancerLights"]["instances"].setInput(s["light"]["out"]) s["instancerLights"]["parent"].setValue("/plane") s["group"] = GafferScene.Group("Group") s["group"]["in"][0].setInput(s["instancerFilters"]["out"]) s["group"]["in"][1].setInput(s["instancerLights"]["out"]) s["render"] = GafferArnold.ArnoldRender() s["render"]["in"].setInput(s["group"]["out"]) with Gaffer.Context() as c: c["scene:render:sceneTranslationOnly"] = IECore.BoolData(True) s["render"]["task"].execute()
def testFilteredLightsPlug(self): l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") self.assertNotIn("filteredLights", l["out"].attributes("/lightFilter")) l["filteredLights"].setValue("defaultLights") self.assertIn("filteredLights", l["out"].attributes("/lightFilter")) self.assertEqual(l["out"].attributes("/lightFilter")["filteredLights"], IECore.StringData("defaultLights")) h1 = l["out"].attributesHash("/lightFilter") l["filteredLights"].setValue("/does/not/exist") h2 = l["out"].attributesHash("/lightFilter") self.assertNotEqual(h1, h2) self.assertEqual(l["out"].attributes("/lightFilter")["filteredLights"], IECore.StringData("/does/not/exist"))
def testSerialisation(self): s = Gaffer.ScriptNode() s["l"] = GafferArnold.ArnoldLightFilter() s["l"].loadShader("light_blocker") ss = s.serialise() s2 = Gaffer.ScriptNode() s2.execute(ss) self.assertEqual(s["l"]["parameters"].keys(), s2["l"]["parameters"].keys()) for plug in s["l"]['parameters'].values(): relativeName = plug.relativeName(s["l"]) self.assertEqual(s2["l"].descendant(relativeName).getValue(), plug.getValue()) self.assertEqual(s["l"]["out"].attributes("/lightFilter"), s2["l"]["out"].attributes("/lightFilter"))
def testReload(self): l = GafferArnold.ArnoldLightFilter() l.loadShader("light_blocker") l["parameters"]["density"].setValue(3.14) l["parameters"]["geometry_type"].setValue("plane") l["parameters"]["ramp"].setValue(0.4) l["parameters"]["width_edge"].setValue(0.2) l.loadShader("light_blocker", keepExistingValues=True) self.assertAlmostEqual(l["parameters"]["density"].getValue(), 3.14, 5) self.assertEqual(l["parameters"]["geometry_type"].getValue(), "plane") self.assertAlmostEqual(l["parameters"]["ramp"].getValue(), 0.4, 5) self.assertAlmostEqual(l["parameters"]["width_edge"].getValue(), 0.2, 5) l.loadShader("light_blocker", keepExistingValues=False) self.assertTrue(l["parameters"]["density"].isSetToDefault()) self.assertTrue(l["parameters"]["geometry_type"].isSetToDefault()) self.assertTrue(l["parameters"]["ramp"].isSetToDefault()) self.assertTrue(l["parameters"]["width_edge"].isSetToDefault())
def _createLightFilter(self): lightFilter = GafferArnold.ArnoldLightFilter() lightFilter.loadShader("light_blocker") return lightFilter, lightFilter["parameters"]["density"]
def testShaderSubstitutions( self ) : s = Gaffer.ScriptNode() s["plane"] = GafferScene.Plane() s["planeAttrs"] = GafferScene.CustomAttributes() s["planeAttrs"]["in"].setInput( s["plane"]["out"] ) s["planeAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "A", Gaffer.StringPlug( "value", defaultValue = 'bar' ) ) ) s["planeAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "B", Gaffer.StringPlug( "value", defaultValue = 'foo' ) ) ) s["cube"] = GafferScene.Cube() s["cubeAttrs"] = GafferScene.CustomAttributes() s["cubeAttrs"]["in"].setInput( s["cube"]["out"] ) s["cubeAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "B", Gaffer.StringPlug( "value", defaultValue = 'override' ) ) ) s["parent"] = GafferScene.Parent() s["parent"]["in"].setInput( s["planeAttrs"]["out"] ) s["parent"]["children"][0].setInput( s["cubeAttrs"]["out"] ) s["parent"]["parent"].setValue( "/plane" ) s["shader"] = GafferArnold.ArnoldShader() s["shader"].loadShader( "image" ) s["shader"]["parameters"]["filename"].setValue( "<attr:A>/path/<attr:B>.tx" ) s["filter"] = GafferScene.PathFilter() s["filter"]["paths"].setValue( IECore.StringVectorData( [ "/plane" ] ) ) s["shaderAssignment"] = GafferScene.ShaderAssignment() s["shaderAssignment"]["in"].setInput( s["parent"]["out"] ) s["shaderAssignment"]["filter"].setInput( s["filter"]["out"] ) s["shaderAssignment"]["shader"].setInput( s["shader"]["out"] ) s["light"] = GafferArnold.ArnoldLight() s["light"].loadShader( "photometric_light" ) s["light"]["parameters"]["filename"].setValue( "/path/<attr:A>.ies" ) s["goboTexture"] = GafferArnold.ArnoldShader() s["goboTexture"].loadShader( "image" ) s["goboTexture"]["parameters"]["filename"].setValue( "<attr:B>/gobo.tx" ) s["gobo"] = GafferArnold.ArnoldShader() s["gobo"].loadShader( "gobo" ) s["gobo"]["parameters"]["slidemap"].setInput( s["goboTexture"]["out"] ) s["goboAssign"] = GafferScene.ShaderAssignment() s["goboAssign"]["in"].setInput( s["light"]["out"] ) s["goboAssign"]["shader"].setInput( s["gobo"]["out"] ) s["lightBlocker"] = GafferArnold.ArnoldLightFilter() s["lightBlocker"].loadShader( "light_blocker" ) s["lightBlocker"]["parameters"]["geometry_type"].setValue( "<attr:geometryType>" ) s["lightGroup"] = GafferScene.Group() s["lightGroup"]["name"].setValue( "lightGroup" ) s["lightGroup"]["in"][0].setInput( s["goboAssign"]["out"] ) s["lightGroup"]["in"][1].setInput( s["lightBlocker"]["out"] ) s["parent2"] = GafferScene.Parent() s["parent2"]["in"].setInput( s["shaderAssignment"]["out"] ) s["parent2"]["children"][0].setInput( s["lightGroup"]["out"] ) s["parent2"]["parent"].setValue( "/" ) s["globalAttrs"] = GafferScene.CustomAttributes() s["globalAttrs"]["in"].setInput( s["parent2"]["out"] ) s["globalAttrs"]["global"].setValue( True ) s["globalAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "A", Gaffer.StringPlug( "value", defaultValue = 'default1' ) ) ) s["globalAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "B", Gaffer.StringPlug( "value", defaultValue = 'default2' ) ) ) s["globalAttrs"]["attributes"].addChild( Gaffer.NameValuePlug( "geometryType", Gaffer.StringPlug( "value", defaultValue = 'cylinder' ) ) ) s["render"] = GafferArnold.ArnoldRender() s["render"]["in"].setInput( s["globalAttrs"]["out"] ) s["render"]["mode"].setValue( s["render"].Mode.SceneDescriptionMode ) s["render"]["fileName"].setValue( self.temporaryDirectory() + "/test.ass" ) s["render"]["task"].execute() with IECoreArnold.UniverseBlock( writable = True ) : arnold.AiASSLoad( self.temporaryDirectory() + "/test.ass" ) plane = arnold.AiNodeLookUpByName( "/plane" ) shader = arnold.AiNodeGetPtr( plane, "shader" ) self.assertEqual( arnold.AiNodeGetStr( shader, "filename" ), "bar/path/foo.tx" ) cube = arnold.AiNodeLookUpByName( "/plane/cube" ) shader2 = arnold.AiNodeGetPtr( cube, "shader" ) self.assertEqual( arnold.AiNodeGetStr( shader2, "filename" ), "bar/path/override.tx" ) light = arnold.AiNodeLookUpByName( "light:/lightGroup/light" ) self.assertEqual( arnold.AiNodeGetStr( light, "filename" ), "/path/default1.ies" ) gobo = arnold.AiNodeGetPtr( light, "filters" ) goboTex = arnold.AiNodeGetLink( gobo, "slidemap" ) self.assertEqual( arnold.AiNodeGetStr( goboTex, "filename" ), "default2/gobo.tx" ) lightFilter = arnold.AiNodeLookUpByName( "lightFilter:/lightGroup/lightFilter" ) self.assertEqual( arnold.AiNodeGetStr( lightFilter, "geometry_type" ), "cylinder" )