Skip to content

Commit 9562f59

Browse files
Merge branch 'RB-10.6'
2 parents e5ca263 + 8b4f718 commit 9562f59

4 files changed

Lines changed: 79 additions & 20 deletions

File tree

Changes

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
10.7.x.x (relative to 10.7.0.0a8)
22
========
33

4+
Improvements
5+
------------
6+
7+
- USDScene : Added loading of ArnoldProcedural prims as Cortex ExternalProcedural objects [^1].
8+
9+
Fixes
10+
-----
11+
12+
- USDScene : Fixed writing of animated camera parameters [^1].
13+
14+
[^1]: To be omitted from the notes for the final 10.7.0.0 release.
15+
416
10.7.0.0a8 (relative to 10.7.0.0a7)
517
==========
618

@@ -145,11 +157,24 @@ Breaking Changes
145157
- Removed deprecated functions componentConnectionAdapterLabel, convertOSLComponentConnections, collapseSplineParameters, expandSplineParameters.
146158
- Switch support for Spline parameters to support for Ramp parameters.
147159

148-
10.6.x.x (relative to 10.6.4.0)
160+
10.6.x.x (relative to 10.6.5.0)
149161
========
150162

151163

152164

165+
10.6.5.0 (relative to 10.6.4.0)
166+
========
167+
168+
Improvements
169+
------------
170+
171+
- USDScene : Added loading of ArnoldProcedural prims as Cortex ExternalProcedural objects.
172+
173+
Fixes
174+
-----
175+
176+
- USDScene : Fixed writing of animated camera parameters.
177+
153178
10.6.4.0 (relative to 10.6.3.1)
154179
========
155180

contrib/IECoreUSD/src/IECoreUSD/ArnoldProceduralAlgo.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ namespace
5555
const pxr::TfToken g_arnold( "arnold" );
5656
const pxr::TfToken g_arnoldAlembic( "ArnoldAlembic" );
5757
const pxr::TfToken g_arnoldNodeEntry( "arnold:node_entry" );
58+
const pxr::TfToken g_arnoldProcedural( "ArnoldProcedural" );
5859
const pxr::TfToken g_arnoldProceduralCustom( "ArnoldProceduralCustom" );
5960
const pxr::TfToken g_arnoldUsd( "ArnoldUsd" );
6061

@@ -87,6 +88,10 @@ IECore::ObjectPtr readArnoldProcedural( pxr::UsdGeomGprim &gprim, pxr::UsdTimeCo
8788
gprim.GetPrim().GetAttribute( g_arnoldNodeEntry ).Get( &nodeEntry, time );
8889
result->setFileName( nodeEntry );
8990
}
91+
else if( gprim.GetPrim().IsA( g_arnoldProcedural ) )
92+
{
93+
result->setFileName( "procedural" );
94+
}
9095
else if( gprim.GetPrim().IsA( g_arnoldUsd ) )
9196
{
9297
result->setFileName( "usd" );
@@ -157,6 +162,7 @@ bool arnoldProceduralMightBeTimeVarying( pxr::UsdGeomGprim &gprim )
157162
}
158163

159164
ObjectAlgo::ReaderDescription<pxr::UsdGeomGprim> g_arnoldAlembicReaderDescription( g_arnoldAlembic, readArnoldProcedural, arnoldProceduralMightBeTimeVarying );
165+
ObjectAlgo::ReaderDescription<pxr::UsdGeomGprim> g_arnoldProceduralReaderDescription( g_arnoldProcedural, readArnoldProcedural, arnoldProceduralMightBeTimeVarying );
160166
ObjectAlgo::ReaderDescription<pxr::UsdGeomGprim> g_arnoldProceduralCustomReaderDescription( g_arnoldProceduralCustom, readArnoldProcedural, arnoldProceduralMightBeTimeVarying );
161167
ObjectAlgo::ReaderDescription<pxr::UsdGeomGprim> g_arnoldUsdReaderDescription( g_arnoldUsd, readArnoldProcedural, arnoldProceduralMightBeTimeVarying );
162168

contrib/IECoreUSD/src/IECoreUSD/CameraAlgo.cpp

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

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

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

173-
usdCamera.GetFocalLengthAttr().Set( camera->getFocalLength() * scale );
174-
usdCamera.GetHorizontalApertureAttr().Set( camera->getAperture()[0] * scale );
175-
usdCamera.GetVerticalApertureAttr().Set( camera->getAperture()[1] * scale );
176-
usdCamera.GetHorizontalApertureOffsetAttr().Set( camera->getApertureOffset()[0] * scale );
177-
usdCamera.GetVerticalApertureOffsetAttr().Set( camera->getApertureOffset()[1] * scale );
173+
usdCamera.GetFocalLengthAttr().Set( camera->getFocalLength() * scale, time );
174+
usdCamera.GetHorizontalApertureAttr().Set( camera->getAperture()[0] * scale, time );
175+
usdCamera.GetVerticalApertureAttr().Set( camera->getAperture()[1] * scale, time );
176+
usdCamera.GetHorizontalApertureOffsetAttr().Set( camera->getApertureOffset()[0] * scale, time );
177+
usdCamera.GetVerticalApertureOffsetAttr().Set( camera->getApertureOffset()[1] * scale, time );
178178
}
179179
else
180180
{
@@ -185,9 +185,9 @@ bool writeCamera( const IECoreScene::Camera *camera, const pxr::UsdStagePtr &sta
185185
);
186186
}
187187

188-
usdCamera.GetClippingRangeAttr().Set( pxr::GfVec2f( camera->getClippingPlanes().getValue() ) );
189-
usdCamera.GetFStopAttr().Set( camera->getFStop() );
190-
usdCamera.GetFocusDistanceAttr().Set( camera->getFocusDistance() );
188+
usdCamera.GetClippingRangeAttr().Set( pxr::GfVec2f( camera->getClippingPlanes().getValue() ), time );
189+
usdCamera.GetFStopAttr().Set( camera->getFStop(), time );
190+
usdCamera.GetFocusDistanceAttr().Set( camera->getFocusDistance(), time );
191191

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

204204
return true;

contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,7 @@ def formatCameraName( **kw ) :
13061306
for name, cortexCam in testCameras.items() :
13071307

13081308
cG = pxr.UsdGeom.Camera.Get( usdFile, "/" + name )
1309-
c = cG.GetCamera()
1309+
c = cG.GetCamera( 0.0 )
13101310

13111311
self.assertEqual( c.projection.name.lower(), cortexCam.getProjection() )
13121312

@@ -1329,8 +1329,8 @@ def formatCameraName( **kw ) :
13291329
self.assertEqual( c.fStop, cortexCam.getFStop() )
13301330
self.assertEqual( c.focusDistance, cortexCam.getFocusDistance() )
13311331
if cortexCam.hasShutter() :
1332-
self.assertEqual( cG.GetShutterOpenAttr().Get(), cortexCam.getShutter()[0] )
1333-
self.assertEqual( cG.GetShutterCloseAttr().Get(), cortexCam.getShutter()[1] )
1332+
self.assertEqual( cG.GetShutterOpenAttr().Get( 0.0 ), cortexCam.getShutter()[0] )
1333+
self.assertEqual( cG.GetShutterCloseAttr().Get( 0.0 ), cortexCam.getShutter()[1] )
13341334
else :
13351335
self.assertFalse( cG.GetShutterOpenAttr().HasAuthoredValue() )
13361336
self.assertFalse( cG.GetShutterCloseAttr().HasAuthoredValue() )
@@ -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)