Frequently Asked Questions about XGen

What is Normal Compensation?
The generation of primitives occurs in the parametric patch space and not Euclidean (XYZ) space. For this reason, the distribution of primitives assumes a square patch to match up with the square parametric space. Normal compensation attempts to compensate for non-square patch distribution.

To compensate for non-square distribution, XGen finds the ratio of U and V iso-lines. For example, if a patch is twice as wide as it is tall, shape compensation adjusts the hair density so half as much hair is produced along the height. Basically, the compensation modifies the parametric space to match the Euclidean space, and then culls any points outside of the parametric domain.

What is the Parameterization Compensation?
As stated above. primitive generation occurs in the parametric space of the patch and not Euclidean (XYZ) space. For this reason, the primitive distribution assumes that the uniform parametric space matches the uniform surface area on the patch. Parameterization compensation corrects for any patches where the parametric spacing of iso-lines is not uniform.

An example of this is where you have a square patch, making Normals compensation unneeded, but the iso-lines contort so in Euclidean space, the center of the patch has a much smaller area than other similar parametric ranges in another location on the patch. This difference causes the primitives to appear very dense in the smaller area region and less dense in the large area region.

XGen compensates for this by finding an array of surface areas based on uniform parametric spacing. These areas are then compared and scaled to produce density compensation maps, which tell the generator to produce more primitives in regions of the patch that have greater area and produce fewer primitives where the area is less.

How do I regenerate my Parameterization compensation maps?
For optimization purposes, If a map exists for the patch it will be reused. XGen does not check for a change in the geometry. This is important since the Parameterization compensation maps should be generated on the patch-referenced model. To regenerate a map, click the Create Parameterization Map under Compensate Normals.
Note: XGen does not automatically generate a map, so you must generate one.You should only need to do this if there is a topology change or a change to the base model.
Why do primitives pop in and out when I animate my model?
The patch area is calculated at the binding time and then cached. A patch is considered bound when:
  • You manually bind it.
  • It is loaded through a Maya scene.
  • It is imported.

Since rendering involves a Description import, the patch is bound and the area calculated at that time. During a render, the patch can have a different area, due to deformation, per frame. This often results in varying numbers of primitives being generated. So, it is a good idea to use a patch-referenced model. See XGen patches.

Why does my patch-referenced model still pop when I render?
A patch-referenced model is bound at the same time as the model geometry. If you load a scene and there is no patch reference, then it is not bound. If you then create a patch reference, XGen is not aware of it and it is not used. Therefore, if you create the patch reference after loading the scene, save and reload the scene so that XGen can bind the patch-referenced model properly.
How do I preview selected XGen patches or Descriptions?
To Preview Selected, select one of the following:
  • Geometry object
  • XGen patch
  • Description
  • Guide
Then select a preview option from an XGen menu.

See Preview generated primitives.

How do I set debug and statistics levels?
You can set debug levels two ways, based on how you use XGen.
Use the following command in the XGen Expression Editor:
xgmMessage -d <debuglevel> -s <statlevel> -w <warninglevel>
You can set the debug level by using the Debug modifier (see Debug).You can also set debug levels from the Log menu in the XGen Editor.