Files
UnrealEngine/Engine/Source/ThirdParty/Alembic/alembic-1.8.7/maya/Tests/interpolation_test.py
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

289 lines
15 KiB
Python

##-*****************************************************************************
##
## Copyright (c) 2009-2011,
## Sony Pictures Imageworks, Inc. and
## Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
##
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are
## met:
## * Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
## * Redistributions in binary form must reproduce the above
## copyright notice, this list of conditions and the following disclaimer
## in the documentation and/or other materials provided with the
## distribution.
## * Neither the name of Sony Pictures Imageworks, nor
## Industrial Light & Magic nor the names of their contributors may be used
## to endorse or promote products derived from this software without specific
## prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
##
##-*****************************************************************************
from maya import cmds as MayaCmds
import maya.OpenMaya as OpenMaya
import unittest
import util
import os
class interpolationTest(unittest.TestCase):
def setUp(self):
MayaCmds.file(new=True, force=True)
self.__files = []
def tearDown(self):
for f in self.__files:
os.remove(f)
def testSubD(self):
trans = MayaCmds.polyPlane(n='plane', sx=1, sy=1, ch=False)[0]
shape = MayaCmds.pickWalk(d='down')[0]
MayaCmds.addAttr(attributeType='bool', defaultValue=1, keyable=True,
longName='SubDivisionMesh')
MayaCmds.select(trans+'.vtx[0:3]', r=True)
MayaCmds.move(0, 1, 0, r=True)
MayaCmds.currentTime(1, update=True)
MayaCmds.setKeyframe()
MayaCmds.currentTime(2, update=True)
MayaCmds.move(0, 5, 0, r=True)
MayaCmds.setKeyframe()
self.__files.append(util.expandFileName('testSubDInterpolation.abc'))
MayaCmds.AbcExport(j='-fr 1 2 -root %s -file %s' % (trans, self.__files[-1]))
MayaCmds.AbcImport(self.__files[-1], mode='open')
MayaCmds.currentTime(1.004, update=True)
ty = MayaCmds.getAttr(shape+'.vt[0]')[0][1]
self.failUnlessAlmostEqual(1.02, ty)
setTime = MayaCmds.currentTime(1.422, update=True)
alpha = (setTime - 1) / (2 - 1)
ty = MayaCmds.getAttr(shape+'.vt[0]')[0][1]
self.failUnlessAlmostEqual(ty, (1-alpha)*1.0+alpha*6.0, 3)
def testPoly(self):
trans = MayaCmds.polyPlane(n='plane', sx=1, sy=1, ch=False)[0]
shape = MayaCmds.pickWalk(d='down')[0]
MayaCmds.select(trans+'.vtx[0:3]', r=True)
MayaCmds.move(0, 1, 0, r=True)
MayaCmds.currentTime(1, update=True)
MayaCmds.setKeyframe()
MayaCmds.currentTime(2, update=True)
MayaCmds.move(0, 5, 0, r=True)
MayaCmds.setKeyframe()
self.__files.append(util.expandFileName('testPolyInterpolation.abc'))
MayaCmds.AbcExport(j='-fr 1 2 -root %s -file %s' % (trans, self.__files[-1]))
MayaCmds.AbcImport(self.__files[-1], mode='open')
MayaCmds.currentTime(1.004, update=True)
ty = MayaCmds.getAttr(shape+'.vt[0]')[0][1]
self.failUnlessAlmostEqual(1.02, ty)
setTime = MayaCmds.currentTime(1.422, update=True)
alpha = (setTime - 1) / (2 - 1)
ty = MayaCmds.getAttr(shape+'.vt[0]')[0][1]
self.failUnlessAlmostEqual(ty, (1-alpha)*1.0+alpha*6.0, 3)
def testTransOp(self):
nodeName = MayaCmds.createNode('transform', n='test')
# shear
MayaCmds.setKeyframe(nodeName, value=0, attribute='shearXY', t=1)
MayaCmds.setKeyframe(nodeName, value=0, attribute='shearYZ', t=1)
MayaCmds.setKeyframe(nodeName, value=0, attribute='shearXZ', t=1)
MayaCmds.setKeyframe(nodeName, value=1.5, attribute='shearXY', t=2)
MayaCmds.setKeyframe(nodeName, value=5, attribute='shearYZ', t=2)
MayaCmds.setKeyframe(nodeName, value=2.5, attribute='shearXZ', t=2)
# translate
MayaCmds.setKeyframe('test', value=0, attribute='translateX', t=1)
MayaCmds.setKeyframe('test', value=0, attribute='translateY', t=1)
MayaCmds.setKeyframe('test', value=0, attribute='translateZ', t=1)
MayaCmds.setKeyframe('test', value=1.5, attribute='translateX', t=2)
MayaCmds.setKeyframe('test', value=5, attribute='translateY', t=2)
MayaCmds.setKeyframe('test', value=2.5, attribute='translateZ', t=2)
# rotate
MayaCmds.setKeyframe('test', value=0, attribute='rotateX', t=1)
MayaCmds.setKeyframe('test', value=0, attribute='rotateY', t=1)
MayaCmds.setKeyframe('test', value=0, attribute='rotateZ', t=1)
MayaCmds.setKeyframe('test', value=24, attribute='rotateX', t=2)
MayaCmds.setKeyframe('test', value=53, attribute='rotateY', t=2)
MayaCmds.setKeyframe('test', value=90, attribute='rotateZ', t=2)
# scale
MayaCmds.setKeyframe('test', value=1, attribute='scaleX', t=1)
MayaCmds.setKeyframe('test', value=1, attribute='scaleY', t=1)
MayaCmds.setKeyframe('test', value=1, attribute='scaleZ', t=1)
MayaCmds.setKeyframe('test', value=1.2, attribute='scaleX', t=2)
MayaCmds.setKeyframe('test', value=1.5, attribute='scaleY', t=2)
MayaCmds.setKeyframe('test', value=1.5, attribute='scaleZ', t=2)
# rotate pivot
MayaCmds.setKeyframe('test', value=0.5, attribute='rotatePivotX', t=1)
MayaCmds.setKeyframe('test', value=-0.1, attribute='rotatePivotY', t=1)
MayaCmds.setKeyframe('test', value=1, attribute='rotatePivotZ', t=1)
MayaCmds.setKeyframe('test', value=0.8, attribute='rotatePivotX', t=2)
MayaCmds.setKeyframe('test', value=1.5, attribute='rotatePivotY', t=2)
MayaCmds.setKeyframe('test', value=-1, attribute='rotatePivotZ', t=2)
# scale pivot
MayaCmds.setKeyframe('test', value=1.2, attribute='scalePivotX', t=1)
MayaCmds.setKeyframe('test', value=1.0, attribute='scalePivotY', t=1)
MayaCmds.setKeyframe('test', value=1.2, attribute='scalePivotZ', t=1)
MayaCmds.setKeyframe('test', value=1.4, attribute='scalePivotX', t=2)
MayaCmds.setKeyframe('test', value=1.5, attribute='scalePivotY', t=2)
MayaCmds.setKeyframe('test', value=1.5, attribute='scalePivotZ', t=2)
self.__files.append(util.expandFileName('testTransOpInterpolation.abc'))
MayaCmds.AbcExport(j='-fr 1 2 -root %s -f %s' % (nodeName, self.__files[-1]))
MayaCmds.AbcImport(self.__files[-1], mode='open')
MayaCmds.currentTime(1.004, update=True)
# should read the content of frame #1
self.failUnlessAlmostEqual(0.006, MayaCmds.getAttr('test.shearXY'))
self.failUnlessAlmostEqual(0.02, MayaCmds.getAttr('test.shearYZ'))
self.failUnlessAlmostEqual(0.01, MayaCmds.getAttr('test.shearXZ'))
self.failUnlessAlmostEqual(0.006, MayaCmds.getAttr('test.translateX'))
self.failUnlessAlmostEqual(0.02, MayaCmds.getAttr('test.translateY'))
self.failUnlessAlmostEqual(0.01, MayaCmds.getAttr('test.translateZ'))
self.failUnlessAlmostEqual(0.096, MayaCmds.getAttr('test.rotateX'))
self.failUnlessAlmostEqual(0.212, MayaCmds.getAttr('test.rotateY'))
self.failUnlessAlmostEqual(0.36, MayaCmds.getAttr('test.rotateZ'))
self.failUnlessAlmostEqual(1.0008, MayaCmds.getAttr('test.scaleX'))
self.failUnlessAlmostEqual(1.002, MayaCmds.getAttr('test.scaleY'))
self.failUnlessAlmostEqual(1.002, MayaCmds.getAttr('test.scaleZ'))
self.failUnlessAlmostEqual(0.5012, MayaCmds.getAttr('test.rotatePivotX'))
self.failUnlessAlmostEqual(-0.0936, MayaCmds.getAttr('test.rotatePivotY'))
self.failUnlessAlmostEqual(0.992, MayaCmds.getAttr('test.rotatePivotZ'))
self.failUnlessAlmostEqual(1.2008, MayaCmds.getAttr('test.scalePivotX'))
self.failUnlessAlmostEqual(1.002, MayaCmds.getAttr('test.scalePivotY'))
self.failUnlessAlmostEqual(1.2012, MayaCmds.getAttr('test.scalePivotZ'))
setTime = MayaCmds.currentTime(1.422, update=True)
alpha = (setTime - 1) / (2 - 1)
# should interpolate the content of frame #3 and frame #4
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.shearXY'), (1-alpha)*0+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.shearYZ'), (1-alpha)*0+alpha*5.0)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.shearXZ'), (1-alpha)*0+alpha*2.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.translateX'), (1-alpha)*0+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.translateY'), (1-alpha)*0+alpha*5.0)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.translateZ'), (1-alpha)*0+alpha*2.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotateX'), (1-alpha)*0+alpha*24)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotateY'), (1-alpha)*0+alpha*53)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotateZ'), (1-alpha)*0+alpha*90)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scaleX'), (1-alpha)*1+alpha*1.2)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scaleY'), (1-alpha)*1+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scaleZ'), (1-alpha)*1+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotatePivotX'), (1-alpha)*0.5+alpha*0.8)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotatePivotY'), (1-alpha)*(-0.1)+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.rotatePivotZ'), (1-alpha)*1.0+alpha*(-1.0))
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scalePivotX'), (1-alpha)*1.2+alpha*1.4)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scalePivotY'), (1-alpha)*1.0+alpha*1.5)
self.failUnlessAlmostEqual(MayaCmds.getAttr('test.scalePivotZ'), (1-alpha)*1.2+alpha*1.5)
def testCamera(self):
# create an animated camera and write out
name = MayaCmds.camera()
MayaCmds.setAttr(name[1]+'.horizontalFilmAperture', 0.962)
MayaCmds.setAttr(name[1]+'.verticalFilmAperture', 0.731)
MayaCmds.setAttr(name[1]+'.focalLength', 50)
MayaCmds.setAttr(name[1]+'.focusDistance', 5)
MayaCmds.setAttr(name[1]+'.shutterAngle', 144)
# animate the camera
MayaCmds.currentTime(1, update=True)
MayaCmds.setKeyframe(name[1], attribute='horizontalFilmAperture')
MayaCmds.setKeyframe(name[1], attribute='focalLength')
MayaCmds.setKeyframe(name[1], attribute='focusDistance')
MayaCmds.setKeyframe(name[1], attribute='shutterAngle')
MayaCmds.currentTime(6, update=True)
MayaCmds.setKeyframe(name[1], attribute='horizontalFilmAperture', value=0.95)
MayaCmds.setKeyframe(name[1], attribute='focalLength', value=40)
MayaCmds.setKeyframe(name[1], attribute='focusDistance', value=5.4)
MayaCmds.setKeyframe(name[1], attribute='shutterAngle', value=174.94)
self.__files.append(util.expandFileName('testCameraInterpolation.abc'))
MayaCmds.AbcExport(j='-fr 1 6 -root %s -f %s' % (name[0], self.__files[-1]))
MayaCmds.AbcImport(self.__files[-1], mode='import')
camList = MayaCmds.ls(type='camera')
t = 1.004
MayaCmds.currentTime(t, update=True)
self.failUnlessAlmostEqual(MayaCmds.getAttr(camList[0]+'.horizontalFilmAperture'), 0.962, 3)
setTime = MayaCmds.currentTime(1.422, update=True)
alpha = (setTime - 1) / (2 - 1)
if not util.compareCamera(camList[0], camList[1]):
self.fail('%s and %s are not the same at frame %d' % (camList[0], camList[1], t))
def testProp(self):
trans = MayaCmds.createNode("transform")
# create animated props
MayaCmds.select(trans)
MayaCmds.addAttr(longName='SPT_int8', dv=0, attributeType='byte', keyable=True)
MayaCmds.addAttr(longName='SPT_int16', dv=0, attributeType='short', keyable=True)
MayaCmds.addAttr(longName='SPT_int32', dv=0, attributeType='long', keyable=True)
MayaCmds.addAttr(longName='SPT_float', dv=0, attributeType='float', keyable=True)
MayaCmds.addAttr(longName='SPT_double', dv=0, attributeType='double', keyable=True)
MayaCmds.setKeyframe(trans, value=0, attribute='SPT_int8', t=1)
MayaCmds.setKeyframe(trans, value=100, attribute='SPT_int16', t=1)
MayaCmds.setKeyframe(trans, value=1000, attribute='SPT_int32', t=1)
MayaCmds.setKeyframe(trans, value=0.57777777, attribute='SPT_float', t=1)
MayaCmds.setKeyframe(trans, value=5.045643545457, attribute='SPT_double', t=1)
MayaCmds.setKeyframe(trans, value=8, attribute='SPT_int8', t=2)
MayaCmds.setKeyframe(trans, value=16, attribute='SPT_int16', t=2)
MayaCmds.setKeyframe(trans, value=32, attribute='SPT_int32', t=2)
MayaCmds.setKeyframe(trans, value=3.141592654, attribute='SPT_float', t=2)
MayaCmds.setKeyframe(trans, value=3.141592654, attribute='SPT_double', t=2)
self.__files.append(util.expandFileName('testPropInterpolation.abc'))
MayaCmds.AbcExport(j='-fr 1 2 -atp SPT_ -root %s -f %s' % (trans, self.__files[-1]))
MayaCmds.AbcImport(self.__files[-1], mode='open')
t = 1.004
MayaCmds.currentTime(t, update=True)
self.failUnlessEqual(MayaCmds.getAttr(trans+'.SPT_int8'), 0)
self.failUnlessEqual(MayaCmds.getAttr(trans+'.SPT_int16'), 99)
self.failUnlessEqual(MayaCmds.getAttr(trans+'.SPT_int32'), 996)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_float'), 0.5880330295359999, 7)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_double'), 5.038027341891171, 7)
setTime = MayaCmds.currentTime(1.422, update=True)
alpha = (setTime - 1) / (2 - 1)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_int8'), (1-alpha)*0+alpha*8, -1)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_int16'), (1-alpha)*100+alpha*16, -1)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_int32'), (1-alpha)*1000+alpha*32, -1)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_float'), (1-alpha)*0.57777777+alpha*3.141592654, 6)
self.failUnlessAlmostEqual(MayaCmds.getAttr(trans+'.SPT_double'), (1-alpha)* 5.045643545457+alpha*3.141592654, 6)