Crytek UI in XSI - Obsolete

Please note that Crytek is not currently supporting the Softimage XSI exporter. This information is kept for reference. CRYENGINE Licensees needing XSI should contact their CRYENGINE Sales Representative.

Overview

The CryExporter is a XSI Addon, which not only contains the Export functionality, but also provides custom objects and a custom shader to make maximum use of the CRYENGINE features. The CryExporter prepares assets created in Softimage XSI for the CRYENGINE Resource Compiler (RC). The assets are stored in the Collada format and within the RC converted to the final game asset. Since the up axis is different then how it is in the engine; the exporter will compensate by swapping the values accordingly.

Crytek UI in XSI

After the installation of the Crytek addon, you will find the Crytek menu in the XSI menu bar.

Creating a CryExportNode model automatically triggers the CryExportNode: Properties window, where you need to specify various parameters for the final asset.

You can choose the type of asset, i.e. .cgf, .cga or .chr file (refer to CryExport for more details). The name of the final asset is also specified here. The filename will then be added as a prefix to the CryExportNode name. i.e. motocycle_CryExportNode.

Additionally you can choose whether this particular asset should be exported during when using the Export all command (this is useful for test objects). Check merge, if the asset has no internal logic attached and is composed of many separate geometry nodes. The exporter will automatically remove the hierarchy and compress the data for the target asset. This might save a lot of rendering and processing time.

The values are stored in custom properties called ExportProperties. You can easily access them from the Explorer.

Select the object in XSI and press F3. This will bring up a MiniExplorer, tailored for the selection.

XSI Bone Export

This node is a box shaped null helper which serves as a joint in your object. The Default name is CryJointNode. Link it to the CryExportNode model.

The joint needs to be placed between two geometry nodes, so that its bounding box is intersecting with the bounding box of the two objects it should keep together. The null has a text property in which you can adjust the physical parameters for the joint, i.e. limit=10000

Joint Parameters

Value

Description

limit
(Joint object property)

Limit is a general value for several different kind of forces applied to the joint. It contains a combination of the values that define the forces applied to the different axis.

This value needs to be defined; otherwise the simulation will not work correctly.
Crysis Example values: 100 - 500 can be broken by a bullet; 10000 can be broken by the impact of a driving vehicle or a big explosion.

The following values are optional and are used to fine tune the "limit" settings.

bend
(Joint object property)

Maximum torque around an axis perpendicular to the normal.

twist
(Joint object property)

Maximum torque around the normal.

pull
(Joint object property)

Maximum force applied to the joint's 1st object against the joint normal (the parts are "pulled together" as a reaction to external forces pulling them apart)

push
(Joint object property)

Maximum force applied to the joint's 1st object (i.e. the one whose name is listed first in the joint's name,
or if the names were not specified, the object the joint's z axis points towards) along the joint normal.
Joint normal is the joint's z axis, so for this value to actually be "push apart" (as a reaction to external forces pressing the parts together), this axis must be directed inside the 1st object.

shift
(Joint object property)

Maximum force in the direction perpendicular to normal.

Joints also support non-fully-rigid (non-6dof) constraints. A full rigid constraint will become a dynamic constraint if its either bend and twist limit gets broken and the joint has a non-0 "constraint_limit" property.

Broken "bends" will become "socket" constraints, and "twists" will become hinges. The newly created dynamic constraint will inherit pull and shift limits from the joint. The constraint's frame will be that of the joint's helper in max.

In order to preserve the meaning of "twisting", however, the axes will be swapped (z of the joint's helper will become the constraint's x - since both represent the "twisting" axis, x will become y, and y will become z).

Thus, for hinges, z axis of the helper should be directed along the desired hinge direction. For socket's, z axis should be the axis the attached part "bends around".

Value

Description

constraint_limit
(Joint object property)

Force limit for the newly created constraint, is checked when the constraint hits a rotation limit and is being pushed further.

constraint_minang
(Joint object property)

constraint_maxang
(Joint object property)

Rotation limits for the constraint (the interpretation is the same as in standalone constraints). The default is no limits.

constraint_damping
(Joint object property)

Angular damping (default 0).

constraint_collides
(Joint object property)

Whether the constraint parts will ignore collisions with each other (default 1).

For example, to quickly create an unbreakable hinge constraint: Add the following values to the joint's properties:

  • twist = 0

The constraint will created at the first activation, regardless of force.

  • constraint_limit = 1E20 (just something big enough)

Note that the general "limit = xx" is not required, since you want the limits other than twist to remain unbreakable. Also note that the nodes that have dynamic constraints between them should always be physicalized as entities (not particles).

XSI Object Export

Create ObjectProperty adds custom properties (text field) to your node.

Use this function to add values to the node a to a geometry node. It enables you to add engine properties to a node, like mass/density, LowSpec Settings, etc.

ObjectProperty Settings

Description

Mass

Defines the mass in kilograms; do not use together with density; i.e. mass=50

Density

Numerically defines the density of the material, the mass will be calculated based on the volume of the bounding box, i.e density=2

Pieces

Defines the name of pieces that are spawned (and replaces the original object) when a physical impulse on a joint exceeds its limits, i.e. pieces=_wall01_piece01,_wall01_piece02,_wall01_part

LowSpecLod0

Identifies the object as the base lod on a lowspec machine, i.e in the properties of a Lod1 or Lod2

Entity

Turns a piece into an entity, which the player can interact with.

Count

Spawns the piece object x-times, i.e. count=50 spawns 50 pieces within the volume of the intact object

Name

Use it in case scripts need a name, which XSI does not support, like SPACE in the name. i.e. name=Bip01 R Hand

Character specific Object properties - IK setup for deformation rigs

  • xmin = limit of negative rotation on X-axis.
  • xmax = limit of positive rotation on X-axis.
  • ymin = limit of negative rotation on Y-axis.
  • ymax = limit of positive rotation on Y-axis.
  • zmin = limit of negative rotation on Z-axis.
  • zmax = limit of positive rotation on Z-axis.

All values are relative values to the default joint rotation of the phys skeleton. You can also change the rotation of the phys skeleton compared to the deformation mesh in order to get a higher range of motion.

As a general rule of thumb for the rotational limits, you should keep max >min and respect the following limits X, Y -180...180 and z -90 ... 90. Better keep the range of limit smaller than the maximal values given (i.e. 170 to -170). This ensures stability in the physics calculation.

The following values are used to fine tune the behavior of joints. Most of the time they can be neglected, though. Dampening and Spring Tension Stiffness of an angular spring at a joint can be adjusted via "Spring Tension" parameter. A value of 1 means acceleration of 1 radian/second2 (1 radian = 57°). Damping should also be set to some reasonable value (1.0 corresponds to fully dumped oscillations for an isolated joint, 1.0 is the recommended value ).

The Spring Angle can also be adjusted, but has not much influence – therefore Crytek recommends keeping it at 0.

  • xdamping =
  • xspringangle = 0
  • xspringtension =
  • ydamping =
  • yspringangle = 0
  • yspringtension =
  • zdamping =
  • zspringangle = 0
  • zspringtension =