Esempio n. 1
0
	def testFixedCoshaderArrayParameters( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderArrayParameters.sl" )
		n = GafferRenderMan.RenderManShader()
		n.loadShader( shader )
		
		self.assertEqual( n["parameters"].keys(), [ "dynamicShaderArray", "fixedShaderArray" ] )
		
		self.assertTrue( isinstance( n["parameters"]["fixedShaderArray"], Gaffer.CompoundPlug ) )
		
		self.assertEqual( len( n["parameters"]["fixedShaderArray"] ), 4 )
		self.assertTrue( isinstance( n["parameters"]["fixedShaderArray"]["fixedShaderArray0"], Gaffer.Plug ) )
		self.assertTrue( isinstance( n["parameters"]["fixedShaderArray"]["fixedShaderArray1"], Gaffer.Plug ) )
		self.assertTrue( isinstance( n["parameters"]["fixedShaderArray"]["fixedShaderArray2"], Gaffer.Plug ) )
		self.assertTrue( isinstance( n["parameters"]["fixedShaderArray"]["fixedShaderArray3"], Gaffer.Plug ) )
		
		state = n.state()
		
		self.assertEqual( state[0].parameters["fixedShaderArray"], IECore.StringVectorData( [ "" ] * 4 ) )

		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		n["parameters"]["fixedShaderArray"]["fixedShaderArray0"].setInput( coshaderNode["out"] )
	
		state = n.state()
			
		self.assertEqual( state[1].parameters["fixedShaderArray"], IECore.StringVectorData( [ state[0].parameters["__handle"].value, "", "", "" ] ) )
Esempio n. 2
0
	def testConvertFixedCoshaderArrayToDynamic( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderArrayParameters.sl" )
		shaderV2 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderArrayParametersV2.sl" )
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		
		s = Gaffer.ScriptNode()

		s["n"] = GafferRenderMan.RenderManShader()
		s["n"].loadShader( shader )
		
		s["c"] = GafferRenderMan.RenderManShader()
		s["c"].loadShader( coshader )
		
		s["n"]["parameters"]["fixedShaderArray"][0].setInput( s["c"]["out"] )
		self.assertTrue( len( s["n"]["parameters"]["fixedShaderArray"] ), 4 )
		
		s["n"].loadShader( shaderV2, keepExistingValues = True )
		
		self.assertTrue( s["n"]["parameters"]["fixedShaderArray"][0].getInput().isSame( s["c"]["out"] ) )
		self.assertTrue( s["n"]["parameters"]["fixedShaderArray"][1].getInput() is None )
		
		s["n"]["parameters"]["fixedShaderArray"][0].setInput( None )

		self.assertEqual( len( s["n"]["parameters"]["fixedShaderArray"] ), 1 )
		self.assertTrue( s["n"]["parameters"]["fixedShaderArray"][0].getInput() is None )
Esempio n. 3
0
	def testDisablingCoshaders( self ) :
		
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderParameter.sl" )
	
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader )
				
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		shaderNode["parameters"]["coshaderParameter"].setInput( coshaderNode["out"] )
		
		s = shaderNode.state()
		self.assertEqual( len( s ), 2 )
		
		self.assertEqual( s[0].name, coshader )
		self.assertEqual( s[1].name, shader )
		
		h = shaderNode.stateHash()
		
		coshaderNode["enabled"].setValue( False )
		
		s2 = shaderNode.state()
		self.assertEqual( len( s2 ), 1 )
		
		self.assertEqual( s2[0].name, shader )
		self.assertTrue( "coshaderParameter" not in s2[0].parameters )
		
		self.assertNotEqual( shaderNode.stateHash(), h )	
Esempio n. 4
0
	def testCoshaderPassThrough( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderParameter.sl" )
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader )
				
		passThroughCoshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderWithPassThrough.sl" )
		passThroughCoshaderNode = GafferRenderMan.RenderManShader()
		passThroughCoshaderNode.loadShader( passThroughCoshader )
		
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )

		shaderNode["parameters"]["coshaderParameter"].setInput( passThroughCoshaderNode["out"] )
		passThroughCoshaderNode["parameters"]["aColorIWillTint"].setInput( coshaderNode["out"] )
		
		h = shaderNode.stateHash()
		s = shaderNode.state()
		
		self.assertEqual( len( s ), 3 )
		self.assertEqual( s[2].parameters["coshaderParameter"], s[1].parameters["__handle"] )
		self.assertEqual( s[1].name, passThroughCoshader )
		self.assertEqual( s[1].parameters["aColorIWillTint"], s[0].parameters["__handle"] )
		self.assertEqual( s[0].name, coshader )
		
		passThroughCoshaderNode["enabled"].setValue( False )

		s = shaderNode.state()
		
		self.assertEqual( len( s ), 2 )
		self.assertEqual( s[1].parameters["coshaderParameter"], s[0].parameters["__handle"] )
		self.assertEqual( s[0].name, coshader )
Esempio n. 5
0
	def testDynamicCoshaderArrayParameters( self ) :
	
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderArrayParameters.sl" )
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader )
		
		self.assertEqual( len( shaderNode["parameters"]["dynamicShaderArray"] ), 1 )
		self.assertTrue( isinstance( shaderNode["parameters"]["dynamicShaderArray"][0], Gaffer.Plug ) )
		self.assertTrue( shaderNode["parameters"]["dynamicShaderArray"][0].getInput() is None )
		
		shaderNode["parameters"]["dynamicShaderArray"][0].setInput( coshaderNode["out"] )
		
		self.assertEqual( len( shaderNode["parameters"]["dynamicShaderArray"] ), 2 )
		self.assertTrue( isinstance( shaderNode["parameters"]["dynamicShaderArray"][0], Gaffer.Plug ) )
		self.assertTrue( isinstance( shaderNode["parameters"]["dynamicShaderArray"][1], Gaffer.Plug ) )
		self.assertTrue( shaderNode["parameters"]["dynamicShaderArray"][0].getInput().isSame( coshaderNode["out"] ) )
		self.assertTrue( shaderNode["parameters"]["dynamicShaderArray"][1].getInput() is None )
				
		shaderNode["parameters"]["dynamicShaderArray"][0].setInput( None )
		
		self.assertEqual( len( shaderNode["parameters"]["dynamicShaderArray"] ), 1 )
		self.assertTrue( isinstance( shaderNode["parameters"]["dynamicShaderArray"][0], Gaffer.Plug ) )
		self.assertTrue( shaderNode["parameters"]["dynamicShaderArray"][0].getInput() is None )
Esempio n. 6
0
	def testAssignmentDirtyPropagation( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderParameter.sl" )
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader )
				
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		shaderNode["parameters"]["coshaderParameter"].setInput( coshaderNode["out"] )
		
		plane = GafferScene.Plane()
		assignment = GafferScene.ShaderAssignment()
		assignment["in"].setInput( plane["out"] )
		assignment["shader"].setInput( shaderNode["out"] )
		
		cs = GafferTest.CapturingSlot( assignment.plugDirtiedSignal() )
		
		coshaderNode["parameters"]["floatParameter"].setValue( 12 )
		
		dirtiedNames = [ x[0].fullName() for x in cs ]
		self.assertEqual( len( dirtiedNames ), 3 )
		self.assertEqual( dirtiedNames[0], "ShaderAssignment.shader" )
		self.assertEqual( dirtiedNames[1], "ShaderAssignment.out.attributes" )
		self.assertEqual( dirtiedNames[2], "ShaderAssignment.out" )
Esempio n. 7
0
	def testFixedCoshaderArrayParameterHash( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderArrayParameters.sl" )
		n = GafferRenderMan.RenderManShader()
		n.loadShader( shader )
		
		h1 = n.stateHash()
		
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		n["parameters"]["fixedShaderArray"]["fixedShaderArray0"].setInput( coshaderNode["out"] )
	
		h2 = n.stateHash()
		self.assertNotEqual( h2, h1 )
		
		n["parameters"]["fixedShaderArray"]["fixedShaderArray1"].setInput( coshaderNode["out"] )
		
		h3 = n.stateHash()
		self.assertNotEqual( h3, h2 )
		self.assertNotEqual( h3, h1 )

		n["parameters"]["fixedShaderArray"]["fixedShaderArray1"].setInput( None )
		n["parameters"]["fixedShaderArray"]["fixedShaderArray2"].setInput( coshaderNode["out"] )

		h4 = n.stateHash()
		self.assertNotEqual( h4, h3 )
		self.assertNotEqual( h4, h2 )
		self.assertNotEqual( h4, h1 )
Esempio n. 8
0
    def testRender(self):

        s = Gaffer.ScriptNode()

        s["l"] = GafferRenderMan.RenderManLight()
        s["l"].loadShader("pointlight")
        s["l"]["parameters"]["lightcolor"].setValue(
            IECore.Color3f(1, 0.5, 0.25))
        s["l"]["transform"]["translate"]["z"].setValue(1)

        s["p"] = GafferScene.Plane()

        s["c"] = GafferScene.Camera()
        s["c"]["transform"]["translate"]["z"].setValue(1)

        s["g"] = GafferScene.Group()
        s["g"]["in"].setInput(s["l"]["out"])
        s["g"]["in1"].setInput(s["p"]["out"])
        s["g"]["in2"].setInput(s["c"]["out"])

        s["s"] = GafferRenderMan.RenderManShader()
        s["s"].loadShader("matte")
        s["a"] = GafferScene.ShaderAssignment()
        s["a"]["in"].setInput(s["g"]["out"])
        s["a"]["shader"].setInput(s["s"]["out"])

        s["d"] = GafferScene.Outputs()
        s["d"].addOutput(
            "beauty",
            IECore.Display("/tmp/testRenderManLight.exr", "exr", "rgba",
                           {"quantize": IECore.FloatVectorData([0, 0, 0, 0])}))
        s["d"]["in"].setInput(s["a"]["out"])

        s["o"] = GafferScene.StandardOptions()
        s["o"]["options"]["renderCamera"]["value"].setValue("/group/camera")
        s["o"]["options"]["renderCamera"]["enabled"].setValue(True)
        s["o"]["in"].setInput(s["d"]["out"])

        s["r"] = GafferRenderMan.RenderManRender()
        s["r"]["ribFileName"].setValue("/tmp/testRenderManLight.rib")
        s["r"]["in"].setInput(s["o"]["out"])

        # must save the script for the procedural to load it
        # in the render process. if we were using a dispatcher,
        # that would have saved the script for us, but we're
        # calling execute() directly so it is our responsibility.
        s["fileName"].setValue("/tmp/testRenderManLight.gfr")
        s.save()

        s["r"].execute()

        i = IECore.EXRImageReader("/tmp/testRenderManLight.exr").read()
        e = IECore.ImagePrimitiveEvaluator(i)
        r = e.createResult()
        e.pointAtUV(IECore.V2f(0.5), r)

        self.assertEqual(r.floatPrimVar(e.R()), 1)
        self.assertEqual(r.floatPrimVar(e.G()), 0.5)
        self.assertEqual(r.floatPrimVar(e.B()), 0.25)
Esempio n. 9
0
    def testRender(self):

        s = Gaffer.ScriptNode()
        s["fileName"].setValue("/tmp/testRenderManLight.gfr")

        s["l"] = GafferRenderMan.RenderManLight()
        s["l"].loadShader("pointlight")
        s["l"]["parameters"]["lightcolor"].setValue(
            IECore.Color3f(1, 0.5, 0.25))
        s["l"]["transform"]["translate"]["z"].setValue(1)

        s["p"] = GafferScene.Plane()

        s["c"] = GafferScene.Camera()
        s["c"]["transform"]["translate"]["z"].setValue(1)

        s["g"] = GafferScene.Group()
        s["g"]["in"].setInput(s["l"]["out"])
        s["g"]["in1"].setInput(s["p"]["out"])
        s["g"]["in2"].setInput(s["c"]["out"])

        s["s"] = GafferRenderMan.RenderManShader()
        s["s"].loadShader("matte")
        s["a"] = GafferScene.ShaderAssignment()
        s["a"]["in"].setInput(s["g"]["out"])
        s["a"]["shader"].setInput(s["s"]["out"])

        s["d"] = GafferScene.Displays()
        s["d"].addDisplay(
            "beauty",
            IECore.Display("/tmp/testRenderManLight.exr", "exr", "rgba",
                           {"quantize": IECore.FloatVectorData([0, 0, 0, 0])}))
        s["d"]["in"].setInput(s["a"]["out"])

        s["o"] = GafferScene.StandardOptions()
        s["o"]["options"]["renderCamera"]["value"].setValue("/group/camera")
        s["o"]["options"]["renderCamera"]["enabled"].setValue(True)
        s["o"]["in"].setInput(s["d"]["out"])

        s["r"] = GafferRenderMan.RenderManRender()
        s["r"]["ribFileName"].setValue("/tmp/testRenderManLight.rib")
        s["r"]["in"].setInput(s["o"]["out"])

        ## \todo This fails because ExecutableRender::execute() doesn't wait for the
        # subprocess to complete as it should. We need to make it wait, but we can't
        # do that until we're using the LocalDespatcher in gui applications.
        s["r"].execute([Gaffer.Context.current()])

        i = IECore.EXRImageReader("/tmp/testRenderManLight.exr").read()
        e = IECore.ImagePrimitiveEvaluator(i)
        r = e.createResult()
        e.pointAtUV(IECore.V2f(0.5), r)

        self.assertEqual(r.floatPrimVar(e.R()), 1)
        self.assertEqual(r.floatPrimVar(e.G()), 0.5)
        self.assertEqual(r.floatPrimVar(e.B()), 0.25)
Esempio n. 10
0
def __nodeCreator( nodeName, shaderName ) :

	shader = GafferRenderMan.RenderManShader.shaderLoader().read( shaderName + ".sdl" )
	if shader.type == "light" :
		node = GafferRenderMan.RenderManLight( nodeName )
	else :
		node = GafferRenderMan.RenderManShader( nodeName )
	
	node.loadShader( shaderName )
	
	return node
Esempio n. 11
0
	def testCorrespondingInput( self ) :
	
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		self.assertEqual( coshaderNode.correspondingInput( coshaderNode["out"] ), None )
		
		coshader2 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderWithPassThrough.sl" )
		coshaderNode2 = GafferRenderMan.RenderManShader()
		coshaderNode2.loadShader( coshader2 )
		self.assertTrue( coshaderNode2.correspondingInput( coshaderNode2["out"] ).isSame( coshaderNode2["parameters"]["aColorIWillTint"] ) )
Esempio n. 12
0
    def testHiddenLight(self):

        s = Gaffer.ScriptNode()
        s["fileName"].setValue(self.temporaryDirectory() + "/test.gfr")

        s["l"] = GafferRenderMan.RenderManLight()
        s["l"]["name"].setValue("myLight")
        s["l"].loadShader("pointlight")

        s["g"] = GafferScene.Group()
        s["g"]["in"][0].setInput(s["l"]["out"])

        s["f1"] = GafferScene.PathFilter()
        s["f2"] = GafferScene.PathFilter()

        s["a1"] = GafferScene.StandardAttributes()
        s["a1"]["attributes"]["visibility"]["enabled"].setValue(True)
        s["a1"]["attributes"]["visibility"]["value"].setValue(False)
        s["a1"]["in"].setInput(s["g"]["out"])
        s["a1"]["filter"].setInput(s["f1"]["out"])

        s["a2"] = GafferScene.StandardAttributes()
        s["a2"]["attributes"]["visibility"]["enabled"].setValue(True)
        s["a2"]["attributes"]["visibility"]["value"].setValue(True)
        s["a2"]["in"].setInput(s["a1"]["out"])
        s["a2"]["filter"].setInput(s["f2"]["out"])

        s["r"] = GafferRenderMan.RenderManRender()
        s["r"]["mode"].setValue("generate")
        s["r"]["ribFileName"].setValue(self.temporaryDirectory() + "/test.rib")
        s["r"]["in"].setInput(s["a2"]["out"])

        s["r"].execute()
        rib = "\n".join(
            file(self.temporaryDirectory() + "/test.rib").readlines())
        self.assertTrue("LightSource \"pointlight\"" in rib)

        s["f1"]["paths"].setValue(IECore.StringVectorData(["/group"
                                                           ]))  # hide group

        s["r"].execute()
        rib = "\n".join(
            file(self.temporaryDirectory() + "/test.rib").readlines())
        self.assertTrue("LightSource \"pointlight\"" not in rib)

        s["f2"]["paths"].setValue(IECore.StringVectorData(
            ["/group/myLight"]))  # show coordsys (but parent still hidden)

        s["r"].execute()
        rib = "\n".join(
            file(self.temporaryDirectory() + "/test.rib").readlines())
        self.assertTrue("LightSource \"pointlight\"" not in rib)
Esempio n. 13
0
    def testSampleMotion(self):

        s = Gaffer.ScriptNode()
        s["fileName"].setValue(self.temporaryDirectory() + "/test.gfr")

        s["p"] = GafferScene.Plane()

        s["o"] = GafferScene.StandardOptions()
        s["o"]["in"].setInput(s["p"]["out"])

        s["r"] = GafferRenderMan.RenderManRender()
        s["r"]["mode"].setValue("generate")
        s["r"]["ribFileName"].setValue(self.temporaryDirectory() + "/test.rib")
        s["r"]["in"].setInput(s["o"]["out"])

        s["r"]["task"].execute()
        rib = file(self.temporaryDirectory() + "/test.rib").read()
        self.assertFalse("sampleMotion" in rib)

        s["o"]["options"]["sampleMotion"]["enabled"].setValue(True)
        s["o"]["options"]["sampleMotion"]["value"].setValue(False)

        s["r"]["task"].execute()
        rib = file(self.temporaryDirectory() + "/test.rib").read()
        self.assertTrue('"int samplemotion" [ 0 ]' in rib)
Esempio n. 14
0
    def testPreWorldRenderables(self):

        s = Gaffer.ScriptNode()

        s["g"] = GafferSceneTest.CompoundObjectSource()
        s["g"]["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(IECore.Box3f()),
                "globals": {
                    "option:user:blah": IECore.ClippingPlane(),
                },
            }))

        s["r"] = GafferRenderMan.RenderManRender()
        s["r"]["mode"].setValue("generate")
        s["r"]["ribFileName"].setValue(self.temporaryDirectory() + "/test.rib")
        s["r"]["in"].setInput(s["g"]["out"])

        s["r"].execute()

        # node should have inserted a ClippingPlane into the rib by putting it
        # in the options:
        rib = "\n".join(
            file(self.temporaryDirectory() + "/test.rib").readlines())
        self.assertTrue("ClippingPlane" in rib)
Esempio n. 15
0
    def testDynamicLoadProcedural(self):

        s = Gaffer.ScriptNode()

        s["plane"] = GafferScene.Plane()

        s["render"] = GafferRenderMan.RenderManRender()
        s["render"]["in"].setInput(s["plane"]["out"])
        s["render"]["mode"].setValue("generate")

        s["render"]["ribFileName"].setValue(self.temporaryDirectory() +
                                            "/test.rib")

        s["fileName"].setValue(self.temporaryDirectory() + "/test.gfr")
        s.save()

        s["render"].execute()

        self.assertTrue(os.path.exists(self.temporaryDirectory() +
                                       "/test.rib"))

        rib = "\n".join(
            file(self.temporaryDirectory() + "/test.rib").readlines())
        self.assertTrue("DynamicLoad" in rib)
        self.assertFalse("Polygon" in rib)
Esempio n. 16
0
	def testOutputParameters( self ) :

		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/version3.sl" )
		n = GafferRenderMan.RenderManShader()
		n.loadShader( shader )
		
		self.failIf( "outputFloat" in n["parameters"].keys() )
Esempio n. 17
0
    def testChildNamesUpdateCrash(self):

        # build a scene with a reasonably large hierarchy:
        plane = GafferScene.Plane()
        plane["dimensions"].setValue(IECore.V2f(1000, 1000))
        seeds = GafferScene.Seeds()
        seeds["in"].setInput(plane["out"])
        seeds["parent"].setValue("/plane")
        seeds["density"].setValue(0.01)
        sphere = GafferScene.Sphere()

        instancer = GafferScene.Instancer()
        instancer["parent"].setValue("/plane/seeds")
        instancer["in"].setInput(seeds["out"])
        instancer["instance"].setInput(sphere["out"])

        r = GafferRenderMan.InteractiveRenderManRender()
        r["in"].setInput(instancer["out"])
        r["state"].setValue(r.State.Running)

        # change the child names a couple of times. There was a problem
        # where a childnames check was happening asynchronously, leading
        # to a crash, so we're gonna check this has been fixed:

        seeds["density"].setValue(0)
        seeds["density"].setValue(0.01)

        r["state"].setValue(r.State.Stopped)
Esempio n. 18
0
	def testParameterOrdering( self ) :
	
		n = GafferRenderMan.RenderManShader()
		n.loadShader( "plastic" )
		
		self.assertEqual( n["parameters"][0].getName(), "Ks" )
		self.assertEqual( n["parameters"][1].getName(), "Kd" )
		self.assertEqual( n["parameters"][2].getName(), "Ka" )
		self.assertEqual( n["parameters"][3].getName(), "roughness" )
		self.assertEqual( n["parameters"][4].getName(), "specularcolor" )
		
		n = GafferRenderMan.RenderManShader()
		n.loadShader( "matte" )
		
		self.assertEqual( n["parameters"][0].getName(), "Ka" )
		self.assertEqual( n["parameters"][1].getName(), "Kd" )
Esempio n. 19
0
    def testBoundsAndImageOutput(self):

        s = Gaffer.ScriptNode()

        s["plane"] = GafferScene.Plane()
        s["plane"]["transform"]["translate"].setValue(IECore.V3f(0, 0, -5))

        s["outputs"] = GafferScene.Outputs()
        s["outputs"].addOutput(
            "beauty", IECore.Display("/tmp/test.tif", "tiff", "rgba", {}))
        s["outputs"]["in"].setInput(s["plane"]["out"])

        s["render"] = GafferRenderMan.RenderManRender()
        s["render"]["in"].setInput(s["outputs"]["out"])
        s["render"]["mode"].setValue("generate")

        s["render"]["ribFileName"].setValue("/tmp/test.rib")

        s["fileName"].setValue("/tmp/test.gfr")
        s.save()

        s["render"].execute()

        self.assertTrue(os.path.exists("/tmp/test.rib"))

        p = subprocess.Popen("renderdl " + "/tmp/test.rib",
                             shell=True,
                             stderr=subprocess.PIPE)
        p.wait()

        self.failIf("exceeded its bounds" in "".join(p.stderr.readlines()))

        self.assertTrue(os.path.exists("/tmp/test.tif"))
Esempio n. 20
0
	def testCoshaderType( self ) :
	
		coshader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshader.sl" )
		coshaderNode = GafferRenderMan.RenderManShader()
		coshaderNode.loadShader( coshader )
		
		self.assertEqual( coshaderNode.state()[0].type, "ri:shader" )
Esempio n. 21
0
	def testParameterDefaultValue( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/coshaderParameter.sl" )
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader )
		
		self.assertEqual( shaderNode["parameters"]["floatParameter"].defaultValue(), 1 )
Esempio n. 22
0
	def testArrayParameters( self ) :
	
		shader = self.compileShader( os.path.dirname( __file__ ) + "/shaders/arrayParameters.sl" )
		n = GafferRenderMan.RenderManShader()
		n.loadShader( shader )
		
		expected = {
			"dynamicFloatArray" : IECore.FloatVectorData( [] ),
			"fixedFloatArray" : IECore.FloatVectorData( [ 1, 2, 3, 4 ] ),
			"dynamicStringArray" : IECore.StringVectorData( [ "dynamic", "arrays", "can", "still", "have", "defaults" ] ),
			"fixedStringArray" : IECore.StringVectorData( [ "hello", "goodbye" ] ),
			"dynamicColorArray" : IECore.Color3fVectorData( [ IECore.Color3f( 1 ), IECore.Color3f( 2 ) ] ),
			"fixedColorArray" : IECore.Color3fVectorData( [ IECore.Color3f( 1 ), IECore.Color3f( 2 ) ] ),
			"dynamicVectorArray" : IECore.V3fVectorData( [] ),
			"fixedVectorArray" : IECore.V3fVectorData( [ IECore.V3f( x ) for x in range( 1, 6 ) ] ),
			"dynamicPointArray" : IECore.V3fVectorData( [] ),
			"fixedPointArray" : IECore.V3fVectorData( [ IECore.V3f( x ) for x in range( 1, 6 ) ] ),
			"dynamicNormalArray" : IECore.V3fVectorData( [] ),
			"fixedNormalArray" : IECore.V3fVectorData( [ IECore.V3f( x ) for x in range( 1, 6 ) ] ),
		}
		
		self.assertEqual( set( n["parameters"].keys() ), set( expected.keys() ) )
		
		for name, value in expected.items() :
		
			self.assertEqual( n["parameters"][name].defaultValue(), value )
			self.assertEqual( n["parameters"][name].getValue(), value )
		
		s = n.state()[0]
		
		for name, value in expected.items() :
		
			self.assertEqual( s.parameters[name], value )
Esempio n. 23
0
	def testReload( self ) :
	
		shader1 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/version1.sl" )
		
		shaderNode = GafferRenderMan.RenderManShader()
		shaderNode.loadShader( shader1 )
		shaderNode["parameters"]["float1"].setValue( 0.1 )
		shaderNode["parameters"]["string1"].setValue( "test" )
		shaderNode["parameters"]["color1"].setValue( IECore.Color3f( 1, 2, 3 ) )
		self.assertAlmostEqual( shaderNode["parameters"]["float1"].getValue(), 0.1 )
		self.assertEqual( shaderNode["parameters"]["string1"].getValue(), "test" )
		self.assertEqual( shaderNode["parameters"]["color1"].getValue(), IECore.Color3f( 1, 2, 3 ) )
		
		shader2 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/version2.sl" )
		shaderNode.loadShader( shader2, keepExistingValues=True )
		
		self.assertEqual( shaderNode["parameters"].keys(), [ "float1", "string1", "color1", "float2", "string2", "color2" ] )
		self.assertAlmostEqual( shaderNode["parameters"]["float1"].getValue(), 0.1 )
		self.assertEqual( shaderNode["parameters"]["string1"].getValue(), "test" )
		self.assertEqual( shaderNode["parameters"]["color1"].getValue(), IECore.Color3f( 1, 2, 3 ) )
		
		shaderNode.loadShader( shader1, keepExistingValues=True )
		
		self.assertEqual( shaderNode["parameters"].keys(), [ "float1", "string1", "color1" ] )
		self.assertAlmostEqual( shaderNode["parameters"]["float1"].getValue(), 0.1 )
		self.assertEqual( shaderNode["parameters"]["string1"].getValue(), "test" )
		self.assertEqual( shaderNode["parameters"]["color1"].getValue(), IECore.Color3f( 1, 2, 3 ) )

		shaderNode.loadShader( shader1, keepExistingValues=False )
		
		self.assertEqual( shaderNode["parameters"].keys(), [ "float1", "string1", "color1" ] )
		self.assertEqual( shaderNode["parameters"]["float1"].getValue(), 1 )
		self.assertEqual( shaderNode["parameters"]["string1"].getValue(), "" )
		self.assertEqual( shaderNode["parameters"]["color1"].getValue(), IECore.Color3f( 1, 1, 1 ) )
Esempio n. 24
0
	def testReloadPreservesConnectionsWhenMinMaxOrDefaultChanges( self ) :
	
		shader1 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/version1.sl", shaderName = "unversioned" )
		n = GafferRenderMan.RenderManShader()
		n.loadShader( shader1 )
		
		self.assertFalse( n["parameters"]["float1"].hasMinValue() )
		self.assertFalse( n["parameters"]["float1"].hasMaxValue() )
		self.assertEqual( n["parameters"]["string1"].defaultValue(), "" )
		
		nn = Gaffer.Node()
		nn["outFloat"] = Gaffer.FloatPlug( direction = Gaffer.Plug.Direction.Out )
		nn["outString"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out )
		
		n["parameters"]["float1"].setInput( nn["outFloat"] )
		n["parameters"]["string1"].setInput( nn["outString"] )
		
		shader2 = self.compileShader( os.path.dirname( __file__ ) + "/shaders/version2.sl", shaderName = "unversioned" )
				
		GafferRenderMan.RenderManShader.shaderLoader().clear()
		n.loadShader( shader1, keepExistingValues=True )
		
		self.assertTrue( n["parameters"]["float1"].hasMinValue() )
		self.assertTrue( n["parameters"]["float1"].hasMaxValue() )
		self.assertEqual( n["parameters"]["float1"].minValue(), -1 )
		self.assertEqual( n["parameters"]["float1"].maxValue(), 2 )
		self.assertEqual( n["parameters"]["string1"].defaultValue(), "newDefaultValue" )
		
		self.assertTrue( n["parameters"]["float1"].getInput().isSame( nn["outFloat"] ) )
		self.assertTrue( n["parameters"]["string1"].getInput().isSame( nn["outString"] ) )
Esempio n. 25
0
    def testPromotedCameraHitMode(self):

        b = Gaffer.Box()
        b["a"] = GafferRenderMan.RenderManAttributes()

        p = b.promotePlug(b["a"]["attributes"]["cameraHitMode"])
        self.assertEqual(Gaffer.NodeAlgo.presets(p["value"]),
                         ["Shader", "Primitive"])
Esempio n. 26
0
	def testShaderHash( self ) :
	
		n = GafferRenderMan.RenderManShader()
		n.loadShader( "checker" )
		h1 = n.stateHash()
		
		n["parameters"]["Kd"].setValue( 0.25 )
		self.assertNotEqual( n.stateHash(), h1 )
Esempio n. 27
0
    def testRenderingDuringScriptDeletion(self):

        s = Gaffer.ScriptNode()

        s["p"] = GafferScene.Plane()
        s["c"] = GafferScene.Camera()
        s["c"]["transform"]["translate"]["z"].setValue(1)

        s["g"] = GafferScene.Group()
        s["g"]["in"].setInput(s["p"]["out"])
        s["g"]["in1"].setInput(s["c"]["out"])

        s["d"] = GafferScene.Outputs()
        s["d"].addOutput(
            "beauty",
            IECore.Display(
                "test", "ieDisplay", "rgba", {
                    "driverType": "ClientDisplayDriver",
                    "displayHost": "localhost",
                    "displayPort": "1559",
                    "remoteDisplayType": "GafferImage::GafferDisplayDriver",
                    "quantize": IECore.IntVectorData([0, 0, 0, 0]),
                }))

        s["d"]["in"].setInput(s["g"]["out"])

        s["m"] = GafferImage.Display()

        # connect a python function to the Display node image and data
        # received signals. this emulates what the UI does.
        def __displayCallback(plug):
            pass

        c = (
            s["m"].imageReceivedSignal().connect(__displayCallback),
            s["m"].dataReceivedSignal().connect(__displayCallback),
        )

        s["o"] = GafferScene.StandardOptions()
        s["o"]["in"].setInput(s["d"]["out"])
        s["o"]["options"]["renderCamera"]["enabled"].setValue(True)
        s["o"]["options"]["renderCamera"]["value"].setValue("/group/plane")

        s["r"] = GafferRenderMan.InteractiveRenderManRender()
        s["r"]["in"].setInput(s["o"]["out"])

        s["r"]["state"].setValue(s["r"].State.Running)

        time.sleep(1)

        # delete the script while the render is still progressing. when
        # this occurs, deletion of the render node will be triggered, which
        # will in turn stop the render. this may flush data to the display,
        # in which case it will emit its data and image received signals
        # on a separate thread. if we're still holding the gil on the main
        # thread when this happens, we'll get a deadlock.
        del s
Esempio n. 28
0
    def testHash(self):

        c = Gaffer.Context()
        c.setFrame(1)
        c2 = Gaffer.Context()
        c2.setFrame(2)

        s = Gaffer.ScriptNode()
        s["plane"] = GafferScene.Plane()
        s["outputs"] = GafferScene.Outputs()
        s["outputs"]["in"].setInput(s["plane"]["out"])
        s["outputs"].addOutput(
            "beauty",
            IECore.Display("$renderDirectory/test.####.exr", "exr", "rgba",
                           {}))
        s["render"] = GafferRenderMan.RenderManRender()

        # no input scene produces no effect
        with c:
            self.assertEqual(s["render"]["task"].hash(), IECore.MurmurHash())

        # now theres an scene to render, we get some output
        s["render"]["in"].setInput(s["outputs"]["out"])
        with c:
            self.assertNotEqual(s["render"]["task"].hash(),
                                IECore.MurmurHash())

        # output varies by time
        with c:
            h1 = s["render"]["task"].hash()
        with c2:
            h2 = s["render"]["task"].hash()
        self.assertNotEqual(h1, h2)

        # output varies by new Context entries
        with c:
            current = s["render"]["task"].hash()
            c["renderDirectory"] = self.temporaryDirectory() + "/renderTests"
            self.assertNotEqual(s["render"]["task"].hash(), current)

        # output varies by changed Context entries
        with c:
            current = s["render"]["task"].hash()
            c["renderDirectory"] = self.temporaryDirectory() + "/renderTests2"
            self.assertNotEqual(s["render"]["task"].hash(), current)

        # output doesn't vary by ui Context entries
        with c:
            current = s["render"]["task"].hash()
            c["ui:something"] = "alterTheUI"
            self.assertEqual(s["render"]["task"].hash(), current)

        # also varies by input node
        with c:
            current = s["render"]["task"].hash()
            s["render"]["in"].setInput(s["plane"]["out"])
            self.assertNotEqual(s["render"]["task"].hash(), current)
Esempio n. 29
0
    def testWedge(self):

        s = Gaffer.ScriptNode()

        s["sphere"] = GafferScene.Sphere()
        s["sphere"]["sets"].setValue("${wedge:value}")

        s["filter"] = GafferScene.SetFilter()
        s["filter"]["set"].setValue("hidden")

        s["attributes"] = GafferScene.StandardAttributes()
        s["attributes"]["attributes"]["visibility"]["enabled"].setValue(True)
        s["attributes"]["attributes"]["visibility"]["value"].setValue(False)
        s["attributes"]["filter"].setInput(s["filter"]["out"])
        s["attributes"]["in"].setInput(s["sphere"]["out"])

        s["outputs"] = GafferScene.Outputs()
        s["outputs"].addOutput(
            "beauty",
            IECore.Display("/tmp/${wedge:value}.tif", "tiff", "rgba", {}))
        s["outputs"]["in"].setInput(s["attributes"]["out"])

        s["render"] = GafferRenderMan.RenderManRender()
        s["render"]["ribFileName"].setValue("/tmp/test.rib")
        s["render"]["in"].setInput(s["outputs"]["out"])

        s["wedge"] = Gaffer.Wedge()
        s["wedge"]["mode"].setValue(int(s["wedge"].Mode.StringList))
        s["wedge"]["strings"].setValue(
            IECore.StringVectorData(["visible", "hidden"]))
        s["wedge"]["requirements"][0].setInput(s["render"]["requirement"])

        s["fileName"].setValue("/tmp/test.gfr")
        s.save()

        dispatcher = Gaffer.LocalDispatcher()
        dispatcher["jobsDirectory"].setValue("/tmp/testJobDirectory")
        dispatcher["framesMode"].setValue(
            Gaffer.Dispatcher.FramesMode.CurrentFrame)
        dispatcher["executeInBackground"].setValue(False)

        dispatcher.dispatch([s["wedge"]])

        hidden = GafferImage.ImageReader()
        hidden["fileName"].setValue("/tmp/hidden.tif")

        visible = GafferImage.ImageReader()
        visible["fileName"].setValue("/tmp/visible.tif")

        hiddenStats = GafferImage.ImageStats()
        hiddenStats["in"].setInput(hidden["out"])

        visibleStats = GafferImage.ImageStats()
        visibleStats["in"].setInput(visible["out"])

        self.assertLess(hiddenStats["average"].getValue()[0], 0.05)
        self.assertGreater(visibleStats["average"].getValue()[0], .35)
Esempio n. 30
0
	def testRenderingDuringScriptDeletion( self ) :

		s = Gaffer.ScriptNode()

		s["p"] = GafferScene.Plane()
		s["c"] = GafferScene.Camera()
		s["c"]["transform"]["translate"]["z"].setValue( 1 )

		s["g"] = GafferScene.Group()
		s["g"]["in"][0].setInput( s["p"]["out"] )
		s["g"]["in"][1].setInput( s["c"]["out"] )

		s["d"] = GafferScene.Outputs()
		s["d"].addOutput(
			"beauty",
			IECore.Display(
				"test",
				"ieDisplay",
				"rgba",
				{
					"driverType" : "ClientDisplayDriver",
					"displayHost" : "localhost",
					"displayPort" : "1559",
					"remoteDisplayType" : "GafferImage::GafferDisplayDriver",
					"quantize" : IECore.IntVectorData( [ 0, 0, 0, 0 ] ),
				}
			)
		)

		s["d"]["in"].setInput( s["g"]["out"] )

		# Emulate the connection the UI makes, so the Display knows someone is listening and
		# it needs to actually make servers.
		executeOnUIThreadConnection = GafferImage.Display.executeOnUIThreadSignal().connect( lambda f : f() )

		s["m"] = GafferImage.Display()

		s["o"] = GafferScene.StandardOptions()
		s["o"]["in"].setInput( s["d"]["out"] )
		s["o"]["options"]["renderCamera"]["enabled"].setValue( True )
		s["o"]["options"]["renderCamera"]["value"].setValue( "/group/camera" )

		s["r"] = GafferRenderMan.InteractiveRenderManRender()
		s["r"]["in"].setInput( s["o"]["out"] )

		s["r"]["state"].setValue( s["r"].State.Running )

		time.sleep( 1 )

		# delete the script while the render is still progressing. when
		# this occurs, deletion of the render node will be triggered, which
		# will in turn stop the render. this may flush data to the display,
		# in which case it will emit its data and image received signals
		# on a separate thread. if we're still holding the gil on the main
		# thread when this happens, we'll get a deadlock.
		del s