Scripting Reference

Graph

The pgYetiGraph command can be used to query and edit values within a graph. The command takes any number of arguments and the name of the Yeti node, for example:

pgYetiGraph -listNodes pgYetiMayaShape1

will list all of the nodes within the graph. Or

pgYetiGraph -listNodes -type "scatter" pgYetiMayaShape1

will limited the list to the node type specified.

Once you know what node you want to query you can specify it with the -node parameter and then query the parameter names:

pgYetiGraph -node "scatter01" -listParams pgYetiMayaShape1

And now that you know what parameters there are for the node, you can used the -param argument to query the parameters value:

pgYetiGraph -node "scatter01" -param "density" -getParamValue pgYetiMayaShape1

Argument Description
-listNodes Will list all of the nodes in the graph.
-listParams Will list all of the parameters on the node in a graph, specified with the -node argument.
-type Is used to specify the type of node to be listed.
-node <string node> Used to specify which node you want to query.
-nodeType Return the type of the node specified by the -node parameter.
-param <string param> Used to specify which parameter you want to query.
-paramNiceName Return the name for the parameter used by Yetis UI.
-paramType Return the data type of the parameter.
-getParamValue Return the value of the parameter, it will be cast to the required data type.
-setParamValueBoolean <bool> Set the specified parameters value if it’s a boolean data type.
-setParamValueScalar <scalar> Set the specified parameters value if it’s a int or float data type.
-setParamValueVector <vector> Set the specified parameters value if it’s a vector, point or color data type.
-setParamValueString <string> Set the specified parameters value if it’s a string data type.
-setParamValueExpr <string> Set the specified parameters value to the passed expression.
-isParamConstant Returns whether or not the value of the parameter is a variable expression or not.

Caching

You can use pgYetiCommand to cache out a select Yeti node using the -writeCache parameter which requires the full pathname as a string, frame padding should be specified using standard C notation ( ie. %04d for 4 digit padding ). Used on it’s own -writeCache will only generate a cache for the current frame, to write a range of caches the -range parameter should be used with a start and end frame. By default Yeti writes 3 samples for each frame, in most cases this should be sufficient but in cases where fast moving characters are the basis for the fur generation sometimes higher samples ( up to 7 ) can be used.

Argument Description
-writeCache <string fileName> This tells Yeti you want to write a cache to the specified file name.
-range <int start> <int end> The frame range to export.
-samples <int numberOfSamples> The number of samples to be used for each frame, this is centered around the frame eg. 3 samples will write 2.5, 3.0 and 3.5 if the current frame was 3.
-sampleTimes <string sampleTimes> A string that represents a list of sample times for each frame separated by a space, these are frame offsets. eg. “-0.3 0.0 0.3” will write 2.7, 3.0 and 3.3 to the cache for frame 3.

As an example, if you wanted to cache out all the fur from frame 1-100 with 5 motion samples per frame you could used

pgYetiCommand -writeCache "/base/vfx/tmp/myCache.%04d.fur" -range 1 100 -samples 5

OBJ Export

pgYetiCommand can also be used with the -objExport to export polygonal geometry from the currently selected Yeti node. This will ignore any fibres and is generally meant to bake out instancing.

pgYetiCommand -objExport [density (float)] [filename (string)] [do_texture_coordinates (bool)] [do_normals (bool)]

pgYetiCommand -objExport 1 "/base/vfx/tmp/myInstances.obj" true true

Generating Maya Objects

In some instances you may want to generate Maya representations of the objects created by Yeti - to do this you can select the node and either use the “Convert to Maya Objects” option in the Yeti menu or run:

pgYetiCommand -generateMayaObjects

Yeti Node

pgYetiCreate() is used to create a new Yeti node in the Maya scene.

pgYetiCreateOnMesh() can be used to expedite the process of adding an initial input object, make sure a mesh has been selected prior to using the command.

pgYetiAddGroom( string $groom, string $pgYetiMayaNode ) will add the groom $groom as an input to $pgYetiMayaNode.

pgYetiRemoveGroom( string $groom, string $pgYetiMayaNode ) will remove the groom $groom as an input to $pgYetiMayaNode.

pgYetiAddGeometry( string $object, string $pgYetiMayaNode ) will add the geometry $object as an input to $pgYetiMayaNode.

pgYetiRemoveGeometry( string $object, string $pgYetiMayaNode ) will remove the geometry $object as an input to $pgYetiMayaNode.

pgYetiAddGuideSet( string $set, string $pgYetiMayaNode ) will add the maya set, containing guide curves, $set as an input to $pgYetiMayaNode.

pgYetiRemoveGuideSet( string $set, string $pgYetiMayaNode ) will remove the maya set $set as an input to $pgYetiMayaNode.

pgYetiRemoveAllConnections( string $pgYetiMayaNode ) will remove any and all connections on the Yeti node.

pgYetiForceUpdate( string $pgYetiMayaNode ) forces the specified node to re-evaluate it’s graph.

Groom Node

pgYetiCreateGroomOnMesh() creates a new Groom node on a selected mesh object.

pgYetiAddCollisionGeometry( string $object, string $pgYetiMayaGroomNode ) will add the geometry $object to $pgYetiMayaGroomNode‘s list of collision geometry.

pgYetiRemoveCollisionGeometry( string $object, string $pgYetiMayaGroomNode ) will remove the geometry $object to $pgYetiMayaGroomNodes‘s list of collision geometry.

pgYetiAddField( string $field, string $pgYetiMayaGroomNode ) attaches $field to $pgYetiMayaGroomNode to affect dynamic simulation.

pgYetiRemoveField( string $field, string $pgYetiMayaGroomNode ) detaches $field from $pgYetiMayaGroomNode.

pgYetiCommand -removeDuplicate <distance> is used to remove duplicate strands within the distance threshold.

Utilities

pgYetiConvertGuideSetToGroom( string $guide_set, string $mesh_object ) is used to convert a guide curve set into a Yeti Groom node for combing, $guide_set is the set that you want to convert and $mesh_object is the object the guides are to be growing from.

pgYetiImportGroomFileFromNode( string $pgYetiMayaNode ) will rebuild a graph and groom nodes stored in a GRM file currently referenced by $pgYetiMayaNode.

pgYetiExtractGroomFromNode( string $in_groom, string $yetiNode, string $postFix ) is used to extract and rebuild a single groom stored in a GRM or cache file currently referenced by $pgYetiMayaNode.

pgYetiSwapGeometry( string $originalGeometry, string $newGeometry ) is a utility to swap all the Yeti connections on one mesh to another, possibly a when a model updates.

License Utilities

pgYetiCommaned -licenseAvailable returns true ( 1 ) if a license is available and/or if the license is already successfully checked out.

pgYetiCommaned -numberOfLicensesAvailable returns the number of available licenses as reported by the license server.

pgYetiCommaned -returnLicense can be used to forcibly return the Yeti license checked out by the current user.

Rendering

Yeti has a separate render command that is used by a few of the different rendering integration tools ( it conforms to what 3delight needs and is used by RMS ) to provide a means of sampling the scene as well as saving a cache. Below are the commands that are supported that may be of interest to others building integration tools.

pgYetiRenderCommand -addStep -sampleTime <time> -frame <frame> $yeti_shape_node is used to add a sample for the specified Yeti node. <sampleTime> is the current time and <frame> is the whole frame number.

pgYetiRenderCommand -list returns a list of Yeti shape nodes currently in a state of being sampled.

pgYetiRenderCommand -flush flushes all of the stores cached data for previously cached nodes, this should be done before you start and after you’ve written a cache to disk.

pgYetiRenderCommand -remove $yeti_shape_node will remove all off the stored samples/data for the specified shape node, this is similar to flush except on a per shape basis.

pgYetiRenderCommand -contains $yeti_shape_node returns true if the specified shape node has data to be written to disk/emitted.

pgYetiRenderCommand -preRenderCache -fileName <file> $yeti_shape_node can be used to save and/or query the file name used for rendering the current node with a result being the filename resolved. The -fileName parameter is optional, if specified this will override any temporary or cache file name.

pgYetiRenderCommand -emit $yeti_shape_name will stored the cache samples to disk and emit the Renderman calls to include the shape and Yeti node in the Rib files.