Cast の目標は、モデル、アニメーション、マテリアル、ゲーム ワールドの使いやすい形式を作成することです。さらに、キャストはどの 3D ソフトウェアでも同じシーンを制作できる必要があります。

Autodesk Maya (2012+): リリース
Blender (3.0+): リリース
.NET Framework (リファレンス): ライブラリ/DotNet
.NET Framework (Scobalula による): Cast.NET
Python: ライブラリ/Python
CastModelViewer (echo000 作成): Github
SECast、キャストへのロスレスコンバータ: SECast
注:ツールが直接キャストへのエクスポートをサポートしている場合は、その方が常に優れています。
よくある質問: FAQ
すべてのファイルはキャスト ヘッダーで始まります。
struct CastHeader{ uint32_t Magic; // char[4] キャスト (0x74736163)uint32_t バージョン; // 0x1uint32_t ルートノード; // ルート ノードの数。必要に応じてさまざまなサブノードが含まれます。uint32_t Flags; // フラグまたはパディングの必要な方のために予約されています};キャスト ファイルは基本的に汎用ノードのグループです。ノードには一意の登録 ID が与えられ、ローダーにデータの内容とその処理方法を伝えることができます。
キャスト ヘッダーの後には、CastId::Root タイプのノードのコレクションが続きます。
ノードは次のようになります。
struct CastNodeHeader{
CastId 識別子。 // このノードがどのクラスを使用するかを示すために使用されますsuint32_t NodeSize; // nodeuint64_t NodeHash に続くすべてのデータとサブデータのサイズ; // ノードをリンクするために使用される ID のような一意のハッシュuint32_t PropertyCount; // プロパティの数suint32_t ChildCount; // 直接の子ノードの数// ノード サイズに達するまで読み取る必要があります。これで完了です。// ノードはスタック レイアウトにあるため、FILO 順序でロードするのが簡単です。 };利用可能な登録キャスト ID がいくつかあります。
enum クラス CastId : uint32_t{
ルート = 0x746F6F72、
モデル = 0x6C646F6D、
メッシュ = 0x6873656D、
ブレンドシェイプ = 0x68736C62、
スケルトン = 0x6C656B73、
ボーン = 0x656E6F62、
IKハンドル = 0x64686B69、
制約 = 0x74736E63、
アニメーション = 0x6D696E61、
曲線 = 0x76727563、
CurveModeOverride = 0x564F4D43、
通知トラック = 0x6669746E、
マテリアル = 0x6C74616D、
ファイル = 0x656C6966、
インスタンス = 0x74736E69、
メタデータ = 0x6174656D、
};ノードの後にはプロパティのリスト [Node.PropertyCount] があり、プロパティは次のようになります。
struct CastPropertyHeader{
CastPropertyId 識別子。 // このプロパティの要素タイプuint16_t NameSize; // このプロパティの名前のサイズuint32_t ArrayLength; // このプロパティに含まれる要素の数 (単一の場合は 1)// 以下は UTF-8 文字列の小文字、namesize のサイズ、null で終了しない // Cast_property[ArrayLength] データの配列};プロパティの場合、キャストにはいくつかの組み込み型があります。
enum class CastPropertyId : uint16_t{ Byte = 'b', // <uint8_t>
Short = 'h', // <uint16_t>
Integer32 = 'i', // <uint32_t>
Integer64 = 'l', // <uint64_t>
Float = 'f', // <float>
Double = 'd', // <double>
String = 's', // NULL で終了する UTF-8 文字列
Vector2 = 'v2', // 浮動小数点精度ベクトル XY
Vector3 = 'v3', // 浮動小数点精度ベクトル XYZ
Vector4 = 'v4'// 浮動小数点精度ベクトル XYZW};キャスト ファイルを読み取るには、ルート ノードとその子をトラバースするだけです。プロパティは常にノードの子の前に来ます。各ノードにはそれ自体とすべての子の合計サイズがあるため、プロセッサがノード ID を理解できない場合は、ノード全体をスキップして読み取りを続けることができます。
キャスト ID は、シリアル化と逆シリアル化を高速化するために整数として保存されます。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | スケルトン、メッシュ、マテリアル | 真実 | 間違い |
| 親 | 根 | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | モデル | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| 頂点位置バッファー (vp) | ベクター 3 (v3) | 真実 | 真実 |
| 頂点法線バッファー (vn) | ベクター 3 (v3) | 真実 | 間違い |
| 頂点接線バッファー (vt) | ベクター 3 (v3) | 真実 | 間違い |
| 頂点カラーバッファ (c%d) | 整数 32 (i) | 真実 | 間違い |
| 頂点 UV バッファ (u%d) | ベクター 2 (v2) | 真実 | 間違い |
| 頂点ウェイト ボーン バッファー (wb) | 整数 32 (i)、ショート (h)、バイト (b) | 真実 | 間違い |
| 頂点重み値バッファー (wv) | フロート (メス) | 真実 | 間違い |
| フェイスバッファ(f) | 整数 32 (i)、ショート (h)、バイト (b) | 真実 | 真実 |
| カラーレイヤー数 (cl) | 整数 32 (i)、ショート (h)、バイト (b) | 間違い | カラーレイヤーがある場合は True、それ以外の場合は False |
| UV レイヤ数 (ul) | 整数 32 (i)、ショート (h)、バイト (b) | 間違い | UV レイヤがある場合は True、それ以外の場合は False |
| 最大重量影響 (mi) | 整数 32 (i)、ショート (h)、バイト (b) | 間違い | 重みがある場合は True、それ以外の場合は False |
| スキニング法(sm) | 文字列 [線形、四元数] | 間違い | 間違い |
| マテリアル (CastNode:マテリアルのハッシュ) (m) | 整数 64 (l) | 間違い | 間違い |
注:
Face Buffer 、現在のメッシュの頂点データ バッファへのインデックスであり、(0、1、2) はこのメッシュの最初の 3 つの頂点です。
Face Buffer CCW (右巻き) の巻き順に従います。これは他の API では異なる場合があり、インデックスを再マッピングする必要がある場合があります。
2 つ以上のインデックスが同じである無効なインデックスの組み合わせ(0, 1, 1), (0, 1, 0), (0, 0, 0)が顔に含まれている場合、ユーザーがこれらの顔を処理することは許容されます。メッシュを適切にレンダリングするには、これらを無視してください。これが起こったことを示す警告をユーザーに提示するのが賢明です。
各頂点記述子バッファーには同じ数の要素が含まれている必要があります。例: 頂点が 16 個ある場合、法線が存在する場合は 16 個、バッファーが存在する場合は色が 16 個必要です。それ以外の場合は、デフォルトまたはスキップされたものとみなされます。
ウェイトは加算的なもので、たとえば同じボーンに0.5と0.5設定すると、そのボーンが1.0影響を与えることになります。
デフォルトのスキニング方法はlinearです。 quaternionに設定すると、デュアル クォータニオン スキニングが使用されます。
NEW 8/18/2024 : 頂点カラーの仕様が変更されました。複数のカラー レイヤをサポートするために、 UV Layer Count (ul)プロパティを模倣する新しいColor Layer Count (cl)が追加されました。
下位互換性を保つために、キャスト プロセッサはclをチェックし、それを新しいc%dレイヤー プロパティとともにデフォルトで使用する必要があります。
clプロパティが存在しない場合、プロセッサは、存在する場合は唯一のカラーレイヤーであるレガシーvcプロパティをチェックする必要があります。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | モデル | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 真実 |
| 基本形状 (CastNode:Mesh のハッシュ) (b) | 整数 64 (l) | 間違い | 真実 |
| ターゲット形状の頂点インデックス (vi) | バイト (b)、ショート (h)、整数 32 (i) | 真実 | 真実 |
| ターゲット形状の頂点位置 (vp) | ベクター 3 (v3) | 真実 | 真実 |
| 目標体重計(ts) | フロート (メス) | 真実 | 間違い |
注:
Base Shape既存のキャスト メッシュである必要があります。
Target Shape Vertex IndicesとTarget Shape Vertex Positionsペアとして同じ長さである必要があります。
Target Shape Vertex Positions Base Shapeの対応する頂点を無視した、変更された各頂点位置の最終値です。
Target Weight Scaleターゲット シェイプが変形できる最大値を示し、デフォルトは1.0です。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | ボーン、IKHandle、コンストレイント | 真実 | 間違い |
| 親 | モデル | 間違い | 真実 |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | スケルトン | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 真実 |
| 親インデックス (p) | 整数 32 (i) | 間違い | 間違い |
| セグメントスケール補正 (ssc) | バイト (b) [True、False] | 間違い | 間違い |
| ローカルポジション (lp) | ベクター 3 (v3) | 間違い | 間違い |
| ローカル回転 (lr) | ベクター 4 (v4) | 間違い | 間違い |
| ワールドポジション (wp) | ベクター 3 (v3) | 間違い | 間違い |
| 世界回転 (wr) | ベクター 4 (v4) | 間違い | 間違い |
| スケール(秒) | ベクター 3 (v3) | 間違い | 間違い |
注:
Segment Scale Compensate指定されていない場合は、デフォルトでTrueに設定する必要があります。
Scale常に現在のボーンに対してローカルです。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | スケルトン | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| スタートボーンハッシュ(sb) | 整数 64 (l) | 間違い | 真実 |
| エンドボーンハッシュ(eb) | 整数 64 (l) | 間違い | 真実 |
| ターゲットボーンハッシュ (tb) | 整数 64 (l) | 間違い | 間違い |
| 極ベクトル ボーン ハッシュ (pv) | 整数 64 (l) | 間違い | 間違い |
| ポールボーンハッシュ (pb) | 整数 64 (l) | 間違い | 間違い |
| ターゲット回転を使用 (tr) | バイト (b) [True、False] | 間違い | 間違い |
注:
Use Target Rotation指定されていない場合は、デフォルトでFalseになります。
Pole Boneチェーンのツイストにのみ影響を与える必要があります。一般に、 Pole BoneまたはPole Vector Boneのいずれかが必要です。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | スケルトン | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| 拘束タイプ (ct) | 文字列 [pt、or、sc] | 間違い | 真実 |
| 制約ボーンハッシュ (cb) | 整数 64 (l) | 間違い | 真実 |
| ターゲットボーンハッシュ (tb) | 整数 64 (l) | 間違い | 真実 |
| オフセットを維持 (月) | バイト (b) [True、False] | 間違い | 間違い |
| スキップX(sx) | バイト (b) [True、False] | 間違い | 間違い |
| スキップY(sy) | バイト (b) [True、False] | 間違い | 間違い |
| スキップ Z (sz) | バイト (b) [True、False] | 間違い | 間違い |
注:
制約タイプの値は以下に対応します。
ptポイント制約。翻訳に適用されます。
or回転に適用される方向制約。
scスケール制約。スケールに適用されます。
Maintain offset が指定されていない場合は、デフォルトでFalseに設定する必要があります。
Skip X、Skip Y、および Skip Z は、指定されていない場合はデフォルトでFalseになり、制約内でその軸が無視されることを示します。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | ファイル | 真実 | 間違い |
| 親 | モデル | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 真実 |
| タイプ(t) | 文字列 | 間違い | 真実 |
| アルベド ファイル ハッシュ (albedo) | 整数 64 (l) | 間違い | 間違い |
| 拡散ファイルハッシュ (拡散) | 整数 64 (l) | 間違い | 間違い |
| 通常のファイル ハッシュ (通常) | 整数 64 (l) | 間違い | 間違い |
| スペキュラ ファイル ハッシュ (スペキュラ) | 整数 64 (l) | 間違い | 間違い |
| エミッシブ ファイル ハッシュ (エミッシブ) | 整数 64 (l) | 間違い | 間違い |
| 光沢ファイルハッシュ (光沢) | 整数 64 (l) | 間違い | 間違い |
| 粗さファイルハッシュ (粗さ) | 整数 64 (l) | 間違い | 間違い |
| アンビエント オクルージョン ファイル ハッシュ (ao) | 整数 64 (l) | 間違い | 間違い |
| キャビティ ファイル ハッシュ (キャビティ) | 整数 64 (l) | 間違い | 間違い |
| 異方性ファイル ハッシュ (aniso) | 整数 64 (l) | 間違い | 間違い |
| 追加 (x) ファイル ハッシュ (extra%d) | 整数 64 (l) | 間違い | 間違い |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | キャストノード | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| パス(p) | 文字列 | 間違い | 真実 |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | スケルトン、カーブ、CurveModeOverride、NotificationTrack | 真実 | 真実 |
| 親 | 根 | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| フレームレート (fr) | フロート (メス) | 間違い | 真実 |
| ループ(lo) | バイト (b) [True、False] | 間違い | 間違い |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | アニメーション | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| ノード名(nn) | 文字列 | 間違い | 真実 |
| キープロパティ名 (kp) | 文字列 (s) [rq、tx、ty、tz、sx、sy、sz、bs、vb] | 間違い | 真実 |
| キーフレームバッファ (kb) | バイト (b)、ショート (h)、整数 32 (i) | 真実 | 真実 |
| キー値バッファー (kv) | バイト (b)、ショート (h)、整数 32 (i)、浮動小数点数 (f)、ベクトル 4 (v4) | 真実 | 真実 |
| モード(m) | 文字列 [加法、絶対、相対] | 間違い | 真実 |
| 添加剤ブレンド重量 (ab) | フロート (メス) | 間違い | 間違い |
注:
すべてのカーブ キーフレームはオブジェクト/ノード空間内にあります。
Mode各カーブ キーフレームがノードにどのように適用されるかを決定します。
additive : キーフレームは、ノード プロパティの現在のシーン フレーム値に追加されます。
absolute : キーフレームは、指定されたフレームの正確な値です。
relative : キーフレームは、nodes プロパティの静止位置の値に追加されます。
プロパティ値は以下に対応します。
=0 = 非表示。
>=1 = 表示されます。
rq回転クォータニオンであり、 v4値が必要です。
tx変換は「X」であり、 f値が必要です。
ty変換は「Y」であり、 f値が必要です。
tz変換は「Z」であり、 f値が必要です。
sx 「X」をスケールし、 f値を期待します。
sy 'Y' をスケールし、 f値を期待します。
sz 「Z」をスケールし、 f値を期待します。
bs BlendShape Weight とf値を期待します。
vb可視性。 b 、 h 、またはi値が必要です。
プロパティtx 、 ty 、 tz 、 sx 、 sy 、 sz 、 bs 、 vb線形内挿する必要があります。
プロパティrqクォータニオン slerp で補間する必要があります。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | アニメーション | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| ノード名(nn) | 文字列 | 間違い | 真実 |
| モード(m) | 文字列 [加法、絶対、相対] | 間違い | 真実 |
| 平行移動曲線の上書き (ot) | バイト (b) [True、False] | 間違い | 間違い |
| 回転カーブをオーバーライド (または) | バイト (b) [True、False] | 間違い | 間違い |
| スケール カーブをオーバーライドする (os) | バイト (b) [True、False] | 間違い | 間違い |
注:
各Mode値の定義については、上記のCurve注記を参照してください。
Override Translation Curves指定しない場合はデフォルトでFalseになります。
Override Rotation Curvesが指定されていない場合は、デフォルトでFalseに設定する必要があります。
Override Scale Curves指定しない場合はデフォルトでFalseになります。
オーバーライド ノードとそのすべての子は、カーブ モードを新しいモードにオーバーライドする必要があります。
子ボーンが子孫であるかどうかを判断するには、処理時にオーバーライド ノードが存在する必要があります。
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | アニメーション | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 真実 |
| キーフレームバッファ (kb) | バイト (b)、ショート (h)、整数 32 (i) | 真実 | 真実 |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | ファイル | 真実 | 間違い |
| 親 | 根 | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 名前 (n) | 文字列 | 間違い | 間違い |
| 参照ファイル (CastNode:File のハッシュ) (rf) | 整数 64 (l) | 間違い | 真実 |
| 位置 (p) | ベクター 3 (v3) | 間違い | 真実 |
| 回転(r) | ベクター 4 (v4) | 間違い | 真実 |
| スケール(秒) | ベクター 3 (v3) | 間違い | 真実 |
| 分野 | 種類) | IsArray | 必須 |
|---|---|---|---|
| 子供たち | なし | 真実 | 間違い |
| 親 | 根 | 間違い | 真実 |
| プロパティ (ID) | 種類) | IsArray | 必須 |
|---|---|---|---|
| 著者(a) | 文字列 | 間違い | 間違い |
| ソフトウェア | 文字列 | 間違い | 間違い |
| 上軸(上) | 文字列 [x, y, z] | 間違い | 間違い |
注:
AuthorとSoftwareキャスト ファイルにタグを付けるためだけに使用され、メタデータ以外には使用されません。
Up Axis 、特定の上軸に一致するようにシーンを調整するためのソフトウェアへのヒントとして使用できます。
キャスト ファイルには任意の数のメタ ノードを含めることができますが、ヒンティング用に設計されたプロパティでは最初のメタデータ ノード インスタンスのみを使用する必要があります。
コミュニティからの意見をもとに DTZxPorter によって設計された形式。
Smashicons によるアイコン