Sets up pose-based deformation so that shape animation can be driven by the orientation of one ore more specified
objects. Once the pose-base deformation is set up using LinkDeformOri and deform keys are created (using
ApplyDeformKey or SaveDeformKey), the orientation of the selected objects
drive the deformation of the geometry. The resulting deformation is interpolated smoothly between the shapes in the
N-space defined by the N object orientations. For better results, the interpolation between the object orientations
is done using quaternions.
Pose-based deformation (which is based on multi-linked parameters) allows you to link the shape of a cluster to several
parameters simultaneously. The resulting shapes are smoothly interpolated in the space defined by the parameters. Pose-based
deformations are particularly useful to link the shape of muscles to bone orientations or other parameters.
oReturn = LinkDeformWithOri( Cluster, Parameter list, [LinkWithOri] ); |
Returns an ISIVTCollection containing an XSICollection which contains the objects whose orientation is linked with the shape.
Parameter | Type | Description |
---|---|---|
Cluster | String |
Cluster to consider for future deformations Default Value: Current selection |
Parameter list | String |
List of objects whose orientation will be linked with the shape. Default Value: Picked in scene. |
LinkWithOri | Boolean |
True to link deformation with rotation. Default Value: False |
' ' This example demonstrates how to link the deformation of a bicep ' to the orientation of the forearm ' NewScene , false SetValue "Context.constructionmode", siConstructionModeModeling ' First we create a cylinder which will serve as our arm for this example CreatePrim "Cylinder", "MeshSurface" SetValue "cylinder.cylinder.height", 10 SetValue "cylinder.polymsh.geom.subdivu", 16 SetValue "cylinder.polymsh.geom.subdivv", 20 ' We create a skeleton for the arm bones Create2DSkeleton -3.89906576296024E-02, 4.97990543735225, 0, -0.896785125480857, 0.897163120567376, 0, 0, 0, 0, 4 AppendBone "eff", -3.89906576296024E-02, -4.92789598108747, 0 ApplyFlexEnv "cylinder;bone,bone1,eff", False ' We create the cluster of points that will model the muscle deformation CreateCluster "cylinder.pnt[107-114,130-137,153-160,176-183,199-206,222-229,245-252,268-275,291-298]" SetValue "cylinder.polymsh.cls.Point.Name", "Bicep" ' Next we will link the shape of the muscle to the orientation of the forearm bone LinkDeformWithOri "cylinder.polymsh.cls.Bicep", "bone1" ' Finally we save a couple of deform keys to define the shape of the muscle at a different arm rotation ' One can repeat this process for other bone orientations Translate "eff", 3.53515295841729, 4.31678486997636, 0, siRelative, siView, siObj, siXYZ SetUserPref "3D_TRANSFO_PROPORTIONAL_CHANGED", 1 SetValue "Context.constructionmode", siConstructionModePrimaryShape Translate "cylinder.pnt[157,158,180,181,203,204,226,227,249,250]", 0.727825609085912, -0.156028368794326, 0, _ siRelative, siView, siObj, siXYZ SetValue "cylinder.polymsh.movecomponentproportional.distlimit", 1 SaveDeformKey "cylinder.pnt[157,158,180,181,203,204,226,227,249,250]" SetValue "Context.constructionmode", siConstructionModeModeling SetValue "PlayControl.Key", 50 SetValue "PlayControl.Current", 50 SaveKey "eff.kine.local.posx,eff.kine.local.posy,eff.kine.local.posz", 50 FirstFrame Translate "eff", -4.93881663308298, -3.66666666666667, 0, siRelative, siView, siObj, siXYZ SaveKey "eff.kine.local.posx,eff.kine.local.posy,eff.kine.local.posz", 1 PlayForwardsFromStart ' The result is a deformation that is interpolated in the quaternion orientation space of the lower bone. ' One can also link the deformation to the orientation of more than one object. |
' ' The goal of the example is to show the script command ' "LinkDeformOri". ' Two objects are created; the sphere will be deformed according ' to the orientation of the cone (rotation around Z axis). ' First, an animation will be created on the cone (rotation ' of 90 degrees around Z axis) for playback purpose. ' A cluster is created with some points of the sphere. ' The cluster is "linked" for deform with the cone, such that ' changing the orientation of the cone will deform the sphere. ' Two deformation (i.e. moves) of the points of the cluster are ' performed at different frames, and each of the deformation acts ' as DeformKey. ' NewScene SetValue "Context.constructionmode", siConstructionModeModeling SetValue "PlayControl.Out", 40 CreatePrim "Sphere", "NurbsSurface", "MySphere" CreatePrim "Cone", "NurbsSurface", "MyCone" ' ' Set key at different frames with different angle ' to create an animation of the cone. ' SaveKey "MyCone.kine.local.rotz", 1, -90 SaveKey "MyCone.kine.local.rotz", 30, -40 SaveKey "MyCone.kine.local.rotz", 40, 0 ' ' Translate the objects to see clearly the cone and the ' effect on the sphere ' SelectObj "MySphere", , True Translate , -3, 0, 0, siAbsolute, siParent, siObj, siX SelectObj "MyCone", , True Translate , 6, 0, 0, siAbsolute, siParent, siObj, siX ' ' Create a cluster in the sphere, and create a LinkDeformOri ' with the cone. ' SetSelFilter "Point" AddToSelection "MySphere.pnt[(0,6),(7,6),(6,6),(5,6),(4,6),(3,6),(6,5),(1,6),(1,5),(2,6),(7,5),(0,5),(2,5),(5,4),(5,5),(4,5)]" CreateCluster LinkDeformWithOri "MySphere.surfmsh.cls.Point", "MyCone" ' ' Create the first Deform key at frame 1, with translation of ' points of the cluster ' SetValue "Context.constructionmode", siConstructionModePrimaryShape SetValue "PlayControl.Current", 1 Translate "MySphere.pnt[(0,6)]", -1.74522900164809, 0.27627214396616, -0.027627214396616, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(0,5)]", -1.63879153625736, 7.95443183208384E-02, -7.95443183208383E-03, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(4,6)]", 2.5, 0.5, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(4,5)]", 2.5, -0.3, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(3,5)]", 2, -1.5, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(1,5)]", -1.5, -0.4, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(7,6)]", -1.2, 1.26649251503908, -0.2, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(5,6)]", 1.5, 1.53788376826177, -0.2, siRelative, siView, siObj, siXYZ SelectObj "MySphere.surfmsh.cls.Point" SaveDeformKey ' Create the second Deform key at frame 30, with translation of ' points of the cluster SetValue "PlayControl.Current", 30 Translate "MySphere.pnt[(0,6)]", 6.0, -0.5, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(0,5)]", 5.4, 0, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(1,5)]", 4.0, 1.3, -0.13, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(4,5)]", -5.5, 0.12, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(4,6)]", -6.0, -0.5, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(5,4)]", -1.7, 0.5, 0, siRelative, siView, siObj, siXYZ Translate "MySphere.pnt[(3,6)]", -2.0, 0, 0, siRelative, siView, siObj, siXYZ SaveDeformKey "MySphere.surfmsh.cls.Point" SetValue "Context.constructionmode", siConstructionModeModeling ' ' Playback the animation and see the effect of the rotation ' of the cone on the sphere ' SetDisplayMode "Camera", "textured" PlayForwardsFromStart |