XGen は、プリミティブごとのベイク処理に XPD ファイルを使用します。この形式は、少なく見積もっても数千のプリミティブが値を保存する必要のあるというケースでの使用のために、特別に開発されています。この形式はスペース節約の効果がありますが、読み取りのパフォーマンスも向上します。ファイルの書き込みを遅くすることなく、読み取りパフォーマンスが可能な範囲で最高になるようにパフォーマンスが徹底的に微調整されています。
ヘッダのすぐ後はプリミティブのデータです。データがフェースの順序で(ヘッダでの定義に従って)配置されます。各フェース内では、ブロックの順番で(ヘッダでの定義に従って)データが配置されます。各ブロックは、各フェースに正しい順序で存在する必要があります。ブロック内にプリミティブがあります。プリミティブ自体は浮動小数点のベクトルです。書き込み側は、ベクトルを提供し、データの順序と解凍の仕方を知っています。読み込み側は、一度に単一のプリミティブを読み込み、プリミティブのバージョンを手がかりにデータの解凍方法を決めます。フェースごとまたはブロックごとのヘッダはありません。現実には、ファイル ヘッダの後のファイルは、プリミティブ データの一定のストリームです。
ファイルの読み込み時に、必要なフェースの検出、必要なブロックの検出、そして順序に従ったプリミティブの読み込みを行う必要があります必要なすべてのプリミティブを読み込んだら、次のブロックを検出して前のブロックと一致するプリミティブ データを読み込むことができます。ブロック構造により、XGen が必要とするデータ(たとえば場所)をアプリケーション(Paint3d など)が 1 ブロックで書き出すことができますが、その後に必要なデータをそれ自身のブロック(たとえば PointCloud)に書き出すことができます。それから XGen は、必要なデータのみ読み込んで、他のデータを簡単にスキップすることができます。さらに、両方のアプリケーションとも、自らのデータ形式を「所有する 」ことができ、他とのやり取りは必要ありません。
XPD ファイルの使用に役立つプログラムが 2 つ利用できます。これの 1 つは xpd2txt です。このプログラムは、XPD ファイル内のバイナリ データを、読み取りが簡単なテキスト形式に変換します。これは、制作用スクリプトで解析し使用できる形にデータを変換するときにも使用できます(たとえば、データを Inventor 形式に変換するときや Maya に読み込むとき)。もう 1 つのプログラムは、xpdcmp です。これは、2 つの XPD ファイルを比較して同じかどうか検証できます。このプログラムは、ファイルの中身(フェース、ブロック、キー、プリミティブなどの数)を比較しますが、プリミティブの実際の値は比較しません。したがって、ファイルがもう 1 つのファイルと互換があるかを検証するときに使用できますが、ファイルがまったく同一かどうかは分かりません。
XGen のソース コードの中に 2 つのサンプルが含まれています。これは、タイプがポイントのプリミティブを保持する XPD ファイルの読み書きを行います。これは、XUV ファイルとも呼ばれます。一般的に、このタイプのファイルは Paint3d で作成され、プリミティブの場所(たとえば PointGenerator の使用)または束の場所(すなわち Clumping FX Module を介して)のいずれかの駆動に使用されます。サンプルは、wxuv.cpp と rxuv.cpp にあります。
XPD ファイルのもう 1 つの特殊のタイプは、Paint3d での使用を想定したカーブ/ガイド ファイルです。これは軽量化したファイルです。各プリミティブに関する id、u、v、CV は含まれていますが、XGen のその他のベイク処理情報は Paint3d には必要ないため、含まれていません。この軽量な形式により、Paint3d がロードできる形式を使用することができるため、XGen のベイク処理形式への変更について心配する必要がありません。この形式は、ブロックを調べ「Paint3d」と呼ばれるものを検索することで検知することができます。