Tujuan pemeran adalah menciptakan format yang mudah digunakan untuk model, animasi, material, dan dunia game. Selain itu, pemeran harus mampu menghasilkan adegan yang sama di perangkat lunak 3D apa pun.
Autodesk Maya (2012+): Rilis
Blender (3.0+): Rilis
.NET Framework (Referensi): Perpustakaan/DotNet
.NET Framework (oleh Scobalula): Cast.NET
Python: Perpustakaan/Python
CastModelViewer (Oleh echo000): Github
SECast, konverter lossless untuk dilemparkan: SECast
Catatan: Jika alat Anda mendukung ekspor ke transmisi langsung, itu selalu lebih baik.
Pertanyaan yang sering diajukan: FAQ
Semua file dimulai dengan header cast:
struct CastHeader{ uint32_t Ajaib; // char[4] pemeran (0x74736163)uint32_t Versi; // 0x1uint32_t RootNode; // Jumlah node root, yang berisi berbagai sub node jika perluuint32_t Flags; // Dicadangkan untuk flag, atau padding, mana saja yang diperlukan};
File cast pada dasarnya adalah sekelompok node generik. Node diberi id terdaftar yang unik, yang dapat memberi tahu loader tentang datanya, dan cara menanganinya.
Mengikuti header cast adalah kumpulan node yang harus bertipe CastId::Root.
Sebuah simpul terlihat seperti:
struct CastNodeHeader{ Pengenal CastId; // Digunakan untuk menandakan kelas mana yang digunakan node inisuint32_t NodeSize; // Ukuran semua data dan sub data setelah nodeuint64_t NodeHash; // Hash unik, seperti id, digunakan untuk menghubungkan node bersamauint32_t PropertyCount; // Jumlah propertyuint32_t ChildCount; // Jumlah node turunan langsung// Kita harus membaca sampai ukuran node mencapai, dan itu berarti kita sudah selesai.// Node berada dalam tata letak tumpukan, sehingga mudah untuk memuat, urutan FILO.};
Ada beberapa id pemeran terdaftar yang tersedia:
kelas enum CastId : uint32_t{ Akar = 0x746F6F72, Model = 0x6C646F6D, Jaring = 0x6873656D, Bentuk Campuran = 0x68736C62, Kerangka = 0x6C656B73, Tulang = 0x656E6F62, Pegangan IK = 0x64686B69, Batasan = 0x74736E63, Animasi = 0x6D696E61, Kurva = 0x76727563, CurveModeOverride = 0x564F4D43, NotifikasiTrack = 0x6669746E, Bahan = 0x6C74616D, Berkas = 0x656C6966, Contoh = 0x74736E69, Metadata = 0x6174656D, };
Mengikuti sebuah node, adalah daftar properti [Node.PropertyCount], sebuah properti terlihat seperti:
struct CastPropertyHeader{ Pengenal CastPropertyId; // Tipe elemen dari propertyuint16_t NameSize ini; // Ukuran nama propertyuint32_t ArrayLength; // Jumlah elemen yang terdapat di properti ini (1 untuk tunggal) // Berikut ini adalah string UTF-8 huruf kecil, ukuran ukuran nama, BUKAN null yang diakhiri // cast_property[ArrayLength] array data};
Untuk properti, cast memiliki beberapa tipe bawaan:
enum kelas CastPropertyId : uint16_t{ Byte = 'b', //Pendek = 'h', // Integer32 = 'i', // Integer64 = 'l', // Mengambang = 'f', // Ganda = 'd', // String = 's', // String UTF-8 yang dihentikan secara null Vector2 = 'v2', // Vektor presisi mengambang XY Vector3 = 'v3', // Vektor presisi mengambang XYZ Vector4 = 'v4'// Vektor presisi mengambang XYZW};
Untuk membaca file cast, Anda hanya perlu melintasi node root dan turunannya. Properti selalu muncul sebelum anak node. Setiap node memiliki ukuran totalnya sendiri, dan semua anaknya, jadi jika prosesor tidak memahami id node, prosesor dapat melewati seluruh node dan melanjutkan membaca.
Id pemeran disimpan sebagai bilangan bulat untuk mempercepat proses serialisasi dan deserialisasi.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Kerangka, Jaring, Bahan | BENAR | PALSU |
Induk | Akar | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Model | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
Penyangga Posisi Vertex (vp) | Vektor 3 (v3) | BENAR | BENAR |
Penyangga Normal Vertex (vn) | Vektor 3 (v3) | BENAR | PALSU |
Buffer Tangen Vertex (vt) | Vektor 3 (v3) | BENAR | PALSU |
Penyangga Warna Vertex (c%d) | Bilangan bulat 32 (i) | BENAR | PALSU |
Penyangga UV Vertex (u%d) | Vektor 2 (v2) | BENAR | PALSU |
Penyangga Tulang Berat Vertex (wb) | Integer 32 (i), Pendek (h), Byte (b) | BENAR | PALSU |
Penyangga Nilai Berat Vertex (wv) | Mengapung (f) | BENAR | PALSU |
Penyangga Wajah (f) | Integer 32 (i), Pendek (h), Byte (b) | BENAR | BENAR |
Jumlah Lapisan Warna (cl) | Integer 32 (i), Pendek (h), Byte (b) | PALSU | Benar jika memiliki lapisan warna, jika tidak, Salah |
Jumlah Lapisan UV (ul) | Integer 32 (i), Pendek (h), Byte (b) | PALSU | Benar jika memiliki lapisan UV, jika tidak, Salah |
Pengaruh Berat Maksimum (mi) | Integer 32 (i), Pendek (h), Byte (b) | PALSU | Benar jika mempunyai bobot jika tidak Salah |
Metode Menguliti (sm) | String (s) [linier, angka empat] | PALSU | PALSU |
Bahan (Hash dari CastNode: Bahan) (m) | Bilangan bulat 64 (l) | PALSU | PALSU |
Catatan :
Face Buffer
adalah indeks ke dalam buffer data simpul jerat saat ini di mana (0, 1, 2) adalah tiga simpul pertama dari jaring ini.
Face Buffer
mengikuti urutan penggulungan CCW (tangan kanan), ini mungkin berbeda di api lain, di mana Anda mungkin harus memetakan ulang indeks.
Jika suatu wajah berisi kombinasi indeks yang tidak valid (0, 1, 1), (0, 1, 0), (0, 0, 0)
yang dua atau lebih indeksnya sama, maka pengguna yang memproses wajah tersebut dapat diterima untuk abaikan saja untuk merender mesh dengan benar. Sebaiknya berikan peringatan kepada pengguna yang menyatakan bahwa ini terjadi.
Setiap buffer deskriptor simpul harus berisi jumlah elemen yang sama, misalnya: jika Anda memiliki 16 simpul, Anda harus memiliki 16 normal jika ada, 16 warna jika buffer ada. Kalau tidak, diasumsikan itu default/dilewati.
Bobot bersifat aditif yang berarti memiliki tulang yang sama dengan 0.5
dan 0.5
akan membuat tulang tersebut mempengaruhi 1.0
misalnya.
Metode menguliti default adalah linear
. Saat disetel ke quaternion
skinning quaternion ganda digunakan.
BARU 18/8/2024 : Spesifikasi warna titik telah berubah , untuk mendukung beberapa lapisan warna, Color Layer Count (cl)
baru telah ditambahkan yang meniru properti UV Layer Count (ul)
.
Agar kompatibel, prosesor cast harus memeriksa cl
, dan menggunakannya secara default bersama dengan properti lapisan c%d
yang baru.
Jika properti cl
tidak ada, prosesor harus memeriksa properti vc
lama yang merupakan satu-satunya lapisan warna jika ada.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Model | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | BENAR |
Bentuk Dasar (Hash dari CastNode:Mesh) (b) | Bilangan bulat 64 (l) | PALSU | BENAR |
Indeks Verteks Bentuk Target (vi) | Byte (b), Pendek (h), Integer 32 (i) | BENAR | BENAR |
Posisi Verteks Bentuk Target (vp) | Vektor 3 (v3) | BENAR | BENAR |
Skala Berat Target (ts) | Mengapung (f) | BENAR | PALSU |
Catatan :
Base Shape
harus berupa jaring cor yang sudah ada.
Target Shape Vertex Indices
dan Target Shape Vertex Positions
harus sama panjangnya karena dipasangkan bersama.
Target Shape Vertex Positions
adalah nilai akhir dari setiap posisi simpul yang diubah dengan mengabaikan simpul yang bersesuaian dari Base Shape
.
Target Weight Scale
menunjukkan nilai maksimum yang dapat dideformasi oleh bentuk target dan harus ditetapkan secara default ke 1.0
.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tulang, IKHandle, Kendala | BENAR | PALSU |
Induk | Model | PALSU | BENAR |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Kerangka | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | BENAR |
Indeks Induk (p) | Bilangan bulat 32 (i) | PALSU | PALSU |
Kompensasi Skala Segmen (ssc) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Posisi Lokal (lp) | Vektor 3 (v3) | PALSU | PALSU |
Rotasi Lokal (lr) | Vektor 4 (v4) | PALSU | PALSU |
Posisi Dunia (wp) | Vektor 3 (v3) | PALSU | PALSU |
Rotasi Dunia (wr) | Vektor 4 (v4) | PALSU | PALSU |
Timbangan) | Vektor 3 (v3) | PALSU | PALSU |
Catatan :
Segment Scale Compensate
harus ditetapkan secara default ke True
jika tidak ditentukan.
Scale
selalu bersifat lokal pada tulang saat ini.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Kerangka | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
Mulai Bone Hash (sb) | Bilangan bulat 64 (l) | PALSU | BENAR |
Akhir Tulang Hash (eb) | Bilangan bulat 64 (l) | PALSU | BENAR |
Target Tulang Hash (tb) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash Tulang Vektor Kutub (pv) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash Tulang Tiang (pb) | Bilangan bulat 64 (l) | PALSU | PALSU |
Gunakan Rotasi Target (tr) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Catatan :
Use Target Rotation
harus default ke False
jika tidak ditentukan.
Pole Bone
hanya mempengaruhi putaran rantai, secara umum Anda memiliki Pole Bone
atau Pole Vector Bone
.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Kerangka | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
Jenis Batasan (ct) | String (s) [pt, atau, sc] | PALSU | BENAR |
Kendala Tulang Hash (cb) | Bilangan bulat 64 (l) | PALSU | BENAR |
Target Tulang Hash (tb) | Bilangan bulat 64 (l) | PALSU | BENAR |
Pertahankan Offset (bulan) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Lewati X (sx) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Lewati Y (sy) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Lewati Z (sz) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Catatan :
Nilai tipe batasan sesuai dengan:
pt
Point Constraint, yang berlaku untuk terjemahan.
or
Batasan Orient, yang berlaku untuk rotasi.
sc
Batasan Skala, yang berlaku untuk skala.
Pertahankan offset harus default ke False
jika tidak ditentukan.
Lewati X, Lewati Y, dan Lewati Z harus default ke False
jika tidak ditentukan dan mengacu pada mengabaikan sumbu tersebut dalam batasan.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Mengajukan | BENAR | PALSU |
Induk | Model | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | BENAR |
Ketik (t) | Tali | PALSU | BENAR |
Hash File Albedo (albedo) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Menyebar (menyebar) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Biasa (normal) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Spekuler (spekular) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Emisif (emisif) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Gloss (mengkilap) | Bilangan bulat 64 (l) | PALSU | PALSU |
Kekasaran File Hash (kekasaran) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Oklusi Ambien (ao) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Rongga (rongga) | Bilangan bulat 64 (l) | PALSU | PALSU |
Hash File Anisotropi (aniso) | Bilangan bulat 64 (l) | PALSU | PALSU |
Ekstra (x) Hash File (ekstra%d) | Bilangan bulat 64 (l) | PALSU | PALSU |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | CastNode | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Jalur (p) | Tali | PALSU | BENAR |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Kerangka, Kurva, CurveModeOverride, NotificiationTrack | BENAR | BENAR |
Induk | Akar | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
Kecepatan bingkai (fr) | Mengapung (f) | PALSU | BENAR |
Perulangan (lo) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Animasi | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama Node (nn) | Tali | PALSU | BENAR |
Nama Properti Kunci (kp) | String (s) [rq, tx, ty, tz, sx, sy, sz, bs, vb] | PALSU | BENAR |
Penyangga Bingkai Kunci (kb) | Byte (b), Pendek (h), Integer 32 (i) | BENAR | BENAR |
Penyangga Nilai Kunci (kv) | Byte (b), Pendek (h), Integer 32 (i), Float (f), Vektor 4 (v4) | BENAR | BENAR |
Modus (m) | String (s) [aditif, absolut, relatif] | PALSU | BENAR |
Berat Campuran Aditif (ab) | Mengapung (f) | PALSU | PALSU |
Catatan :
Semua bingkai utama kurva berada dalam ruang objek/simpul.
Mode
menentukan bagaimana setiap keyframe kurva diterapkan pada node.
additive
: Bingkai utama ditambahkan ke nilai bingkai adegan saat ini dari properti node.
absolute
: Keyframe adalah nilai pasti untuk frame tertentu.
relative
: Bingkai utama ditambahkan ke nilai posisi sisa properti node.
Nilai properti sesuai dengan:
=0
= disembunyikan.
>=1
= terlihat.
rq
Rotasi Quaternion dan mengharapkan nilai v4
.
tx
Terjemahan 'X' dan mengharapkan nilai f
.
ty
Terjemahan 'Y' dan mengharapkan nilai f
.
tz
Terjemahan 'Z' dan mengharapkan nilai f
.
sx
Skala 'X' dan mengharapkan nilai f
.
sy
Skala 'Y' dan mengharapkan nilai f
.
sz
Skala 'Z' dan mengharapkan nilai f
.
bs
BlendShape Weight dan mengharapkan nilai f
.
vb
Visibilitas dan mengharapkan nilai b
, h
, atau i
.
Properti tx
, ty
, tz
, sx
, sy
, sz
, bs
, vb
harus diinterpolasi secara linier.
Properti rq
harus diinterpolasi dengan angka empat slerp.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Animasi | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama Node (nn) | Tali | PALSU | BENAR |
Modus (m) | String (s) [aditif, absolut, relatif] | PALSU | BENAR |
Ganti Kurva Terjemahan (ot) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Ganti Kurva Rotasi (atau) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Ganti Kurva Skala (os) | Byte (b) [Benar, Salah] | PALSU | PALSU |
Catatan:
Lihat Catatan Curve
di atas untuk definisi setiap nilai Mode
.
Override Translation Curves
harus default ke False
jika tidak ditentukan.
Override Rotation Curves
harus default ke False
jika tidak ditentukan.
Override Scale Curves
harus default ke False
jika tidak ditentukan.
Node override dan semua turunannya harus mengganti mode kurvanya ke mode baru.
Node pengesampingan harus ada pada saat pemrosesan untuk menentukan apakah tulang anak merupakan keturunan.
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Animasi | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | BENAR |
Penyangga Bingkai Kunci (kb) | Byte (b), Pendek (h), Integer 32 (i) | BENAR | BENAR |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Mengajukan | BENAR | PALSU |
Induk | Akar | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Nama (n) | Tali | PALSU | PALSU |
File Referensi (Hash dari CastNode:File) (rf) | Bilangan bulat 64 (l) | PALSU | BENAR |
Posisi (p) | Vektor 3 (v3) | PALSU | BENAR |
Rotasi (kanan) | Vektor 4 (v4) | PALSU | BENAR |
Timbangan) | Vektor 3 (v3) | PALSU | BENAR |
Bidang | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Anak-anak | Tidak ada | BENAR | PALSU |
Induk | Akar | PALSU | BENAR |
Properti (id) | Jenis | Adalah Array | Diperlukan |
---|---|---|---|
Penulis (a) | Tali | PALSU | PALSU |
Perangkat Lunak | Tali | PALSU | PALSU |
Sumbu Atas (atas) | String (s) [x, y, z] | PALSU | PALSU |
Catatan:
Author
dan Software
hanya untuk menandai file cast dan tidak digunakan di luar metadata.
Up Axis
dapat digunakan sebagai petunjuk bagi perangkat lunak untuk menyesuaikan pemandangan agar sesuai dengan sumbu atas tertentu.
File cast dapat memiliki sejumlah node meta tetapi properti yang dirancang untuk petunjuk hanya boleh menggunakan instance node metadata pertama.
Format dirancang oleh DTZxPorter dengan masukan dari komunitas.
Ikon oleh Smashicons