def test(self): p = GafferScene.Plane() s = GafferScene.Sphere() g = GafferScene.Group() g["in"][0].setInput(p["out"]) g["in"][1].setInput(s["out"]) f = GafferScene.PathFilter() f["paths"].setValue(IECore.StringVectorData(["/group/sphere"])) l = GafferArnold.ArnoldMeshLight() l["in"].setInput(g["out"]) l["filter"].setInput(f["out"]) self.assertEqual( l["out"].attributes("/group/sphere")["ai:light"][0].name, "mesh_light") self.assertTrue("ai:light" not in l["out"].attributes("/group/plane")) for v in ("shadow", "diffuse_transmit", "specular_transmit", "volume", "diffuse_reflect", "specular_reflect", "subsurface"): v = "ai:visibility:" + v self.assertEqual(l["out"].attributes("/group/sphere")[v].value, False) self.assertTrue(v not in l["out"].attributes("/group/plane")) self.assertEqual(set(l["out"].set("__lights").value.paths()), {"/group/sphere"})
def testNoLinkedLightsOnLights(self): sphere = GafferScene.Sphere() meshLightShader = GafferArnold.ArnoldShader() meshLightShader.loadShader("flat") meshLightFilter = GafferScene.PathFilter() meshLightFilter["paths"].setValue(IECore.StringVectorData(["/sphere"])) meshLight = GafferArnold.ArnoldMeshLight() meshLight["in"].setInput(sphere["out"]) meshLight["filter"].setInput(meshLightFilter["out"]) meshLight["parameters"]["color"].setInput(meshLightShader["out"]) light1 = GafferArnold.ArnoldLight() light1.loadShader("point_light") light2 = GafferArnold.ArnoldLight() light2.loadShader("point_light") # Trigger light linking by unlinking a light light2["defaultLight"].setValue(False) group = GafferScene.Group() group["in"][0].setInput(meshLight["out"]) group["in"][1].setInput(light1["out"]) group["in"][2].setInput(light2["out"]) render = GafferArnold.ArnoldRender() render["in"].setInput(group["out"]) render["mode"].setValue(render.Mode.SceneDescriptionMode) render["fileName"].setValue(self.temporaryDirectory() + "/test.ass") render["task"].execute() with IECoreArnold.UniverseBlock(writable=True): arnold.AiASSLoad(self.temporaryDirectory() + "/test.ass") sphere = arnold.AiNodeLookUpByName("/group/sphere") self.assertIsNotNone(sphere) self.assertEqual( arnold.AiArrayGetNumElements( arnold.AiNodeGetArray(sphere, "light_group")), 0) self.assertFalse(arnold.AiNodeGetBool(sphere, "use_light_group"))
def testShader(self): s = GafferScene.Sphere() f = GafferScene.PathFilter() f["paths"].setValue(IECore.StringVectorData(["/sphere"])) l = GafferArnold.ArnoldMeshLight() l["in"].setInput(s["out"]) l["filter"].setInput(f["out"]) l["parameters"]["intensity"].setValue(10) l["parameters"]["color"].setValue(imath.Color3f(1, 0, 0)) shaders = l["out"].attributes("/sphere")["ai:light"] self.assertEqual(len(shaders), 1) self.assertEqual(shaders[0].parameters["intensity"].value, 10) self.assertEqual(shaders[0].parameters["color"].value, imath.Color3f(1, 0, 0))
def testSerialisation(self): s = Gaffer.ScriptNode() s["p"] = GafferScene.Plane() s["f"] = GafferScene.PathFilter() s["f"]["paths"].setValue(IECore.StringVectorData(["/plane"])) s["l"] = GafferArnold.ArnoldMeshLight() s["l"]["in"].setInput(s["p"]["out"]) s["l"]["filter"].setInput(s["f"]["out"]) ss = s.serialise() self.assertFalse('["out"].setInput' in ss) s2 = Gaffer.ScriptNode() s2.execute(ss) self.assertEqual(s["l"]["parameters"].keys(), s2["l"]["parameters"].keys()) self.assertEqual(s["l"]["out"].attributes("/plane"), s2["l"]["out"].attributes("/plane"))
def testCameraVisibility(self): s = GafferScene.Sphere() f = GafferScene.PathFilter() f["paths"].setValue(IECore.StringVectorData(["/sphere"])) l = GafferArnold.ArnoldMeshLight() l["in"].setInput(s["out"]) l["filter"].setInput(f["out"]) self.assertTrue( "ai:visibility:camera" not in l["out"].attributes("/sphere")) l["cameraVisibility"]["enabled"].setValue(True) self.assertEqual( l["out"].attributes("/sphere")["ai:visibility:camera"].value, True) l["cameraVisibility"]["value"].setValue(False) self.assertEqual( l["out"].attributes("/sphere")["ai:visibility:camera"].value, False)