diff --git a/Changes b/Changes index 6a3527fc18..1497bbc763 100644 --- a/Changes +++ b/Changes @@ -1,7 +1,9 @@ 10.5.x.x (relative to 10.5.9.2) ======== - +Improvements +------------ +- USDScene : PointInstancers are now loaded with invisibleIds and inactiveIds as primitive variables. 10.5.9.2 (relative to 10.5.9.1) diff --git a/contrib/IECoreUSD/src/IECoreUSD/PointInstancerAlgo.cpp b/contrib/IECoreUSD/src/IECoreUSD/PointInstancerAlgo.cpp index ea2096e94f..543cccd35c 100644 --- a/contrib/IECoreUSD/src/IECoreUSD/PointInstancerAlgo.cpp +++ b/contrib/IECoreUSD/src/IECoreUSD/PointInstancerAlgo.cpp @@ -86,6 +86,19 @@ IECore::ObjectPtr readPointInstancer( pxr::UsdGeomPointInstancer &pointInstancer Canceller::check( canceller ); PrimitiveAlgo::readPrimitiveVariable( pointInstancer.GetAngularVelocitiesAttr(), time, newPoints.get(), "angularVelocity" ); + DataPtr cortexInvisIds = DataAlgo::fromUSD( pointInstancer.GetInvisibleIdsAttr(), time, true ); + if( cortexInvisIds ) + { + newPoints->variables["invisibleIds"] = IECoreScene::PrimitiveVariable( PrimitiveVariable::Constant, cortexInvisIds ); + } + + pxr::SdfInt64ListOp inactiveIdsListOp; + pointInstancer.GetPrim().GetMetadata( pxr::UsdGeomTokens->inactiveIds, &inactiveIdsListOp ); + newPoints->variables["inactiveIds"] = IECoreScene::PrimitiveVariable( + PrimitiveVariable::Constant, + new IECore::Int64VectorData( inactiveIdsListOp.GetExplicitItems() ) + ); + // Prototype paths pxr::SdfPathVector targets; diff --git a/contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py b/contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py index 11fe8a4abf..8184e38ecf 100644 --- a/contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py +++ b/contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py @@ -3665,6 +3665,9 @@ def testPointInstancerPrimvars( self ) : [ ( c, c, c ) for c in range( 1, 6 ) ] ) + points.DeactivateIds( [ 0, 2 ] ) + points.InvisIds( [ 1, 4 ], 0 ) + stage.GetRootLayer().Save() # Check we can load the primvar via a SceneInterface. @@ -3681,6 +3684,9 @@ def testPointInstancerPrimvars( self ) : self.assertEqual( points["myColor"].interpolation, IECoreScene.PrimitiveVariable.Interpolation.Vertex ) self.assertEqual( points["myColor"].indices, None ) + self.assertEqual( points["inactiveIds"], IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Constant, IECore.Int64VectorData( [ 0, 2 ] ) ) ) + self.assertEqual( points["invisibleIds"], IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Constant, IECore.Int64VectorData( [ 1, 4 ] ) ) ) + def testArnoldArrayInputs( self ) : def assertExpectedArrayInputs( network ) :