예제 #1
0
    def testIndexedUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        uvData = m["uv"].data
        uvIds = m["uv"].indices

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

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

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                aiUv = arnold.AiArrayGetVec2(uvs, i)
                aiUVId = arnold.AiArrayGetInt(uvIndices, i)
                aiIndexedUV = arnold.AiArrayGetVec2(uvs, aiUVId)
                self.assertEqual(aiUVId, uvIds[i])
                self.assertEqual(aiUv,
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(
                    aiIndexedUV,
                    arnold.AtVector2(uvData[uvIds[i]][0], uvData[uvIds[i]][1]))
예제 #2
0
파일: CurvesTest.py 프로젝트: sdot-b/cortex
    def testVertexUVs(self):

        c = IECoreScene.CurvesPrimitive(IECore.IntVectorData([2, 2]),
                                        IECore.CubicBasisf.linear())
        c["P"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V3fVectorData([imath.V3f(x, 0, 0) for x in range(0, 4)]))
        c["uv"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V2fVectorData([
                imath.V2f(1, 2),
                imath.V2f(3, 4),
                imath.V2f(5, 6),
                imath.V2f(7, 8),
            ], IECore.GeometricData.Interpretation.UV))

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

            n = IECoreArnold.NodeAlgo.convert(c, universe, "testCurve")

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

            self.assertEqual(arnold.AiArrayGetVec2(uvs, 0),
                             arnold.AtVector2(1, 2))
            self.assertEqual(arnold.AiArrayGetVec2(uvs, 1),
                             arnold.AtVector2(3, 4))
            self.assertEqual(arnold.AiArrayGetVec2(uvs, 2),
                             arnold.AtVector2(5, 6))
            self.assertEqual(arnold.AiArrayGetVec2(uvs, 3),
                             arnold.AtVector2(7, 8))
예제 #3
0
    def testConvertPerspective(self):

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(
                IECoreScene.Camera(
                    parameters={
                        "projection":
                        "perspective",
                        "projection:fov":
                        45.0,
                        "resolution":
                        imath.V2i(512),
                        "screenWindow":
                        imath.Box2f(imath.V2f(-1, -0.5), imath.V2f(1, 0.5))
                    }), "testCamera")

            self.assertTrue(
                arnold.AiNodeEntryGetName(arnold.AiNodeGetNodeEntry(n)),
                "persp_camera")
            self.assertEqual(arnold.AiNodeGetFlt(n, "fov"), 45.0)

            self.assertEqual(arnold.AiNodeGetVec2(n, "screen_window_min"),
                             arnold.AtVector2(-1, -0.5))
            self.assertEqual(arnold.AiNodeGetVec2(n, "screen_window_max"),
                             arnold.AtVector2(1, 0.5))
예제 #4
0
    def testIndexedUVs(self):

        m = IECore.MeshPrimitive.createPlane(
            IECore.Box2f(IECore.V2f(-1), IECore.V2f(1)))
        m["uv"] = IECore.PrimitiveVariable(
            IECore.PrimitiveVariable.Interpolation.FaceVarying, m["uv"].data,
            IECore.IntVectorData([0, 3, 1, 2]))
        uvData = m["uv"].data
        uvIds = m["uv"].indices

        with IECoreArnold.UniverseBlock(writable=True):

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

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                aiUv = arnold.AiArrayGetVec2(uvs, i)
                aiUVId = arnold.AiArrayGetInt(uvIndices, i)
                aiIndexedUV = arnold.AiArrayGetVec2(uvs, aiUVId)
                self.assertEqual(aiUVId, uvIds[i])
                self.assertEqual(aiUv,
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(
                    aiIndexedUV,
                    arnold.AtVector2(uvData[uvIds[i]][0], uvData[uvIds[i]][1]))
예제 #5
0
    def testExpandVertexIndexedUVs(self):

        vertsPerFace = IECore.IntVectorData([4, 4])
        vertexIds = IECore.IntVectorData([0, 1, 4, 3, 1, 2, 5, 4])
        positions = IECore.V3fVectorData([
            imath.V3f(0, 0, 0),
            imath.V3f(1, 0, 0),
            imath.V3f(2, 0, 0),
            imath.V3f(0, 1, 0),
            imath.V3f(1, 1, 0),
            imath.V3f(2, 1, 0)
        ])

        m = IECoreScene.MeshPrimitive(vertsPerFace, vertexIds, "linear",
                                      positions)
        m["uv"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.V2fVectorData([
                imath.V2f(0, 0),
                imath.V2f(1, 0),
                imath.V2f(0, 1),
                imath.V2f(1, 1)
            ], IECore.GeometricData.Interpretation.UV),
            IECore.IntVectorData([0, 1, 1, 2, 3, 3]))

        self.assertTrue(m.arePrimitiveVariablesValid())

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

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

            uvArray = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvArray.contents), 4)

            self.assertEqual(arnold.AiArrayGetVec2(uvArray, 0),
                             arnold.AtVector2(0, 0))
            self.assertEqual(arnold.AiArrayGetVec2(uvArray, 1),
                             arnold.AtVector2(1, 0))
            self.assertEqual(arnold.AiArrayGetVec2(uvArray, 2),
                             arnold.AtVector2(0, 1))
            self.assertEqual(arnold.AiArrayGetVec2(uvArray, 3),
                             arnold.AtVector2(1, 1))

            uvIndicesArray = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(
                arnold.AiArrayGetNumElements(uvIndicesArray.contents), 8)

            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 0), 0)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 1), 1)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 2), 3)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 3), 2)

            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 4), 1)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 5), 1)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 6), 3)
            self.assertEqual(arnold.AiArrayGetInt(uvIndicesArray, 7), 3)
예제 #6
0
    def testConvertShutterCurve(self):

        with IECoreArnold.UniverseBlock(writable=True):

            camera = IECoreScene.Camera()
            camera.setProjection("perspective")
            camera.parameters()["shutter_curve"] = IECore.Splineff(
                IECore.CubicBasisf.linear(),
                [
                    (0, -0.1),
                    (0.25, 1),
                    (0.75, 1.1),
                    (1.1, 0),
                ],
            )

            node = IECoreArnold.NodeAlgo.convert(camera, "camera")
            curve = arnold.AiNodeGetArray(node, "shutter_curve")
            self.assertEqual(arnold.AiArrayGetNumElements(curve), 4)
            self.assertEqual(arnold.AiArrayGetVec2(curve, 0),
                             arnold.AtVector2(0, 0))
            self.assertEqual(arnold.AiArrayGetVec2(curve, 1),
                             arnold.AtVector2(0.25, 1))
            self.assertEqual(arnold.AiArrayGetVec2(curve, 2),
                             arnold.AtVector2(0.75, 1))
            self.assertEqual(arnold.AiArrayGetVec2(curve, 3),
                             arnold.AtVector2(1, 0))

            camera.parameters()["shutter_curve"] = IECore.Splineff(
                IECore.CubicBasisf.catmullRom(),
                [
                    (0, 0),
                    (0, 0),
                    (0.25, 1),
                    (0.75, 1),
                    (1, 0),
                    (1, 0),
                ],
            )

            node = IECoreArnold.NodeAlgo.convert(camera, "camera")
            curve = arnold.AiNodeGetArray(node, "shutter_curve")
            self.assertEqual(arnold.AiArrayGetNumElements(curve), 25)
            for i in range(0, 25):
                point = arnold.AiArrayGetVec2(curve, i)
                self.assertAlmostEqual(min(
                    camera.parameters()["shutter_curve"].value(point.x), 1),
                                       point.y,
                                       delta=0.0001)
예제 #7
0
    def testUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["uv"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.FaceVarying,
            m["uv"].expandedData())
        uvData = m["uv"].data

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

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

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec2(uvs, i)
                self.assertEqual(arnold.AiArrayGetVec2(uvs, i),
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(arnold.AiArrayGetInt(uvIndices, i), i)
예제 #8
0
    def testAdditionalUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["myMap"] = m["uv"]
        uvData = m["myMap"].data
        indicesData = m["myMap"].indices

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

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

            uvs = arnold.AiNodeGetArray(n, "myMap")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "myMapidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec2(uvs, i)
                self.assertEqual(arnold.AiArrayGetVec2(uvs, i),
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(arnold.AiArrayGetInt(uvIndices, i),
                                 indicesData[i])
예제 #9
0
def __aiMetadataGetVec2(nodeEntry, paramName, name, defaultValue=None):

    value = arnold.AtVector2()
    if arnold.AiMetaDataGetVec2(nodeEntry, paramName, name, value):
        return imath.V2f(value.x, value.y)

    return defaultValue
예제 #10
0
	def testVectorIntData( self ) :

		with IECoreArnold.UniverseBlock( writable = True ) :

			n = arnold.AiNode( "standard_surface" )

			IECoreArnold.ParameterAlgo.setParameter( n, "customV2i", IECore.V2iData( IECore.V2i( 3, 4 ) ) )
			self.assertEqual( arnold.AiNodeGetVec2( n, "customV2i" ), arnold.AtVector2( 3, 4 ) )

			IECoreArnold.ParameterAlgo.setParameter( n, "customV3i", IECore.V3iData( IECore.V3i( 3, 4, 5 ) ) )
			self.assertEqual( arnold.AiNodeGetVec( n, "customV3i" ), arnold.AtVector( 3, 4, 5 ) )
예제 #11
0
    def testUVs(self):

        m = IECore.MeshPrimitive.createPlane(
            IECore.Box2f(IECore.V2f(-1), IECore.V2f(1)))
        uvData = m["uv"].data

        with IECoreArnold.UniverseBlock(writable=True):

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

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec2(uvs, i)
                self.assertEqual(arnold.AiArrayGetVec2(uvs, i),
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(arnold.AiArrayGetInt(uvIndices, i), i)