Skip to main content
Go to Editor

Wiki

Learn how to optimize your Spine 2D animations, reduce file size, and improve performance

alur kerjaanimasiberlangganancontohdataeksporfpsgaris waktugrafikhasilingatanjeniskoneksikonsepkontrolmejamemandumetrikoptimasipemulapemutaranpenetapan hargapenontonperekampertunjukanpluspremirekamanrugisaluran pipasoketstatistiktanpa kerugianuivideoyoutube

Memulai: Alur Kerja Dasar

pemulaalur kerjamemandu

Panduan ini akan membantu Anda memulai dengan cepat menggunakan Pengoptimal JSON.

  1. Memuat Proyek:GunakanInputNodeuntuk memuat Anda.json, .atlas, Dan.pngfile.
  2. Pilih preset (Mode plus):Dalam mode Plus, gunakan panel kanan untuk memilih salah satu preset bawaan (misalnya, "Basic Fallback"). Ini secara otomatis membuat grafik pengoptimalan untuk Anda. Dalam mode Bebas, buat grafik manual minimal:InputNodeQuantizerNodeOutputNode.
  3. Jalankan grafik:Klik tombol "Jalankan Graph".
  4. Bandingkan hasil:Beralih ke tab "Penampil" untuk membandingkan secara visual animasi asli dan animasi yang dioptimalkan.
  5. Tinjau perubahan:Di tab "Hasil" dan "Statistik", Anda akan menemukan informasi rinci tentang kunci mana yang diubah atau dihapus.

Jenis Soket & Aliran Data

soketjenisdatakoneksi

Artikel ini menjelaskan tipe data yang digunakan oleh soket dalam grafik node dan apa yang dapat dihubungkan dimana.

Aturan cepat

Palingpengolahannode beroperasi pada aSpine Muatan. Node yang berhubungan dengan Atlas beroperasi padaProyek AtlasatauSprite. MenggunakanValidatorNodeketika Anda tidak yakin dengan apa yang diharapkan oleh soket.

Jenis soket

  • Spine Muatan— representasi proyek Spine yang ramah proses dan digunakan oleh sebagian besar node pemrosesan.
  • Proyek Atlas— Metadata atlas + gambar laman yang digunakan oleh simpul atlas.
  • Sprite— membongkar gambar/wilayah sprite (Atlas Unpacker → Asset Penampil / Atlas Repacker).
  • JSON— Spine asli atau direkonstruksi JSON untuk diagnostik/validasi/diffing.
  • Perubahan— daftar/aliran perbedaan yang dihasilkan oleh beberapa pengoptimal dan digunakan oleh node penampil/pelaporan.

Kunci → ketik → sambungkan ke

Kunci soket (contoh)Tipe dataDiproduksi olehHubungkan ke
payload, payload_in, payload_outSpine MuatanInputNode, sebagian besar node pemrosesanMemproses node (RDP/Spline/Refit/Quantizer/Cleanup/etc.), laluOutputNode.payload
original_jsonJSONInputNodeDiagnosticNode, JSONDiffNode.json_before, OutputNode.original_json, beberapa node atlas (misalnya mode repacker alpha)
reconstructed_json_outJSONOutputNodeJSONDiffNode.json_after, validator/debug
changesDaftar perubahanBeberapa node pemrosesan +OutputNodeAnimationViewerNode(opsional), laporan/debug
atlas_projectProyek AtlasInputNode/ penampil atlasAtlasUnpackerNode.atlas_project, OutputNode.atlas_project, filter atlas
atlas_in, atlas_outProyek Atlas (atau aliran terkait atlas)Atlas simpul/filterAtlas simpul,AtlasViewerNode, AtlasMergerNode(melalui multi-inputnya)
sprites_out, sprites_in, sprites_data_inSpriteAtlasUnpackerNode, filterAssetViewerNode.sprites_in, AtlasRepackerNode.sprites_data_in
atlas_inputsBeberapa Proyek AtlasBerbagai sumberAtlasMergerNode.atlas_inputs(hubungkan beberapa atlas)

Saluran pipa yang praktis

  • Pengoptimalan JSON dasar: InputNode→ (opsional:DiagnosticNode/ filter) → pengoptimal (RDPNode, SplineNode, QuantizerNode, …) → OutputNode.
  • Atlas mengemas ulang: InputNode.atlas_projectAtlasUnpackerNode→ (opsional:AssetViewerNode) → AtlasRepackerNodeOutputNode.atlas_project/atlas_assets.

Paket Berlangganan & Fitur Premium

berlanggananpremipluspenetapan harga

re-polish menawarkan dua tingkat langganan untuk memenuhi kebutuhan berbeda.

Paket Gratis

  • ✓ Dasar Node Graph
  • ✓ JSON Penampil
  • ✓ Garis waktu dengan banyak trek dan pencampuran animasi yang dapat disesuaikan
  • • optimasi terbatas
  • • versi tulang belakang

Paket Ditambah ($5/bulan)

  • • semua Fitur Gratis
  • • mengemas ulangNode
  • • fisikaPanggang
  • • pembersihanBakedKeys
  • • grafikPreset
  • • prioritasDukungan

Mendapatkan Ditambah

KlikMeningkatkantombol di navigasi atas, lalu:

  • MemilihDapatkan Ditambah
  • Anda akan dialihkan ke Patreon — menyelesaikan langganan
  • Kembali ke editor simpul saat masuk ke akun Patreon yang sama sehingga layanan bisa memverifikasi tautan dan mengaktifkan Plus
  • (Opsional) Masukkan kode aktivasi (untuk penawaran khusus)

Konsep Inti: Lossy vs. Lossless

konseprugitanpa kerugianpemula

Semua metode optimasi dibagi menjadi dua jenis:

Rekomendasi:Selalu mulai dengan optimasi Lossless. Gunakan metode Lossy hanya jika diperlukan pengurangan ukuran file lebih lanjut, dan selalu periksa hasilnya secara visual.

Bagaimana Mengukur Efektivitas

memandumetrikstatistik

Untuk memahami seberapa efektif pengoptimalan Anda, perhatikan metrik berikut:

  • Ukuran Berkas:Ukuran akhir dari.jsonfile adalah tujuan utama optimasi.
  • Jumlah Bingkai Utama:Di tab "Statistik", Anda akan menemukan tabel dan bagan yang menunjukkan berapa banyak bingkai utama yang dihapus di setiap animasi.
  • Perbandingan Visual:Selalu gunakan tab "Penampil" untuk membandingkan animasi "sebelum" dan "sesudah". Pastikan pengoptimalan Lossy tidak menimbulkan artefak visual yang tidak dapat diterima.
  • Laporkan di Tabel "Hasil":Di sini Anda dapat memeriksa secara detail setiap perubahan spesifik yang dilakukan pada data Anda.

Penampil: Panel Kontrol

penontonkontrolui

ItuPenontontab overlay aKontrolpanel di atas kanvas. Ini dibagi menjadi tiga kelompok:

Kontrol Animasi

  • Animasi— memilih animasi Spine mana yang diputar.
  • Kulit— memilih Skin mana yang diterapkan.
  • Kecepatan— pengganda kecepatan pemutaran (0,1× → 3,0×).

Lihat Kontrol

  • Atur Ulang Tampilan— mengembalikan posisi kamera/tata letak default.
  • Lihat Opsi— offset numerik yang digunakan untuk memposisikan tampilan perbandingan:Spasi X / Spasi Y(jarak antara asli/dioptimalkan) danOffset X / Offset Y(pergeseran global).

Kontrol Debug

  • Modus Debug— mengaktifkan debug rendering overlay (tergantung pada dukungan runtime).
  • Aktifkan Fisika— mengaktifkan simulasi fisika (jika kerangka menggunakan fisika).
  • Label— mengaktifkan overlay label.

Penampil: Panel Kinerja

pertunjukanfpsingatanui

ItuPertunjukanpanel menunjukkan metrik waktu proses real-time untuk kerangka yang sedang diputar.

Waktu nyata

  • FPS— frame per detik diukur oleh monitor.
  • Waktu Bingkai— waktu per frame dalam milidetik (lebih rendah lebih baik).
  • bagan FPS— 120 sampel terakhir ditampilkan sebagai batangan.

Metrik kerangka

  • Slot yang Terlihat— berapa banyak slot yang terlihat pada sampel terakhir.
  • Rata-rata Bisa dilihat— rata-rata pengguliran slot yang terlihat (lebih stabil daripada satu bingkai).
  • simpul— jumlah titik saat ini yang digunakan untuk rendering.
  • Batas (px)— batas kerangka saat ini lebar×tinggi dalam piksel.
  • Rata-rata Batas— batas rata-rata bergulir.
  • Tekstur Terbesar— laman atlas terbesar (menurut dimensi) yang terdeteksi untuk kerangka.
  • Memori Tekstur— perkiraan total memori tekstur untuk laman atlas yang dimuat. Jika tersedia, panel juga menampilkan perincian per halaman (nama file, dimensi, dan perkiraan ukuran).

Peningkatan (saat Dioptimalkan tersedia)

  • Peningkatan Slot— membandingkanRata-rata Bisa dilihatantara Asli vs Dioptimalkan.
  • Perubahan Memori— membandingkanMemori Teksturantara Asli vs Dioptimalkan.

Penampil: Garis Waktu

penontongaris waktuanimasipemutaranmemandu

ItuGaris waktupanel adalah sequencer animasi yang dapat di-dock di bagian bawah Penampil. Ini memungkinkan Anda mengatur klip animasi di beberapa trek, mengontrol pemutaran, dan melihat pratinjau transisi.

Trek & Klip

  • Hingga 4 trek animasi— setiap trek dipetakan ke SpinetrackIndexlapisan. Jalur yang lebih tinggi menyatu dengan jalur yang lebih rendah.
  • Tambahkan animasi— klik+tombol di trek mana pun untuk membuka pemilih animasi (dengan filter pencarian).
  • Seret & ubah ukuran klip— seret badan klip untuk memindahkannya sepanjang trek; seret tepi kiri/kanan untuk mengubah waktu atau durasi mulai.
  • Hapus klip— pilih klip dan tekanDeleteatauBackspace.
  • Deteksi tumpang tindih— klip yang tumpang tindih pada trek yang sama disorot dengan warna merah.

Kontrol Transportasi

  • Putar / Jeda / Hentikan— kontrol pemutaran standar.
  • Sebelumnya / Berikutnya— melompat ke awal klip sebelumnya atau berikutnya.
  • Kecepatan animasi— penggeser dari 0,1× ke 3,0×.
  • Berhenti otomatis— pemutaran berhenti secara otomatis di akhir garis waktu.

Pencampuran Transisi

  • Durasi campuran global— mengatur waktu crossfade default antara klip yang berurutan.
  • Penggantian per transisi— klik gelembung transisi antara dua klip untuk mengatur durasi campuran khusus. Anda dapat mengatur ulang setiap penggantian kembali ke nilai global.

Mencari & Menggosok

  • Kepala permainan— seret pengendali pada penggaris waktu atau klik penggaris untuk mencari.
  • Pratinjau waktu kursor— melayang di atas area trek menampilkan waktu di bawah kursor.
  • Pekerja Web— perhitungan pencarian dan peristiwa dipindahkan ke pekerja latar belakang untuk kelancaran kinerja.

Pemutaran Sadar Fisika

  • Alihkan fisika di antaranyaMemperbarui(kendala aktif) danTidak ada(dengan disabilitas).
  • Selama pencarian, waktu kerangka dimajukan untuk menyelesaikan batasan fisika dengan benar.

Dukungan Multi-Kerangka

  • Pemilih pasangan target— setiap trek dapat menargetkan semua pasangan (🌐 Semua pasangan) atau kerangka tertentu.
  • Posisi dan skala per kerangka— Input offset dan skala X/Y untuk masing-masing kerangka.
  • Menggambar pesanan— masukan numerik untuk mengontrol prioritas lapisan render.

Gambar Debug

Alihkan visibilitas untuk: Tulang, Nama Tulang, Wilayah, Jerat, Lambung, Batas, Jalur, Kliping, Titik.

Seleksi Kulit

Kotak centang multi-pilih untuk semua skin yang ditentukan dalam kerangka yang dimuat.

Lihat Pengaturan

  • Spasi X/Y— celah antara pasangan kerangka.
  • Mengimbangi X / Y— pergeseran area pandang global.
  • Beralih PMA— mode alfa yang telah dikalikan sebelumnya (Spine 3.x) atau atlas mode alfa (Spine 4.x: auto / pma / bleed / none).
  • Label kerangka— alihkan hamparan label.

Penampil: Perekam

penontonperekamrekamaneksporvideomemandu

ItuPerekammenangkap animasi Spine dari penampil sebagai video, gambar animasi, atau rangkaian gambar.

Mode Perekaman

  • ⚡ Rekam Cepat— pengambilan waktu nyata menggunakanMediaRecorder + captureStream(). Hanya menghasilkan keluaran WebM. Cepat tetapi terbatas pada frame rate real-time.
  • 🎬 Ekspor Kantor Pusat— rendering frame demi frame offline menggunakan WebCodecsVideoEncoder + readPixels(). Mendukung semua format dan menghasilkan keluaran piksel sempurna.

Format Keluaran

  • Video: WebM, MP4, AVI, MOV
  • Gambar animasi: GIF, Animasi PNG (APNG)
  • Urutan gambar: Urutan PNG, Urutan WebP

Codec (Ekspor HQ)

VP8, VP9, ​​H.264 (AVC), AV1, ProRes — codec yang tersedia terdeteksi secara otomatis berdasarkan dukungan browser.

Kualitas

  • Preset: Rendah (~1 Mbps), Sedang (~3 Mbps), Tinggi (~5 Mbps), Lossless (~20 Mbps).
  • Kecepatan bit khusus— tentukan dalam kbps untuk kontrol yang baik.

Waktu

  • FPS: 24, 30, 60, atau khusus (1–120 fps).
  • Pemanasan— detik untuk penyelesaian fisika/kendala sebelum perekaman dimulai.
  • Jeda setelahnya— tahan frame terakhir selama durasi tertentu.
  • Sertakan frame terakhir— beralih.

Area Pandang & Pangkas

  • Mengaktifkan/menonaktifkan pemotongan— beralih wilayah pangkas.
  • Pangkas persegi panjang— X, Y, Lebar, Tinggi dalam koordinat dunia Spine.
  • Jepret untuk memasangkan— pemotongan otomatis ke pasangan kerangka dengan padding yang dapat dikonfigurasi.
  • Hamparan pangkas interaktif— seret sudut/tepi langsung di area pandang.

Resolusi

  • Modus skala— penggeser persentase (10%–400%).
  • Modus tetap— dimensi piksel eksplisit (hingga 4096 piksel).
  • Resolusi keluaran yang dihitung ditampilkan secara langsung.

Opsi Render

  • Render tulang— termasuk debug overlay tulang.
  • Merender gambar— sertakan gambar lampiran.
  • Render yang lain— kotak pembatas, jalur.
  • MSAA— Tidak ada / 2× / 4× anti-aliasing.
  • Menghaluskan— level 0–8 dengan pilihan algoritma (Bicubic / Bilinear).

Latar belakang

  • Transparan— dinonaktifkan secara otomatis untuk format yang tidak memiliki alfa (misalnya GIF, JPEG).
  • Warna solid— pemilih warna khusus.
  • Papan main dam— indikator transparansi visual.
  • Dukungan saluran alfa: VP9+WebM, AV1+MP4, Urutan PNG, APNG, Urutan WebP.

Hamparan HUD

  • Beralih: info trek, waktu, nomor bingkai, FPS, label kerangka.
  • Teks khusus— rangkaian tanda air.
  • Posisi— 4 sudut (kiri atas, kanan atas, kiri bawah, kanan bawah).
  • Ukuran huruf— 8–64 piksel, ditambah pemilih warna teks.

Ulangi & Multi-Kerangka

  • Ulangi hitungan— 1–100 iterasi putaran.
  • Pasangan sasaran— merekam kerangka tertentu atau seluruhnya.
  • Modus kerangka— Gabungan (file tunggal) / File terpisah (satu file per kerangka).

Templat Nama File

String templat dengan variabel:{project}, {animation}, {W}, {H}, {fps}. Pratinjau langsung dari nama file yang diselesaikan akan ditampilkan.

Integrasi Garis Waktu

Rentang perekaman muncul sebagai klip putus-putus berwarna merah/oranye di timeline. Seret tepi untuk mengubah ukuran rentang, seret badan untuk mengubah posisinya, atau gunakan tombol pengaturan (⚙️) untuk membuka pengaturan perekaman penuh.

Tab Hasil

hasilmejaoptimasi

ItuHasiltab menunjukkan keluaran pengoptimalan terperinci.

  • Tabel hasil— tampilan baris per perubahan hasil pengoptimalan JSON (misalnya animasi/tulang/properti/keyframe mana yang diubah atau dihapus).
  • Perbandingan sprite/Atlas— ketika optimasi tekstur digunakan, bagian ini membandingkan ukuran sprite dan hasil pengepakan.

Tip: gunakan tampilan Hasil untuk menjawab:apa sebenarnya yang berubah?

Tab Statistik

statistikgrafikmetrik

ItuStatistiktab merangkum hasil pengoptimalan sebagai bagan dan metrik gabungan.

  • Bagan Optimasi— memvisualisasikan dampak pengoptimalan pada kumpulan data (bila JSON pengoptimalan menghasilkan perubahan).
  • Tabel Metrik— nomor-nomor penting seperti ukuran asli/baru dan persentase pengurangan.
  • Statistik Pengepakan Tekstur— jika atlas pengemasan ulang digunakan, menampilkan halaman, total/area yang digunakan, efisiensi, dan pengelompokan per halaman.

Gunakan tab ini untuk menjawab:seberapa banyak peningkatan yang kami peroleh secara keseluruhan?

Contoh Saluran Pipa (Video)

videocontohsaluran pipayoutube

Di bawah ini adalah saluran pipa dunia nyata yang lengkap dari playlist resmi YouTube.

Buka daftar putar lengkap

Contoh

Spine2D Eksperimen 1: Optimasi Kurva dengan Algoritma RDP— Demo pengoptimalan 2D Spine dasar: algoritma Ramer–Douglas–Peucker (RDP) membuang data kurva/kunci yang berlebihan untuk mengecilkan JSON. RDP bisa menghapus kunci penting, jadi selalu tinjau animasi dan kecualikan tulang/slot sensitif dengan simpul filter sebelum simpul RDP.Tonton di YouTube

Spine2D Eksperimen 2: Optimasi Kurva dengan Algoritma Kuantisasi— kuantisasi adalah pengoptimal kurva 2D Spine yang paling aman: nilai pembulatan (seringkali hingga 1 desimal) memberikan keuntungan ukuran secara langsung. Contoh: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. Gunakan node kuantisasi sebagai langkah terakhir sebelum node keluaran untuk mengunci optimasi; video ditampilkan sebelum/sesudah dengan perubahan visual yang hampir tidak terlihat.Tonton di YouTube

Spine2D Eksperimen 3: Membangun Kembali Kurva dengan Algoritma Spline & Refit— Spline bersifat lossless untuk segmen lurus (menghilangkan tombol tengah yang berlebihan), sedangkan Refit bersifat lossy namun kuat: ia membangun kembali bagian kompleks sebagai kurva Bézier tunggal. Algoritme ini ideal setelah pembuatan fisika dan pembersihan melalui node Schneider. Catatan: Perulangan reparasi di atas 100 memerlukan waktu beberapa menit untuk menemukan kurva terbaik. Video ini menunjukkan cara kerja kedua metode dan persentase pengoptimalan yang diperoleh.Tonton di YouTube

Spine2D Eksperimen 4: Menghapus Data Redundan dengan Visibilitas Lampiran & Node Pembersihan— pengoptimalan 2D Spine struktural menggunakan node Visibilitas dan Pembersihan Lampiran. Visibilitas Lampiran menonaktifkan lampiran saat alfa memudar ke 0 dan memulihkannya saat fade‑in, mengurangi panggilan menarik dan menghapus kunci yang berlebihan. Pembersihan menghilangkan redundansi logis: trek warna/alfa yang tidak digunakan, kunci rotasi IK yang dikontrol sepenuhnya oleh batasan, dan kunci batasan jalur. Video ini menunjukkan perbedaan pengoptimalan berbasis logika dengan penyederhanaan kurva.Tonton di YouTube

Spine2D Eksperimen 5: Membangun Saluran Pipa Non-Linear (Memfilter & Menggabungkan Node)— Pengoptimalan 2D Spine non-linier: membagi aliran data dengan filter (Animasi, Tulang, Slot, Parameter, atau Kulit), menjalankan algoritme berbeda pada cabang paralel (misalnya, kompresi agresif untuk tulang tubuh sekaligus menjaga animasi wajah tidak hilang), lalu menggabungkan cabang dengan simpul Gabung menjadi satu kerangka. Alur kerja ini lebih dari sekadar alur Input → Optimalkan → Output dan memungkinkan Anda hanya menargetkan apa yang harus dioptimalkan.Tonton di YouTube

Spine2D Eksperimen 6: Pengemasan Ulang Tekstur & Penskalaan Selektif dengan Node Kustom— pipeline pengoptimalan tekstur tingkat lanjut: node Atlas Unpacker/Repacker memungkinkan Anda membongkar, mengubah ukuran/kompres, dan mengemas ulang atlas dalam satu grafik, lebih cepat dibandingkan alur kerja Spine standar. Dengan menggunakan pipeline non-linier, Anda bisa membagi aset, mempertahankan tekstur karakter pada 100% sambil menurunkan skala lainnya hingga 25%, lalu menggabungkan semuanya kembali menjadi satu atlas bersama. Atlas/Node Asset Penampil menyediakan inspeksi visual dan pemfilteran aset dan atlas di setiap tahap. Hal ini memudahkan untuk menentukan target pengubahan ukuran, memproses secara selektif, dan menggabungkan kembali hasil sebagai templat yang dapat digunakan kembali.Tonton di YouTube

Spine2D Eksperimen 7: Pengubahan Ukuran Skeleton Instan dengan Skala Node— pipeline pengoptimalan 2D Spine ujung ke ujung plus penskalaan kerangka. Node Skala menggantikan alur kerja Spine yang membosankan (ekspor/impor, pengemasan ulang/pembongkaran, jalur perbaikan) dengan satu langkah grafik: tetapkan ukuran target, pratinjau langsung di area pandang, dan ulangi secara real-time. Video ini menyatukan pengoptimalan kurva/kunci, pemrosesan aset, dan pengubahan ukuran kerangka dalam satu saluran yang disederhanakan.Tonton di YouTube

Spine2D Eksperimen 8: Ikhtisar Node Beta Publik— penelusuran setiap node yang tersedia dalam versi beta publik dan cara memoles ulang kebutuhan animator dan pengembang jembatan. Meliputi pembersihan kunci redundan, penyederhanaan Bézier‑to‑linear, pembulatan ukuran, penghapusan lampiran yang tidak terlihat, pembersihan properti yang tidak digunakan, deteksi karakter non-Inggris, dan atlas unpack/filter/scale/repack. Dual Penampil memvalidasi hasil dengan visual berdampingan dan perbandingan FPS. Beta Publik sedang ditayangkanre-polish.com. Tonton di YouTube

Spine2D Eksperimen 9: Memasukkan Batasan Fisika ke Keyframe— Dalam video ini, saya mendemonstrasikan eksperimen terbaru saya dengan memasukkan batasan fisika ke dalam bingkai utama standar. Algoritme pemanggangan yang baru memastikan: Loop Sempurna (tidak ada jitter atau lompatan antara frame awal dan akhir), Ukuran File yang Dioptimalkan (pembersihan kurva otomatis menjaga ukuran JSON mendekati aslinya), dan Kompatibilitas Mundur (kunci yang dipanggang memungkinkan Anda menggunakan animasi fisika Spine 4.2 dalam Spine 4.1 atau bahkan 4.0).Tonton di YouTube

Nodes

Input

Mengimpor file proyek Spine, input khusus JSON, aset demo, dan paket ZIP ke dalam graf.

Tujuan: Ini adalah titik masuk utama untuk sebagian besar alur kerja. Node ini membaca JSON, atlas, dan tekstur lalu menormalkannya menjadi data internal yang dapat diproses node lanjutan.

Mode yang didukung:
1. Proyek lengkap: JSON + atlas + tekstur
2. Hanya JSON: memproses data skeleton/animasi tanpa atlas
3. Paket ZIP: file zip terkemas yang berisi proyek lengkap
4. Aset demo: data contoh bawaan untuk pengujian cepat

Output utama:
- **payload_out**: data yang dinormalisasi untuk node optimasi
- **original_json_out**: JSON sumber untuk perbandingan atau rekonstruksi
- **atlas_project_out**: proyek atlas yang sudah di-parse saat tekstur disediakan

Picture Input

Menambahkan gambar PNG/JPEG mandiri ke viewport agar Anda dapat membuat pratinjau dan shot presentasi yang lebih rapi.

Tujuan: Gunakan node ini untuk menempatkan gambar langsung ke viewport sebagai lapisan presentasi atau alat bantu visual. Node ini berguna saat Anda ingin menghias adegan, menambahkan grafis pendukung, dan membuat pratinjau proyek terlihat lebih matang sebelum merekam video atau demo.

Alur kerja: Muat satu gambar, lalu gunakan alat viewport untuk mengubah skalanya, memindahkannya, dan menyesuaikan z-index-nya agar posisinya pas di dalam komposisi. Ini memudahkan pembuatan shot showcase yang menarik tanpa menyentuh data utama proyek Spine.

Node ini bersifat mandiri dan tidak mengekspos soket graf.

Output

Mengumpulkan hasil akhir dan memungkinkan Anda mengunduh data yang dioptimalkan sebagai file terpisah, kumpulan file yang dikelompokkan, atau arsip.

Tujuan: Bertindak sebagai pusat ekspor untuk JSON yang dioptimalkan, data atlas, tekstur, dan sprite. Node ini dapat merakit hasil dari satu set JSON/atlas/tekstur, dari beberapa set file, atau hanya dari sprite saat Anda menginginkan output gambar tanpa membangun ulang proyek Spine penuh.

Opsi ekspor:
- Unduh file satu per satu atau sebagai satu arsip
- Unduh hasil terkemas atau arsip dengan file yang tidak dikemas
- Ekspor JSON dalam bentuk ringkas atau bentuk pretty-print yang mudah dibaca
- Ekspor data proyek Spine lengkap atau hanya hasil sprite/gambar

Alur chaining: OutputNode tidak harus menjadi ujung mutlak graf. Anda dapat meneruskan outputnya ke tahap pipeline lain dan menjalankan file yang sama melalui pass optimasi tambahan. Dalam praktiknya, optimasi key dan curve diuji hingga 3 iterasi berturut-turut.

Output utama:
- **reconstructed_json_out**: JSON Spine yang dibangun ulang
- **original_json_passthrough_out**: passthrough JSON asli
- **payload_out**: payload untuk chaining lanjutan
- **changes**: perubahan optimasi yang terkumpul
- **atlas_assets**: sumber daya atlas yang siap diekspor

RDP

Menyederhanakan kurva animasi menggunakan algoritma Ramer-Douglas-Peucker (RDP).

Tujuan: Mengurangi jumlah keyframe dalam segmen animasi linier atau hampir linier dengan menghilangkan titik-titik yang terletak pada garis lurus di antara dua titik lainnya.

Aturan Emas: Dinonaktifkan secara default. Ini melindungi kurva dengan bentuk signifikan (luas/lengkungan) agar tidak rata menjadi linier. Nonaktifkan hanya untuk kompresi yang lebih agresif setelah tinjauan visual.

Kunci soket: payload_in, payload_out, perubahan

Spline

Menyesuaikan kurva spline halus ke bingkai utama animasi, mengurangi titik perantara yang tidak perlu.

Tujuan: Pemasangan kurva yang halus dengan tetap menjaga kualitas visual.

Kunci soket: payload_in, payload_out, perubahan

Refit

Memperkirakan rangkaian bingkai utama yang padat dengan kurva Bezier yang lebih sedikit untuk mengurangi ukuran.

Tujuan: Menyesuaikan lebih sedikit kurva namun tetap dalam toleransi.

Kunci soket: payload_in, payload_out, perubahan

Quantizer

Mengurangi presisi nilai numerik dalam bingkai utama dan kurva.

Tujuan: Cara sederhana namun efektif untuk mengurangi ukuran file dengan membulatkan angka ke sejumlah tempat desimal tertentu.

Penggunaan: Dapat diterapkan ke hampir semua data animasi. Menjadi lebih efektif dengan jumlah bingkai utama yang lebih tinggi.

Perhatian: Kuantisasi yang terlalu agresif (presisi rendah) dapat menyebabkan jitter atau artefak visual dalam animasi.

Kunci soket: payload_in, payload_out, perubahan

Cleanup

Melakukan berbagai tugas pembersihan untuk menghapus data animasi yang berlebihan atau tidak perlu.

Tujuan: Alat khusus untuk menghapus jenis data berlebihan tertentu yang mungkin terlewatkan oleh pengoptimal lain.

Penggunaan: Hubungkan payload Anda ke 'payload_in' dan ambil hasilnya dari 'payload_out'. Jika Anda menginginkan laporan per perubahan, gunakan juga 'perubahan'.

Kunci soket:
- Masukan: payload_in
- Output: payload_out, berubah

Pembersihan yang didukung saat ini:
1. **Hapus Trek Warna/Alfa yang Tidak Digunakan**: Menghapus garis waktu warna/alfa untuk slot yang tidak pernah terlihat selama animasi.
2. **Hapus Rotasi IK yang Berlebihan**: Menghapus bingkai utama rotasi dari tulang yang sepenuhnya dikontrol oleh batasan IK dengan campuran 100%.
3. **Hapus Kunci Batasan Jalur**: Menghapus bingkai utama putar/terjemahkan dari tulang yang sepenuhnya dikontrol oleh batasan jalur (nilai campuran 100%).
4. **Sanitasi Karakter Non-Inggris**: Mengganti karakter non-Inggris pada nama/pengidentifikasi untuk menghindari masalah pada alat hilir.

Scale

Menskalakan semua nilai numerik dalam bingkai utama animasi berdasarkan faktor tertentu.

Tujuan: Menyeragamkan skala data animasi, berguna untuk mengubah ukuran kerangka secara proporsional atau menyesuaikan intensitas animasi.

Penggunaan: Hubungkan **payload_in** dan ambil hasilnya dari **payload_out**.

Kunci soket: payload_in, payload_out

Schneider

Menyesuaikan kurva Bezier yang halus ke bingkai utama animasi menggunakan algoritma pemasangan kurva Schneider.

Tujuan: Pemasangan kurva tingkat lanjut yang menghasilkan kurva Bezier yang tampak alami dari rangkaian bingkai utama yang padat.

Ketersediaan: **Node khusus plus**.

Cara kerjanya: Algoritme Schneider menganalisis posisi keyframe dan garis singgung untuk menghasilkan titik kontrol Bezier optimal yang mendekati gerakan aslinya.

Parameter:
- **Toleransi Kesalahan**: Penyimpangan maksimum yang diperbolehkan dari bingkai utama asli. Lebih rendah = lebih akurat, lebih tinggi = kurva lebih halus.
- **Sudut Sudut**: Sudut ambang (derajat) untuk membagi kurva menjadi beberapa segmen.

Terbaik untuk:
- Animasi yang digambar tangan atau diimpor dengan banyak bingkai utama
- Mengubah interpolasi linier menjadi kurva Bezier yang halus
- Mengurangi jumlah keyframe dengan tetap menjaga kualitas kurva

Catatan: Lebih intensif secara komputasi dibandingkan algoritme yang lebih sederhana seperti RDP, namun menghasilkan kualitas kurva yang unggul.

Kunci soket: payload_in, payload_out, perubahan

Physics Constraint Bake

Memasukkan Spine gerakan PhysicsConstraint ke dalam bingkai utama putar/terjemahkan tulang dan hapus garis waktu fisika.

Tujuan: Mengubah simulasi fisika runtime menjadi bingkai utama eksplisit sehingga animasi bersifat deterministik dan dapat diedit tanpa batasan fisika. Setelah dipanggang, batasan fisika dan garis waktu fisika dihapus dari payload.

Ketersediaan: **Node khusus plus**.

Masukan/Keluaran:
- **payload_in** → **payload_out** (dipanggang)
- **perubahan** (daftar perubahan opsional)

Kontrol:
- **Sampel FPS**: Simulasi laju pengambilan sampel untuk pemanggangan.
- **Rotasi Panggang**: Menulis tombol rotasi yang dipanggang.
- **Terjemahan Panggang**: Tulis kunci terjemahan yang dipanggang.
- **Terjemahan Panggang (Anak-anak)**: Terapkan terjemahan panggang ke tulang anak yang mengandalkan gerakan fisika.

Catatan:
- Memerlukan Spine JSON asli untuk merekonstruksi data simulasi.
- Gunakan saat Anda ingin menghilangkan batasan fisika tetapi tetap mempertahankan gerakan.

Attachment Visibility

Mengoptimalkan rendering dengan mengatur lampiran slot ke null ketika alpha-nya nol.

Tujuan: Mencegah mesin game memproses atau merender lampiran yang tidak terlihat.

Penggunaan: Memproses **payload_in**, menghasilkan output **payload_out** yang dioptimalkan, dan secara opsional melaporkan **perubahan**.

Kunci soket: payload_in, payload_out, perubahan

Payload Merger

Menggabungkan kembali beberapa payload animasi yang diproses menjadi satu payload terpadu.

Tujuan: Penting untuk alur pemrosesan paralel di mana animasi atau kelompok tulang yang berbeda dioptimalkan secara terpisah dan perlu digabungkan kembali.

Masukan:
- **basis**: Muatan utama (struktur kerangka)
- **override**: Satu atau lebih muatan yang lintasannya menggantikan lintasan dasar

Keluaran:
- **merged_out**: Gabungan muatan

Kunci soket: base, override, merge_out

Animation Viewer

Alat visual untuk memeriksa dan membandingkan kurva animasi sebelum dan sesudah pengoptimalan.

Tujuan: Memberikan representasi grafis dari bingkai utama dan kurva untuk trek yang dipilih.

Penggunaan: Hubungkan **before_in** dan **after_in** untuk melapisi yang asli vs yang dioptimalkan. Secara opsional, sambungkan **perubahan** untuk menyorot trek yang terkena dampak.

Kunci soket: sebelum_masuk, setelah_masuk, berubah

Animation Filter

Memfilter trek animasi berdasarkan nama animasi (misalnya, 'run', 'idle').

Tujuan: Berguna untuk menerapkan strategi pengoptimalan yang berbeda pada animasi yang berbeda.

Penggunaan: Memfilter **payload_in** ke dalam **payload_out** dan menampilkan **animation_list** untuk pemilihan UI.

Kunci soket: payload_in, payload_out, animation_list

Asset Filter

Memfilter aset atlas berdasarkan nama, bekerja dalam dua mode: sebelum unpacker (memfilter atlas teks) atau setelah unpacker (memfilter sprite).

Tujuan: Mengontrol aset mana yang disertakan dalam alur kerja - baik aset mana yang akan dibongkar dari atlas, atau sprite mana yang sudah dibongkar untuk disertakan dalam pengemasan ulang.

Masukan/Keluaran:
- Mode Atlas: **atlas_in** → **atlas_out**
- Mode sprite: **sprite_in** → **sprite_out**

Kunci soket: atlas_in, atlas_out, sprites_in, sprites_out

Bone Filter

Memfilter trek animasi tulang berdasarkan nama tulang.

Tujuan: Memungkinkan penargetan atau pengecualian tulang tertentu dari proses pengoptimalan.

Penggunaan: Memfilter **payload_in** menjadi **payload_out**.

Kunci soket: payload_in, payload_out

Skin Filter

Memfilter animasi dan data aset berdasarkan nama skin.

Tujuan: Memproses hanya skin tertentu dari proyek Spine multi-skin.

Penggunaan: Memfilter **payload_in** menjadi **payload_out**.

Kunci soket: payload_in, payload_out

Slot Filter

Memfilter trek animasi slot berdasarkan nama slot.

Tujuan: Berguna untuk menargetkan atau mengecualikan slot tertentu yang mungkin memiliki persyaratan waktu atau visibilitas khusus.

Penggunaan: Memfilter **payload_in** menjadi **payload_out**.

Kunci soket: payload_in, payload_out

Parameter Filter

Memfilter trek animasi berdasarkan jenis propertinya (misalnya rotasi, skala, warna).

Tujuan: Memungkinkan penerapan pengoptimalan berikutnya hanya pada jenis data animasi tertentu.

Penggunaan: Memfilter **payload_in** menjadi **payload_out**.

Kunci soket: payload_in, payload_out

Atlas Unpacker

Mengekstrak sprite individual dari tekstur Spine atlas.

Tujuan: Memecah file atlas menjadi sprite komponennya, sehingga memungkinkan analisis atau pengemasan ulang individual.

Penggunaan: Hubungkan **atlas_project** dari InputNode ke **atlas_project** (atau **atlas_project_in** yang lama) pada node ini. Secara opsional, sambungkan **skeleton_json_in** (dari **original_json** InputNode) untuk mengaktifkan pemotongan mesh-aware (memotong sprite ke batas lambung mesh, bukan batas persegi panjang, yang secara signifikan dapat mengurangi memori tekstur untuk lampiran mesh).

Keluaran:
- **sprite_out**: Array sprite terstandarisasi (untuk viewer/repacker)
- **sprite_data_out**: Gambar/metadata sprite yang diekstraksi (paket terstruktur)
- **atlas_out**: passthrough proyek Atlas

Kunci soket: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out

Atlas Repacker

Mengemas ulang masing-masing sprite menjadi satu atau lebih atlas tekstur baru yang dioptimalkan.

Tujuan: Mengoptimalkan memori tekstur dan berpotensi mengurangi panggilan penarikan dengan membuat sprite sheet yang efisien.

Penggunaan: Menerima sprite melalui **sprites_data_in** (paket sprite terstruktur) atau melalui **sprites_out** (array sprite standar). Jika diperlukan untuk penanganan alfa/pengemasan poligon, berikan kerangka asli melalui **original_json**. Menghasilkan atlas yang dikemas sebagai **atlas_out**.

Kunci soket: sprites_data_in, sprites_out, original_json, atlas_out

Atlas Viewer

Alat visualisasi dan analisis atlas yang ringan untuk memeriksa struktur atlas sebelum membongkar.

Tujuan: Menyediakan cara cepat untuk melihat pratinjau halaman dan region atlas tanpa melakukan operasi pembongkaran yang berat. Membantu memvalidasi struktur atlas dan mengidentifikasi region yang tidak digunakan.

Penggunaan: Hubungkan satu proyek atlas ke **atlas_project** (atau **atlas_in** / **atlas** lama), atau periksa sekumpulan proyek atlas melalui **atlas_projects**. Secara opsional, sambungkan kerangka JSON ke **json** untuk analisis penggunaan.

Kunci soket: atlas_project, atlas_projects, atlas_in, atlas, json

Atlas Merger

Menggabungkan beberapa sumber atlas menjadi satu atlas terpadu.

Tujuan: Menggabungkan beberapa proyek atlas menjadi satu.

Masukan:
- **atlas_inputs**: Array multi-input dari proyek atlas

Keluaran:
- **atlas_out**: Proyek atlas digabungkan
- **merged_out**: Output gabungan lama
- **merged_atlas_out**: Output gabungan lama

Kunci soket: atlas_inputs, atlas_out, merge_out, merge_atlas_out

Saluran pipa yang umum:
```
InputA → Unpacker → Repacker ─┐
                               ├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Sebelum Repacker, datanya adalah sprite individual; setelah Repacker, proyek ini menjadi proyek atlas. Atlas Penggabungan menggabungkan proyek atlas, lalu pass Unpacker → Repacker final akan mengemas ulang semuanya menjadi satu atlas yang terpadu.

Asset Viewer

Menampilkan sprite individual dari atlas yang belum dibongkar.

Tujuan: Alat debugging visual untuk manipulasi atlas.

Penggunaan: Menerima sprite melalui **sprites_out** (standar) atau **sprites_in** / **sprites_data** lama.

Kunci soket: sprites_out, sprites_in, sprites_data