Intro

This plugin "binds" a high-poly object to a low-poly object so that the low-poly object can be animated and deformed in XSI, while the high-poly version is rendered. The exact topology of the high-poly version is rendered, after picking up any deformations on the low-poly version. Points on the two versions are connected via their UV values. It is important that UV smoothing NOT be used when the base low-poly object is subdivided to produce the high-poly object.

 

Usage

Prelim.

Visit Jos Stam's web page on exact evaluation of subdivision surfaces and download the data file named ccdata50NT.dat. Grateful acknowledgement is made to Alias and Jos Stam for making the files available.

Installation

Drag addon over XSI work area. You may need the VC runtimes installed if you don't have them. You can download the 32-bit redistributable here or the 64-bit redistributable here

Base object

If you create the base object in XSI and then export it to a sculpting program, when you export it as an obj, choose Local Coordinates and check Polygon Meshes. If you have already applied UV's, check Export Current UV Set.

XSI obj export 

 

UV's

If you set up the UVs in XSI, make sure that they are reasonably regular. The most important thing is to avoid concave polys in the UV map. I.E. don't have any polys that look like this in the texture editor:

concave UV polygon 

 

If you set up the UVs in ZBrush, then the GUV tiles seem to work fine.

In any case, it is crucial that when you subdivide in order to sculpt a high-poly object, the UVs NOT be smoothed. In XSI smoothing is on by default. Smoothing is turned off by unchecking "Smooth when subdividing" on the Texture_Projection PPG (found under Polygon Mesh->Clusters->TextureCoordinates_AUTO). Note that smoothing is also turned off automatically when the BindProp custom property is applied to a polymesh object.

It's probably easier to subdivide within the sculpting program anyway. In ZBrush, make sure that Suv is off in the Geometry menu. In Mudbox, the default seems fine.

 

Sculpting programs

ZBrush:

When importing or exporting and importing from ZBrush, there are multiple options in the Preferences pulldown. eflipY and iflipY seem to be on by default, but these options seem to flip objects between XSI and ZBrush. The most straightforward option seems to be to just turn these off. However this must be done before importing a base object from XSI into ZB. In any case, what's important is that the base and target meshes are in the same orientation.

 Export to Obj as Quads(Qud) and make sure Txr is also selected in the export menu.

Mudbox:

Default settings seem OK. The high-poly target can be exported as .bio or as .obj. The .bio file will be smaller and should also bind more quickly. Make sure to export UV's with the object.

 

 

After sculpting the high resolution object is exported as an Obj. It is not imported into XSI. If the low-poly object was created, altered or retextured outside of XSI, then it will need to be imported into XSI.

 

BindProp custom property

BindProp PPG convert data tab  

The first time you use the addon, the eigen data must be converted to the form that the plugin will use. Go to the "convert data" tab and navigate to where you downloaded the ccdata50NT.dat file in the "input data file" slot. It is recommended that you accept the default location for the converted data file, since this is where the plugin will look for the file for rendering. This location should be with the plugin dll's. This process should only need to be done once, the first time you use the Binder addon.

 

BindProp PPG Bind tab 

Select the base object and apply the BindProp property. Go to the "BindProp" tab and choose your sculpted high-poly object for the "target obj". This will be used to create a new file, ( of type ".bob", for "bound object" ). As a default, the new file will be the same, except for the type. The "converted data file" slot must point to the data file created using the "convert data" tab in the above paragraph (this should be automatic if it was created in the default location, otherwise navigate to select it). The Bind process requires the eigen data contained in this file. Hit the Bind button to creat the .bob file. This may take a while, depending on the size of the base and target objects.

The Bind process will do a few other things. It will create a Geoshader to render the high-poly object. This will be a child of the base object. It will create a Null object to pass data to Mental Ray and a BindUpdater operator to update a UserDataBlob attached to the null. And it will turn off render visibility of the base object and turn off UV smoothing for the base object texture projection.

The "duplicate" tab contains a button to duplicate an object with its bound target data. This is still partly experimental.

 

BindGeo shader

The BindGeo shader has some important options.

BindGeo PPG 

 

The first three choices should be filled in automatically.

If "Render base object" is checked, then the sculpted object will not be rendered, but rather the limit surface of the base object, with the topology of the sculpted object. This should be off by default.

Since the sculpted object probably has very high polygon count, it can be split for rendering, and a simple octree is used. This can significantly affect rendering speed. Some trial and error may be needed to determine optimum depth and leaf size (leaf size in thousands of triangles). If the "always rebuild octree" option is unchecked, then new renders after the first render of an object can be sped up significantly. At render time a .tmp file is created in the same directory as the .bob file. If the "always rebuild octree" option is unchecked, then much of this .tmp data can be reused. This file may be large and you may want to delete when you are finished with a scene.

 

Texturing

The XSI image texture node does not seem to pick up the texture data from the geoshader. As a workaround, use an Image_lookup node (Nodes->Map Lookups->Image Lookup instead and plug a BCoordLookup node (nodes->Texture->more->Paths->Binder) into the coord slot of the Image_lookup node.

Rendertree BCoordLookup 

 

Known issues

If a base object is rebound after being bound to one sculpted object, then XSI will probably crash at render time. Instead, save and restart XSI after the new bind.