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]))
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))
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))
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]))
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)
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)
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)
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])
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
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 ) )
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)