Skip to content

Commit 4508661

Browse files
committed
USD CameraAlgo : Fix writing of animated parameters
1 parent 43e2587 commit 4508661

3 files changed

Lines changed: 47 additions & 16 deletions

File tree

Changes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
10.6.x.x (relative to 10.6.4.0)
22
========
33

4+
Fixes
5+
-----
46

7+
- USDScene : Fixed writing of animated camera parameters.
58

69
10.6.4.0 (relative to 10.6.3.1)
710
========

contrib/IECoreUSD/src/IECoreUSD/CameraAlgo.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -156,27 +156,27 @@ bool writeCamera( const IECoreScene::Camera *camera, const pxr::UsdStagePtr &sta
156156
auto usdCamera = pxr::UsdGeomCamera::Define( stage, path );
157157
if( camera->getProjection() == "orthographic" )
158158
{
159-
usdCamera.GetProjectionAttr().Set( pxr::UsdGeomTokens->orthographic );
159+
usdCamera.GetProjectionAttr().Set( pxr::UsdGeomTokens->orthographic, time );
160160

161161
// For ortho cameras, USD uses aperture units of tenths of scene units
162-
usdCamera.GetHorizontalApertureAttr().Set( 10.0f * camera->getAperture()[0] );
163-
usdCamera.GetVerticalApertureAttr().Set( 10.0f * camera->getAperture()[1] );
164-
usdCamera.GetHorizontalApertureOffsetAttr().Set( 10.0f * camera->getApertureOffset()[0] );
165-
usdCamera.GetVerticalApertureOffsetAttr().Set( 10.0f * camera->getApertureOffset()[1] );
162+
usdCamera.GetHorizontalApertureAttr().Set( 10.0f * camera->getAperture()[0], time );
163+
usdCamera.GetVerticalApertureAttr().Set( 10.0f * camera->getAperture()[1], time );
164+
usdCamera.GetHorizontalApertureOffsetAttr().Set( 10.0f * camera->getApertureOffset()[0], time );
165+
usdCamera.GetVerticalApertureOffsetAttr().Set( 10.0f * camera->getApertureOffset()[1], time );
166166
}
167167
else if( camera->getProjection() == "perspective" )
168168
{
169-
usdCamera.GetProjectionAttr().Set( pxr::UsdGeomTokens->perspective );
169+
usdCamera.GetProjectionAttr().Set( pxr::UsdGeomTokens->perspective, time );
170170

171171
// We store focalLength and aperture in arbitary units. USD uses tenths
172172
// of scene units
173173
float scale = 10.0f * camera->getFocalLengthWorldScale();
174174

175-
usdCamera.GetFocalLengthAttr().Set( camera->getFocalLength() * scale );
176-
usdCamera.GetHorizontalApertureAttr().Set( camera->getAperture()[0] * scale );
177-
usdCamera.GetVerticalApertureAttr().Set( camera->getAperture()[1] * scale );
178-
usdCamera.GetHorizontalApertureOffsetAttr().Set( camera->getApertureOffset()[0] * scale );
179-
usdCamera.GetVerticalApertureOffsetAttr().Set( camera->getApertureOffset()[1] * scale );
175+
usdCamera.GetFocalLengthAttr().Set( camera->getFocalLength() * scale, time );
176+
usdCamera.GetHorizontalApertureAttr().Set( camera->getAperture()[0] * scale, time );
177+
usdCamera.GetVerticalApertureAttr().Set( camera->getAperture()[1] * scale, time );
178+
usdCamera.GetHorizontalApertureOffsetAttr().Set( camera->getApertureOffset()[0] * scale, time );
179+
usdCamera.GetVerticalApertureOffsetAttr().Set( camera->getApertureOffset()[1] * scale, time );
180180
}
181181
else
182182
{
@@ -189,9 +189,9 @@ bool writeCamera( const IECoreScene::Camera *camera, const pxr::UsdStagePtr &sta
189189
);
190190
}
191191

192-
usdCamera.GetClippingRangeAttr().Set( pxr::GfVec2f( camera->getClippingPlanes().getValue() ) );
193-
usdCamera.GetFStopAttr().Set( camera->getFStop() );
194-
usdCamera.GetFocusDistanceAttr().Set( camera->getFocusDistance() );
192+
usdCamera.GetClippingRangeAttr().Set( pxr::GfVec2f( camera->getClippingPlanes().getValue() ), time );
193+
usdCamera.GetFStopAttr().Set( camera->getFStop(), time );
194+
usdCamera.GetFocusDistanceAttr().Set( camera->getFocusDistance(), time );
195195

196196
if( camera->hasShutter() )
197197
{
@@ -201,8 +201,8 @@ bool writeCamera( const IECoreScene::Camera *camera, const pxr::UsdStagePtr &sta
201201
/// and Houdini plugin sources, I've been unable to find evidence for
202202
/// anyone else doing this though, so maybe it's one of those things
203203
/// everyone is just getting wrong?
204-
usdCamera.GetShutterOpenAttr().Set( (double)camera->getShutter()[0] );
205-
usdCamera.GetShutterCloseAttr().Set( (double)camera->getShutter()[1] );
204+
usdCamera.GetShutterOpenAttr().Set( (double)camera->getShutter()[0], time );
205+
usdCamera.GetShutterCloseAttr().Set( (double)camera->getShutter()[1], time );
206206
}
207207

208208
return true;

contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,6 +1426,34 @@ def assertVectorsAlmostEqual( a, b,**kw ) :
14261426

14271427
self.assertEqual( camera, roundTripCamera )
14281428

1429+
def testWriteAnimatedCamera( self ) :
1430+
1431+
fileName = os.path.join( self.temporaryDirectory(), "test.usda" )
1432+
root = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Write )
1433+
child = root.createChild( "camera" )
1434+
1435+
cameras = {}
1436+
for time in range( 0, 10 ) :
1437+
1438+
camera = IECoreScene.Camera()
1439+
camera.setProjection( "perspective" )
1440+
camera.setShutter( imath.V2f( time - 0.25, time + 0.25 ) )
1441+
camera.setFocalLength( 1.0 + time * 0.1 )
1442+
camera.setClippingPlanes( imath.V2f( time, 1000 ) )
1443+
1444+
child.writeObject( camera, time )
1445+
cameras[time] = camera
1446+
1447+
del child, root
1448+
1449+
root = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Read )
1450+
child = root.child( "camera" )
1451+
1452+
for time in range( 0, 10 ) :
1453+
camera = child.readObject( time )
1454+
for parameter in ( "shutter", "focalLength", "clippingPlanes" ) :
1455+
self.assertEqual( camera.parameters()[parameter], cameras[time].parameters()[parameter] )
1456+
14291457
def testCornersAndCreases( self ) :
14301458

14311459
mesh = IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ) )

0 commit comments

Comments
 (0)