Пример #1
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)
Пример #2
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]))
Пример #3
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])
Пример #4
0
    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))
Пример #5
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]))
Пример #6
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)
Пример #7
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)
Пример #8
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)
Пример #9
0
    def testConvertAnimatedParameters(self):

        with IECoreArnold.UniverseBlock(writable=True):

            samples = []
            for i in range(0, 2):
                camera = IECoreScene.Camera()
                camera.setProjection("perspective")
                camera.setFocalLengthFromFieldOfView(45 * (i + 1))
                camera.setAperture(imath.V2f(10, 10 + i))
                camera.setFStop(i + 1)
                camera.setFocusDistance(i + 100)
                samples.append(camera)

            animatedNode = IECoreArnold.NodeAlgo.convert(
                samples, 1.0, 2.0, "samples")
            nodes = [
                IECoreArnold.NodeAlgo.convert(samples[i], "sample{}".format(i))
                for i, sample in enumerate(samples)
            ]

            self.assertEqual(arnold.AiNodeGetFlt(animatedNode, "motion_start"),
                             1.0)
            self.assertEqual(arnold.AiNodeGetFlt(animatedNode, "motion_start"),
                             1.0)

            for i, node in enumerate(nodes):

                animatedScreenWindowMin = arnold.AiArrayGetVec2(
                    arnold.AiNodeGetArray(animatedNode, "screen_window_min"),
                    i)
                animatedScreenWindowMax = arnold.AiArrayGetVec2(
                    arnold.AiNodeGetArray(animatedNode, "screen_window_max"),
                    i)

                self.assertEqual(
                    animatedScreenWindowMin.x,
                    arnold.AiNodeGetVec2(node, "screen_window_min").x)
                self.assertEqual(
                    animatedScreenWindowMin.y,
                    arnold.AiNodeGetVec2(node, "screen_window_min").y)
                self.assertEqual(
                    animatedScreenWindowMax.x,
                    arnold.AiNodeGetVec2(node, "screen_window_max").x)
                self.assertEqual(
                    animatedScreenWindowMax.y,
                    arnold.AiNodeGetVec2(node, "screen_window_max").y)

                self.assertEqual(
                    arnold.AiArrayGetFlt(
                        arnold.AiNodeGetArray(animatedNode, "fov"), i),
                    arnold.AiNodeGetFlt(node, "fov"))

                self.assertEqual(
                    arnold.AiArrayGetFlt(
                        arnold.AiNodeGetArray(animatedNode, "aperture_size"),
                        i), arnold.AiNodeGetFlt(node, "aperture_size"))

                self.assertEqual(
                    arnold.AiArrayGetFlt(
                        arnold.AiNodeGetArray(animatedNode, "focus_distance"),
                        i), arnold.AiNodeGetFlt(node, "focus_distance"))

            for parameter in [
                    "screen_window_min",
                    "screen_window_max",
                    "fov",
                    "aperture_size",
                    "focus_distance",
            ]:

                array = arnold.AiNodeGetArray(animatedNode, "fov")
                self.assertEqual(arnold.AiArrayGetNumElements(array), 1)
                self.assertEqual(arnold.AiArrayGetNumKeys(array), 2)