Exemplo n.º 1
0
    def testMotion(self):

        c1 = IECoreScene.CurvesPrimitive(IECore.IntVectorData([4]))
        c2 = IECoreScene.CurvesPrimitive(IECore.IntVectorData([4]))

        c1["P"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([imath.V3f(1)] * 4),
        )

        c2["P"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([imath.V3f(2)] * 4),
        )

        with IECoreArnold.UniverseBlock(writable=True) as universe:

            n = IECoreArnold.NodeAlgo.convert([c1, c2], -0.25, 0.25, universe,
                                              "testCurve")

            a = arnold.AiNodeGetArray(n, "points")
            self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4)
            self.assertEqual(arnold.AiArrayGetNumKeys(a.contents), 2)

            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetVec(a, i),
                                 arnold.AtVector(1))
            for i in range(4, 8):
                self.assertEqual(arnold.AiArrayGetVec(a, i),
                                 arnold.AtVector(2))

            self.assertEqual(arnold.AiNodeGetFlt(n, "motion_start"), -0.25)
            self.assertEqual(arnold.AiNodeGetFlt(n, "motion_end"), 0.25)
Exemplo n.º 2
0
	def testMotion( self ) :

		p1 = IECoreScene.PointsPrimitive( IECore.V3fVectorData( [ imath.V3f( 10 ) ] * 10 ) )
		p1["width"] = IECoreScene.PrimitiveVariable(
			IECoreScene.PrimitiveVariable.Interpolation.Vertex,
			IECore.FloatVectorData( [ 1 ] * 10 ),
		)

		p2 = IECoreScene.PointsPrimitive( IECore.V3fVectorData( [ imath.V3f( 20 ) ] * 10 ) )
		p2["width"] = IECoreScene.PrimitiveVariable(
			IECoreScene.PrimitiveVariable.Interpolation.Vertex,
			IECore.FloatVectorData( [ 2 ] * 10 ),
		)

		with IECoreArnold.UniverseBlock( writable = True ) :

			n = IECoreArnold.NodeAlgo.convert( [ p1, p2 ], -0.25, 0.25, "testPoints" )

			a = arnold.AiNodeGetArray( n, "points" )
			self.assertEqual( arnold.AiArrayGetNumElements( a.contents ), 10 )
			self.assertEqual( arnold.AiArrayGetNumKeys( a.contents ), 2 )

			r = arnold.AiNodeGetArray( n, "radius" )
			self.assertEqual( arnold.AiArrayGetNumElements( r.contents ), 10 )
			self.assertEqual( arnold.AiArrayGetNumKeys( r.contents ), 2 )

			for i in range( 0, 10 ) :
				self.assertEqual( arnold.AiArrayGetVec( a, i ), arnold.AtVector( 10 ) )
				self.assertEqual( arnold.AiArrayGetFlt( r, i ), 0.5 )
			for i in range( 11, 20 ) :
				self.assertEqual( arnold.AiArrayGetVec( a, i ), arnold.AtVector( 20 ) )
				self.assertEqual( arnold.AiArrayGetFlt( r, i ), 1 )

			self.assertEqual( arnold.AiNodeGetFlt( n, "motion_start" ), -0.25 )
			self.assertEqual( arnold.AiNodeGetFlt( n, "motion_end" ), 0.25 )
Exemplo n.º 3
0
    def testNormals(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9)))
        m["N"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0)
            ]))

        mFaceVaryingIndexed = IECoreScene.MeshPrimitive.createBox(
            imath.Box3f(imath.V3f(-0.9), imath.V3f(0.9)))

        mVertexIndexed = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9)), imath.V2i(3))
        mVertexIndexed["N"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([imath.V3f(1, 0, 0),
                                  imath.V3f(-1, 0, 0)]),
            IECore.IntVectorData([0] * 8 + [1] * 8))

        with IECoreArnold.UniverseBlock(writable=True) as universe:

            n = IECoreArnold.NodeAlgo.convert(m, universe, "testMesh")

            normals = arnold.AiNodeGetArray(n, "nlist")
            self.assertEqual(arnold.AiArrayGetNumElements(normals.contents), 4)

            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetVec(normals, i),
                                 arnold.AtVector(1, 0, 0))

            n = IECoreArnold.NodeAlgo.convert(mFaceVaryingIndexed, universe,
                                              "testMesh2")
            normals = arnold.AiNodeGetArray(n, "nlist")
            normalIndices = arnold.AiNodeGetArray(n, "nidxs")

            refNormals = [(0, 0, -1), (1, 0, 0), (0, 0, 1), (-1, 0, 0),
                          (0, 1, 0), (0, -1, 0)]
            for i in range(0, 24):
                self.assertEqual(
                    arnold.AiArrayGetVec(
                        normals, arnold.AiArrayGetInt(normalIndices, i)),
                    arnold.AtVector(*refNormals[i // 4]))

            n = IECoreArnold.NodeAlgo.convert(mVertexIndexed, universe,
                                              "testMesh3")
            normals = arnold.AiNodeGetArray(n, "nlist")
            normalIndices = arnold.AiNodeGetArray(n, "nidxs")
            for i in range(0, 36):
                s = [0, (i // 2) % 2, 1][i // 12]
                self.assertEqual(
                    arnold.AiArrayGetVec(
                        normals, arnold.AiArrayGetInt(normalIndices, i)),
                    arnold.AtVector(-1 if s else 1, 0, 0))
Exemplo n.º 4
0
    def testNPrimitiveVariable(self):

        c = IECore.CurvesPrimitive(IECore.IntVectorData([4]),
                                   IECore.CubicBasisf.catmullRom())
        c["P"] = IECore.PrimitiveVariable(
            IECore.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([IECore.V3f(x, 0, 0) for x in range(0, 4)]))

        with IECoreArnold.UniverseBlock(writable=True):

            # No N - should be a ribbon

            n = IECoreArnold.NodeAlgo.convert(c)
            self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "ribbon")
            self.assertEqual(
                arnold.AiNodeGetArray(n, "orientations").contents.nelements, 0)

            # N - should be oriented

            c["N"] = IECore.PrimitiveVariable(
                IECore.PrimitiveVariable.Interpolation.Vertex,
                IECore.V3fVectorData([
                    IECore.V3f(0, math.sin(x), math.cos(x))
                    for x in range(0, 4)
                ]))

            n = IECoreArnold.NodeAlgo.convert(c)
            self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "oriented")
            orientations = arnold.AiNodeGetArray(n, "orientations")
            self.assertEqual(orientations.contents.nelements, 4)

            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetVec(orientations, i),
                                 arnold.AtVector(0, math.sin(i), math.cos(i)))

            # Motion blurred N - should be oriented and deforming

            c2 = c.copy()
            c2["N"] = IECore.PrimitiveVariable(
                IECore.PrimitiveVariable.Interpolation.Vertex,
                IECore.V3fVectorData([
                    IECore.V3f(0, math.sin(x + 0.2), math.cos(x + 0.2))
                    for x in range(0, 4)
                ]))

            n = IECoreArnold.NodeAlgo.convert([c, c2], [0.0, 1.0])
            self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "oriented")

            orientations = arnold.AiNodeGetArray(n, "orientations")
            self.assertEqual(orientations.contents.nelements, 4)
            self.assertEqual(orientations.contents.nkeys, 2)

            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetVec(orientations, i),
                                 arnold.AtVector(0, math.sin(i), math.cos(i)))
                self.assertEqual(
                    arnold.AiArrayGetVec(orientations, i + 4),
                    arnold.AtVector(0, math.sin(i + 0.2), math.cos(i + 0.2)))
Exemplo n.º 5
0
    def testMotion(self):

        m1 = IECore.MeshPrimitive.createPlane(
            IECore.Box2f(IECore.V2f(-1), IECore.V2f(1)))
        IECore.MeshNormalsOp()(input=m1, copyInput=False)

        m2 = m1.copy()
        m2["P"].data[0] -= IECore.V3f(0, 0, 1)
        m2["P"].data[1] -= IECore.V3f(0, 0, 1)
        IECore.MeshNormalsOp()(input=m2, copyInput=False)

        with IECoreArnold.UniverseBlock(writable=True):

            node = IECoreArnold.NodeAlgo.convert([m1, m2], -0.25, 0.25,
                                                 "testMesh")

            vList = arnold.AiNodeGetArray(node, "vlist")
            self.assertEqual(arnold.AiArrayGetNumElements(vList.contents), 4)
            self.assertEqual(arnold.AiArrayGetNumKeys(vList.contents), 2)

            nList = arnold.AiNodeGetArray(node, "nlist")
            self.assertEqual(arnold.AiArrayGetNumElements(nList.contents), 4)
            self.assertEqual(arnold.AiArrayGetNumKeys(nList.contents), 2)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec(vList, i)
                self.assertEqual(IECore.V3f(p.x, p.y, p.z), m1["P"].data[i])
                n = arnold.AiArrayGetVec(nList, i)
                self.assertEqual(IECore.V3f(n.x, n.y, n.z), m1["N"].data[i])

            for i in range(4, 8):
                p = arnold.AiArrayGetVec(vList, i)
                self.assertEqual(IECore.V3f(p.x, p.y, p.z),
                                 m2["P"].data[i - 4])
                n = arnold.AiArrayGetVec(nList, i)
                self.assertEqual(IECore.V3f(n.x, n.y, n.z),
                                 m2["N"].data[i - 4])

            self.assertEqual(arnold.AiNodeGetFlt(node, "motion_start"), -0.25)
            self.assertEqual(arnold.AiNodeGetFlt(node, "motion_end"), 0.25)
Exemplo n.º 6
0
    def testVertexPrimitiveVariables(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["myPrimVar"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([0, 1, 2, 3]))
        m["myV3fPrimVar"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([imath.V3f(v) for v in range(0, 4)]))

        with IECoreArnold.UniverseBlock(writable=True) as universe:

            n = IECoreArnold.NodeAlgo.convert(m, universe, "testMesh")
            a = arnold.AiNodeGetArray(n, "myPrimVar")
            v = arnold.AiNodeGetArray(n, "myV3fPrimVar")
            self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4)
            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetFlt(a, i), i)
                self.assertEqual(arnold.AiArrayGetVec(v, i), i)
Exemplo n.º 7
0
    def testVertexPrimitiveVariables(self):

        m = IECore.MeshPrimitive.createPlane(
            IECore.Box2f(IECore.V2f(-1), IECore.V2f(1)))
        m["myPrimVar"] = IECore.PrimitiveVariable(
            IECore.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([0, 1, 2, 3]))
        m["myV3fPrimVar"] = IECore.PrimitiveVariable(
            IECore.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([IECore.V3f(v) for v in range(0, 4)]))

        with IECoreArnold.UniverseBlock():

            n = IECoreArnold.NodeAlgo.convert(m)
            a = arnold.AiNodeGetArray(n, "user:myPrimVar")
            v = arnold.AiNodeGetArray(n, "user:myV3fPrimVar")
            self.assertEqual(a.contents.nelements, 4)
            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetFlt(a, i), i)
                self.assertEqual(arnold.AiArrayGetVec(v, i), i)
Exemplo n.º 8
0
    def testNormals(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9)))
        m["N"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0),
                imath.V3f(1, 0, 0)
            ]))

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")

            normals = arnold.AiNodeGetArray(n, "nlist")
            self.assertEqual(arnold.AiArrayGetNumElements(normals.contents), 4)

            for i in range(0, 4):
                self.assertEqual(arnold.AiArrayGetVec(normals, i),
                                 arnold.AtVector(1, 0, 0))