Learn how to optimize your Spine 2D animations, reduce file size, and improve performance
FPSPlusPremiumUIVideoYouTubeanimationbiểu đồbảngbộ nhớchỉ sốcó-mất-dữ-liệudữ liệuexportgiao-diệngiáguidehiệu nănghướng dẫnkhái niệmkhông-mất-dữ-liệukết nốikết quảloạingười mới bắt đầupipelineplaybackquy trìnhrecorderrecordingsocketthống kêtimelinetrình-xemtối ưu hóavideoviewerví dụđiều khiểnđăng ký
Bắt đầu: Quy trình cơ bản
người mới bắt đầuquy trìnhhướng dẫn
Hướng dẫn này sẽ giúp bạn bắt đầu nhanh với JSON Optimizer.
Tải dự án: Dùng InputNode để tải các tệp .json, .atlas và .png của bạn.
Chọn preset (chế độ Plus): Ở chế độ Plus, dùng bảng bên phải để chọn một preset có sẵn (ví dụ: "Basic Fallback"). Việc này sẽ tự động tạo một đồ thị tối ưu hóa. Ở chế độ Free, hãy dựng đồ thị tối thiểu thủ công: InputNode → QuantizerNode → OutputNode.
Chạy đồ thị: Nhấn nút "Chạy đồ thị".
So sánh kết quả: Chuyển sang tab "Trình xem" để so sánh trực quan hoạt ảnh gốc và hoạt ảnh đã tối ưu.
Xem lại thay đổi: Ở các tab "Kết quả" và "Thống kê", bạn sẽ thấy thông tin chi tiết về những key nào đã bị sửa đổi hoặc bị xóa.
Loại socket & luồng dữ liệu
socketloạidữ liệukết nối
Bài viết này giải thích các kiểu dữ liệu được dùng bởi socket trong đồ thị node và những gì có thể kết nối với nhau.
Quy tắc nhanh
Hầu hết các node xử lý làm việc trên dữ liệu Spine. Các node liên quan đến atlas làm việc trên dự án atlas hoặc sprite. Dùng ValidatorNode khi bạn không chắc socket đang mong đợi gì.
Các loại socket
Dữ liệu Spine — biểu diễn dự án Spine thân thiện với môi trường chạy, được hầu hết node xử lý sử dụng.
Dự án atlas — metadata atlas + ảnh các trang, dùng bởi các node atlas.
Sprite — ảnh/vùng sprite đã được unpack (Atlas Unpacker → Trình xem tài nguyên / Atlas Repacker).
JSON — Spine JSON gốc hoặc đã được tái tạo để chẩn đoán/kiểm tra/so sánh.
Thay đổi — danh sách/luồng khác biệt do một số bộ tối ưu tạo ra và được node xem/báo cáo sử dụng.
Khóa → loại → kết nối tới
Khóa socket (ví dụ)
Kiểu dữ liệu
Được tạo bởi
Kết nối tới
payload, payload_in, payload_out
Dữ liệu Spine
InputNode, hầu hết node xử lý
Node xử lý (RDP/Spline/Refit/Quantizer/Cleanup/...), sau đó OutputNode.payload
original_json
JSON
InputNode
DiagnosticNode, JSONDiffNode.json_before, OutputNode.original_json, một số node atlas (ví dụ: chế độ alpha của repacker)
reconstructed_json_out
JSON
OutputNode
JSONDiffNode.json_after, trình xác thực/gỡ lỗi
changes
Danh sách thay đổi
Một số node xử lý + OutputNode
AnimationViewerNode (tuỳ chọn), báo cáo/gỡ lỗi
atlas_project
Dự án atlas
InputNode / trình xem atlas
AtlasUnpackerNode.atlas_project, OutputNode.atlas_project, các bộ lọc atlas
atlas_in, atlas_out
Dự án atlas (hoặc luồng liên quan atlas)
Node/bộ lọc atlas
Node atlas, AtlasViewerNode, AtlasMergerNode (qua nhiều đầu vào)
Có mất dữ liệu: các phương pháp này đơn giản hoá các đường cong hoạt ảnh... Ví dụ: Node tối ưu RDP, QuantizerNode.
Khuyến nghị: Luôn bắt đầu với tối ưu không mất dữ liệu. Chỉ dùng phương pháp có mất dữ liệu khi cần giảm thêm kích thước tệp, và luôn kiểm tra kết quả bằng mắt.
Cách đo lường hiệu quả
hướng dẫnchỉ sốthống kê
Để hiểu hiệu quả của tối ưu hóa, hãy chú ý đến các chỉ số sau:
Kích thước tệp: Kích thước cuối cùng của tệp .json là mục tiêu chính của tối ưu hóa.
Số lượng khung hình chính: Trong thẻ "Thống kê", bạn sẽ tìm thấy bảng và biểu đồ hiển thị số lượng khung hình chính đã bị xóa trong mỗi hoạt ảnh.
So sánh trực quan: Luôn sử dụng thẻ "Trình xem" để so sánh hoạt ảnh "trước" và "sau". Đảm bảo rằng tối ưu hóa có mất dữ liệu không gây ra các hiện tượng trực quan không chấp nhận được.
Báo cáo trong bảng "Kết quả": Tại đây bạn có thể kiểm tra chi tiết từng thay đổi cụ thể được thực hiện đối với dữ liệu của bạn.
Trình xem: Bảng điều khiển
trình-xemđiều khiểngiao-diện
Thẻ Trình xem hiển thị bảng Điều khiển phủ lên canvas. Nó được chia thành ba nhóm:
Điều khiển hoạt ảnh
Hoạt ảnh — chọn hoạt ảnh Spine đang phát.
Giao diện — chọn giao diện được áp dụng.
Tốc độ — hệ số tốc độ phát (0.1× → 3.0×).
Điều khiển chế độ xem
Đặt lại góc nhìn — khôi phục vị trí camera/bố cục mặc định.
Tùy chọn hiển thị — các giá trị để định vị chế độ xem so sánh: Khoảng cách X / Khoảng cách Y (khoảng cách giữa Gốc/Đã tối ưu) và Dịch chuyển X / Dịch chuyển Y (dịch chuyển toàn cục).
Điều khiển gỡ lỗi
Chế độ gỡ lỗi — bật các lớp phủ gỡ lỗi khi kết xuất (phụ thuộc vào engine).
Bật vật lý — bật/tắt mô phỏng vật lý (nếu skeleton sử dụng vật lý).
Nhãn — bật/tắt lớp phủ nhãn.
Trình xem: Bảng hiệu năng
hiệu năngFPSbộ nhớUI
Bảng Performance hiển thị các chỉ số runtime theo thời gian thực cho (các) skeleton đang phát.
Thời gian thực
FPS — số khung hình/giây được monitor đo.
Frame Time — thời gian mỗi khung hình (ms, càng thấp càng tốt).
FPS chart — 120 mẫu gần nhất hiển thị dạng cột.
Chỉ số skeleton
Visible Slots — số slot hiển thị ở mẫu gần nhất.
Avg. Visible — trung bình trượt của slot hiển thị (ổn định hơn một khung hình).
Vertices — số lượng vertex hiện tại dùng để render.
Bounds (px) — kích thước bounds hiện tại (rộng×cao) theo pixel.
Avg. Bounds — trung bình trượt của bounds.
Largest Texture — trang atlas lớn nhất (theo kích thước) được phát hiện cho skeleton.
Texture Memory — ước tính tổng bộ nhớ texture cho các trang atlas đã tải. Khi có thể, bảng cũng hiển thị chi tiết theo từng trang (tên file, kích thước và dung lượng ước tính).
Cải thiện (khi có Optimized)
Slot Improvement — so sánh Avg. Visible giữa Original và Optimized.
Memory Change — so sánh Texture Memory giữa Original và Optimized.
Trình xem: Dòng thời gian
viewertimelineanimationplaybackguide
Bảng Dòng thời gian là một bộ sắp xếp hoạt ảnh có thể gắn kết ở cuối Trình xem. Nó cho phép bạn sắp xếp các clip hoạt ảnh trên nhiều track, điều khiển phát lại và xem trước các chuyển tiếp.
Track & Clip
Tối đa 4 track hoạt ảnh — mỗi track tương ứng với một lớp trackIndex của Spine. Track cao hơn hoà trộn lên trên các track thấp hơn.
Thêm hoạt ảnh — nhấp nút + trên bất kỳ track nào để mở trình chọn hoạt ảnh (có bộ lọc tìm kiếm).
Kéo & thay đổi kích thước clip — kéo thân clip để di chuyển dọc theo track; kéo cạnh trái/phải để thay đổi thời gian bắt đầu hoặc thời lượng.
Xóa clip — chọn clip và nhấn Delete hoặc Backspace.
Phát hiện chồng lấn — các clip chồng lấn trên cùng track được đánh dấu màu đỏ.
Điều khiển phát lại
Phát / Tạm dừng / Dừng — các điều khiển phát lại tiêu chuẩn.
Trước / Tiếp — nhảy đến đầu clip trước hoặc clip tiếp theo.
Tốc độ hoạt ảnh — thanh trượt từ 0.1× đến 3.0×.
Tự động dừng — phát lại tự động dừng khi kết thúc dòng thời gian.
Hoà trộn chuyển tiếp
Thời gian hoà trộn toàn cục — đặt thời gian crossfade mặc định giữa các clip liên tiếp.
Tùy chỉnh theo từng chuyển tiếp — nhấp vào bong bóng chuyển tiếp giữa hai clip để đặt thời gian hoà trộn tùy chỉnh. Bạn có thể đặt lại các tùy chỉnh riêng về giá trị toàn cục.
Tua & Kéo
Đầu phát — kéo tay cầm trên thước thời gian hoặc nhấp vào thước để tua.
Xem trước thời gian con trỏ — di chuột qua vùng track hiển thị thời gian tại vị trí con trỏ.
Web Worker — việc tua và tính toán sự kiện được chuyển sang worker nền để đảm bảo hiệu năng mượt mà.
Phát lại nhận biết vật lý
Chuyển đổi vật lý giữa Update (ràng buộc hoạt động) và None (tắt).
Khi tua, thời gian skeleton được tiến tới để ổn định đúng các ràng buộc vật lý.
Hỗ trợ nhiều Skeleton
Bộ chọn cặp mục tiêu — mỗi track có thể nhắm tất cả các cặp (🌐 Tất cả các cặp) hoặc một skeleton cụ thể.
Vị trí và tỷ lệ từng skeleton — đầu vào dịch chuyển X/Y và tỷ lệ cho từng skeleton riêng lẻ.
Thứ tự vẽ — đầu vào số để kiểm soát ưu tiên lớp kết xuất.
Vẽ gỡ lỗi
Bật/tắt hiển thị cho: Xương, Tên xương, Vùng, Lưới, Vỏ, Ranh giới, Đường dẫn, Cắt, Điểm.
Chọn giao diện
Hộp kiểm đa chọn cho tất cả giao diện được định nghĩa trong skeleton đã tải.
Cài đặt hiển thị
Khoảng cách X / Y — khoảng cách giữa các cặp skeleton.
Dịch chuyển X / Y — dịch chuyển khung nhìn toàn cục.
Chuyển đổi PMA — chế độ alpha nhân trước (Spine 3.x) hoặc chế độ alpha atlas (Spine 4.x: auto / pma / bleed / none).
Nhãn skeleton — bật/tắt lớp phủ nhãn.
Trình xem: Ghi hình
viewerrecorderrecordingexportvideoguide
Ghi hình quay lại hoạt ảnh Spine từ trình xem dưới dạng video, ảnh động hoặc chuỗi ảnh.
Chế độ ghi hình
⚡ Ghi nhanh — quay thời gian thực sử dụng MediaRecorder + captureStream(). Chỉ xuất WebM. Nhanh nhưng giới hạn ở tốc độ khung hình thời gian thực.
🎬 Xuất HQ — kết xuất từng khung hình ngoại tuyến sử dụng WebCodecs VideoEncoder + readPixels(). Hỗ trợ tất cả định dạng và tạo ra đầu ra pixel hoàn hảo.
Định dạng đầu ra
Video: WebM, MP4, AVI, MOV
Ảnh động: GIF, Animated PNG (APNG)
Chuỗi ảnh: PNG Sequence, WebP Sequence
Codec (Xuất HQ)
VP8, VP9, H.264 (AVC), AV1, ProRes — các codec khả dụng được tự động phát hiện dựa trên hỗ trợ của trình duyệt.
Chất lượng
Cài đặt sẵn: Thấp (~1 Mbps), Trung bình (~3 Mbps), Cao (~5 Mbps), Không mất dữ liệu (~20 Mbps).
Bitrate tùy chỉnh — chỉ định bằng kbps để kiểm soát chi tiết.
Thời gian
FPS: 24, 30, 60 hoặc tùy chỉnh (1–120 fps).
Khởi động — giây để vật lý/ràng buộc ổn định trước khi bắt đầu ghi.
Dừng sau — giữ khung hình cuối trong một khoảng thời gian đặt.
Bao gồm khung hình cuối — bật/tắt.
Khung nhìn & Cắt
Bật/tắt cắt — bật/tắt vùng cắt.
Hình chữ nhật cắt — X, Y, Chiều rộng, Chiều cao theo tọa độ thế giới Spine.
Bắt theo cặp — tự động khớp vùng cắt theo cặp skeleton với khoảng đệm có thể cấu hình.
Lớp phủ cắt tương tác — kéo các góc/cạnh trực tiếp trong khung nhìn.
Độ phân giải
Chế độ tỷ lệ — thanh trượt phần trăm (10%–400%).
Chế độ cố định — kích thước pixel cụ thể (tối đa 4096px).
Độ phân giải đầu ra được tính toán hiển thị trực tiếp.
Tùy chọn kết xuất
Kết xuất xương — bao gồm lớp phủ gỡ lỗi xương.
Kết xuất hình ảnh — bao gồm ảnh attachment.
Kết xuất khác — hộp giới hạn, đường dẫn.
MSAA — None / 2× / 4× khử răng cưa.
Làm mượt — mức 0–8 với lựa chọn thuật toán (Bicubic / Bilinear).
Nền
Trong suốt — tự động tắt cho các định dạng không hỗ trợ alpha (ví dụ: GIF, JPEG).
Bật/tắt: thông tin track, thời gian, số khung hình, FPS, nhãn skeleton.
Văn bản tùy chỉnh — chuỗi watermark.
Vị trí — 4 góc (trên-trái, trên-phải, dưới-trái, dưới-phải).
Cỡ chữ — 8–64px, cùng bộ chọn màu chữ.
Lặp lại & Nhiều Skeleton
Số lần lặp — 1–100 vòng lặp.
Cặp mục tiêu — ghi một skeleton cụ thể hoặc tất cả.
Chế độ skeleton — Kết hợp (một tệp duy nhất) / Tệp riêng (một tệp cho mỗi skeleton).
Mẫu tên tệp
Chuỗi mẫu với các biến: {project}, {animation}, {W}, {H}, {fps}. Bản xem trước trực tiếp của tên tệp đã giải quyết được hiển thị.
Tích hợp dòng thời gian
Phạm vi ghi hình xuất hiện dưới dạng clip nét đứt đỏ/cam trên dòng thời gian. Kéo cạnh để thay đổi kích thước phạm vi, kéo thân để di chuyển vị trí, hoặc dùng nút cài đặt (⚙️) để mở toàn bộ cài đặt ghi hình.
Thẻ Kết quả
kết quảbảngtối ưu hóa
Thẻ Kết quả hiển thị đầu ra tối ưu hóa chi tiết.
Bảng kết quả — dạng xem mỗi thay đổi một dòng của kết quả tối ưu JSON (ví dụ: hoạt ảnh/xương/thuộc tính/khung hình chính nào được sửa hoặc bị xóa).
So sánh sprite/atlas — khi dùng tối ưu texture, phần này so sánh kích thước sprite và kết quả đóng gói.
Mẹo: dùng thẻ này để trả lời: chính xác đã thay đổi gì?
Thẻ Thống kê
thống kêbiểu đồchỉ số
Thẻ Thống kê tóm tắt kết quả tối ưu hóa bằng biểu đồ và các chỉ số tổng hợp.
Biểu đồ tối ưu — trực quan hóa tác động tối ưu trên toàn bộ dữ liệu (khi tối ưu JSON tạo ra thay đổi).
Bảng chỉ số — các con số chính như kích thước trước/sau và phần trăm giảm.
Thống kê đóng gói texture — nếu dùng đóng gói lại atlas, hiển thị số trang, tổng/đã dùng diện tích, hiệu quả và chi tiết theo từng trang.
Dùng thẻ này để trả lời: tổng thể cải thiện được bao nhiêu?
Ví dụ pipeline (Video)
Videoví dụpipelineYouTube
Dưới đây là các quy trình hoàn chỉnh, thực tế từ playlist YouTube chính thức.
Spine2D Experiments 1: Tối ưu đường cong với thuật toán RDP — bản demo tối ưu Spine 2D cơ bản: thuật toán Ramer–Douglas–Peucker (RDP) loại bỏ dữ liệu đường cong và key dư thừa để giảm JSON. RDP có thể loại bỏ key quan trọng, vì vậy hãy luôn kiểm tra hoạt ảnh và loại trừ xương/slot nhạy cảm bằng các node lọc trước node RDP. Xem trên YouTube
Spine2D Experiments 2: Tối ưu đường cong với thuật toán lượng tử hóa — lượng tử hóa là trình tối ưu đường cong an toàn nhất: làm tròn giá trị (thường đến 1 chữ số thập phân) giúp giảm kích thước ngay lập tức. Ví dụ: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. Dùng node lượng tử hóa làm bước cuối trước node đầu ra để chốt tối ưu; video cho thấy trước/sau với thay đổi hình ảnh gần như không nhận thấy. Xem trên YouTube
Spine2D Experiments 3: Tái dựng đường cong với Spline và Refit — Spline không mất dữ liệu cho các đoạn thẳng (loại bỏ key ở giữa dư thừa), còn Refit có mất dữ liệu nhưng mạnh: tái dựng các đoạn phức tạp thành một đường cong Bézier. Các thuật toán này lý tưởng sau khi bake physics và dọn dẹp bằng node Schneider. Lưu ý: Refit trên 100 vòng lặp có thể mất vài phút để tìm đường cong tốt nhất. Video cho thấy cách hoạt động của cả hai phương pháp và phần trăm tối ưu đạt được. Xem trên YouTube
Spine2D Experiments 4: Loại bỏ dữ liệu dư thừa với các node hiển thị gắn kết và cleanup — tối ưu cấu trúc Spine 2D bằng các node hiển thị gắn kết và cleanup. Node hiển thị gắn kết vô hiệu hóa phần gắn khi alpha về 0 và khôi phục khi fade‑in, giảm draw call và key dư thừa. Cleanup loại bỏ dư thừa logic: track màu/alpha không dùng, key xoay IK do constraint điều khiển hoàn toàn, và key path constraint. Video cho thấy các tối ưu logic này khác với việc đơn giản hóa đường cong như thế nào. Xem trên YouTube
Spine2D Experiments 5: Xây dựng pipeline phi tuyến (bộ lọc và node gộp) — tối ưu phi tuyến Spine 2D: chia luồng dữ liệu bằng các bộ lọc (Hoạt ảnh, Xương, Slot, Tham số hoặc Giao diện), chạy thuật toán khác nhau trên các nhánh song song (ví dụ nén mạnh cho xương thân trong khi giữ hoạt ảnh mặt không mất dữ liệu), sau đó gộp các nhánh bằng node gộp thành một skeleton. Quy trình này vượt qua pipeline Đầu vào → Tối ưu → Đầu ra đơn giản và cho phép tối ưu chỉ những phần cần thiết. Xem trên YouTube
Spine2D Experiments 6: Đóng gói lại texture và scale chọn lọc — pipeline tối ưu texture nâng cao: các node Atlas Unpacker/Repacker cho phép unpack, đổi kích thước hoặc nén và repack atlas ngay trong một đồ thị, nhanh hơn quy trình Spine tiêu chuẩn. Với pipeline phi tuyến, bạn có thể tách tài nguyên, giữ texture nhân vật ở 100% và giảm các texture khác xuống 25%, rồi hợp nhất lại thành một atlas dùng chung. Các node Atlas/Asset Viewer cung cấp kiểm tra trực quan và lọc tài nguyên/atlas ở mọi giai đoạn. Điều này giúp dễ xác định mục tiêu đổi kích thước, xử lý chọn lọc và tái kết hợp kết quả như một mẫu có thể tái sử dụng. Xem trên YouTube
Spine2D Experiments 7: Co giãn skeleton tức thì bằng node Scale — tối ưu Spine 2D từ đầu đến cuối kèm scale skeleton. Node Scale thay thế quy trình Spine rườm rà (export/import, repack/unpack, sửa đường dẫn) bằng một bước trong đồ thị: đặt kích thước mục tiêu, xem trước tức thì trong khung xem và lặp lại theo thời gian thực. Video kết nối tối ưu đường cong và key, xử lý tài nguyên và thay đổi kích thước skeleton trong một pipeline gọn. Xem trên YouTube
Spine2D Experiments 8: Tổng quan node bản beta công khai — tổng quan mọi node có trong bản beta công khai và cách re‑polish kết nối nhu cầu của animator và developer. Bao gồm dọn key dư thừa, đơn giản hóa Bézier→linear, làm tròn để giảm kích thước, loại bỏ phần gắn vô hình, dọn thuộc tính không dùng, phát hiện ký tự không phải tiếng Anh, và atlas unpack/filter/scale/repack. Dual Viewer xác thực kết quả với so sánh trực quan và FPS song song. Public Beta đang mở tại re-polish.com. Xem trên YouTube
Spine2D Experiments 9: Bake ràng buộc vật lý vào keyframe — trong video này, tôi trình bày các thử nghiệm mới nhất về việc bake các ràng buộc vật lý vào keyframe tiêu chuẩn. Thuật toán bake mới đảm bảo: vòng lặp hoàn hảo (không giật hoặc nhảy giữa khung đầu và cuối), kích thước tệp tối ưu (tự động dọn dẹp đường cong giúp kích thước JSON gần với bản gốc) và tương thích ngược (key đã bake cho phép dùng animation vật lý Spine 4.2 trong Spine 4.1 hoặc thậm chí 4.0). Xem trên YouTube
Nodes
Input
Nhập tệp dự án Spine, đầu vào chỉ-JSON, tài nguyên demo và gói ZIP vào đồ thị.
Mục đích: Đây là điểm vào chính cho hầu hết quy trình làm việc. Node này đọc JSON, atlas và texture rồi chuẩn hóa chúng thành dữ liệu nội bộ để các node phía sau có thể xử lý.
Các chế độ được hỗ trợ:
1. Dự án đầy đủ: JSON + atlas + texture
2. Chỉ JSON: xử lý dữ liệu skeleton/animation mà không có atlas
3. Gói ZIP: tệp zip đóng gói chứa một dự án hoàn chỉnh
4. Tài nguyên demo: dữ liệu mẫu tích hợp sẵn để thử nghiệm nhanh
Đầu ra chính:
- **payload_out**: dữ liệu đã chuẩn hóa cho các node tối ưu hóa
- **original_json_out**: JSON nguồn để so sánh hoặc tái dựng
- **atlas_project_out**: dự án atlas đã được parse khi có cung cấp texture
Picture Input
Thêm ảnh PNG/JPEG độc lập vào viewport để bạn tạo các bản xem trước và khung hình trình bày gọn gàng hơn.
Mục đích: Dùng node này để đặt ảnh trực tiếp vào viewport như các lớp trình bày hoặc trợ giúp trực quan. Nó hữu ích khi bạn muốn trang trí một cảnh, thêm đồ họa hỗ trợ và làm cho bản xem trước dự án trông chỉn chu hơn trước khi quay video hoặc demo.
Quy trình: Tải một ảnh, sau đó dùng các công cụ viewport để scale, di chuyển và chỉnh z-index của ảnh để nó nằm đúng vị trí trong bố cục. Cách này giúp bạn tạo các shot giới thiệu hấp dẫn mà không phải đụng đến dữ liệu chính của dự án Spine.
Node này hoạt động độc lập và không cung cấp graph sockets.
Output
Thu thập kết quả cuối cùng và cho phép bạn tải dữ liệu đã tối ưu hóa xuống dưới dạng các tệp riêng lẻ, nhóm tệp hoặc kho lưu trữ.
Mục đích: Hoạt động như trung tâm xuất cho JSON đã tối ưu hóa, dữ liệu atlas, texture và sprite. Nó có thể lắp ráp kết quả từ một bộ JSON/atlas/texture duy nhất, từ nhiều bộ tệp, hoặc chỉ từ sprite khi bạn muốn đầu ra hình ảnh mà không cần dựng lại toàn bộ dự án Spine.
Tùy chọn xuất:
- Tải tệp riêng lẻ hoặc dưới dạng một kho lưu trữ duy nhất
- Tải kết quả đã đóng gói hoặc một kho lưu trữ chứa các tệp chưa đóng gói
- Xuất JSON ở dạng gọn hoặc dạng pretty-print dễ đọc
- Xuất toàn bộ dữ liệu dự án Spine hoặc chỉ kết quả sprite/hình ảnh
Quy trình chaining: OutputNode không nhất thiết phải là điểm cuối tuyệt đối của đồ thị. Bạn có thể chuyển đầu ra của nó sang một giai đoạn pipeline khác và chạy cùng các tệp đó qua thêm các lượt tối ưu hóa. Trên thực tế, tối ưu hóa key và curve đã được thử nghiệm tới 3 lần lặp liên tiếp.
Đầu ra chính:
- **reconstructed_json_out**: JSON Spine đã dựng lại
- **original_json_passthrough_out**: passthrough của JSON gốc
- **payload_out**: payload cho chaining tiếp theo
- **changes**: các thay đổi tối ưu hóa đã thu thập
- **atlas_assets**: tài nguyên atlas sẵn sàng để xuất
RDP
Đơn giản hoá đường cong hoạt ảnh (RDP).
Mục đích: Giảm số lượng khung hình chính trong các đoạn hoạt ảnh tuyến tính hoặc gần tuyến tính bằng cách loại bỏ các điểm nằm trên đường thẳng giữa hai điểm khác.
Quy tắc vàng: Tắt mặc định. Bảo vệ các đường cong có hình dạng đáng kể (diện tích/độ cong) khỏi bị làm phẳng thành tuyến tính. Chỉ tắt khi cần nén mạnh hơn sau khi đã kiểm tra bằng mắt.
Khóa socket: payload_in, payload_out, changes
Spline
Tối ưu hoá đường cong bằng spline.
Mục đích: Làm khớp đường cong mượt mà trong khi vẫn giữ chất lượng hình ảnh.
Khóa socket: payload_in, payload_out, changes
Refit
Refit (Bezier) để giảm số khung hình chính.
Mục đích: Khớp ít đường cong hơn trong giới hạn sai số.
Khóa socket: payload_in, payload_out, changes
Quantizer
Giảm độ chính xác của các giá trị số trong khung hình chính và đường cong.
Mục đích: Phương pháp đơn giản nhưng hiệu quả để giảm kích thước tệp bằng cách làm tròn số đến số chữ số thập phân được chỉ định.
Sử dụng: Có thể áp dụng cho hầu hết tất cả dữ liệu hoạt ảnh. Trở nên hiệu quả hơn với số lượng khung hình chính cao hơn.
Cẩn thận: Lượng tử hóa quá mạnh (độ chính xác thấp) có thể gây rung hoặc hiện tượng trực quan trong hoạt ảnh.
Cleanup
Thực hiện các tác vụ dọn dẹp khác nhau để loại bỏ dữ liệu hoạt ảnh dư thừa hoặc không cần thiết.
Mục đích: công cụ chuyên dụng để loại bỏ một số loại dữ liệu dư thừa mà các bộ tối ưu khác có thể bỏ sót.
Cách dùng: nối payload của bạn vào 'payload_in' và lấy kết quả từ 'payload_out'. Nếu bạn muốn báo cáo theo từng thay đổi, hãy dùng thêm 'changes'.
Khoá socket:
- Đầu vào: payload_in
- Đầu ra: payload_out, changes
Các hạng mục dọn dẹp hiện được hỗ trợ:
1. **Loại bỏ kênh màu/alpha không dùng**: loại bỏ timeline màu/alpha cho các slot không bao giờ hiển thị trong suốt hoạt ảnh.
2. **Loại bỏ xoay IK dư thừa**: loại bỏ khung hình chính xoay khỏi các bone bị điều khiển hoàn toàn bởi IK constraint với mix 100%.
3. **Loại bỏ key ràng buộc đường dẫn**: loại bỏ khung hình chính rotate/translate khỏi các bone bị điều khiển hoàn toàn bởi path constraint (mix 100%).
4. **Chuẩn hoá ký tự không phải tiếng Anh**: thay thế các ký tự không phải tiếng Anh trong tên/định danh để tránh vấn đề với các công cụ phía sau.
Scale
Chia tỷ lệ tất cả các giá trị số trong khung hình chính hoạt ảnh theo hệ số được chỉ định.
Mục đích: Chia tỷ lệ đồng đều dữ liệu hoạt ảnh, hữu ích để thay đổi kích thước skeleton theo tỷ lệ hoặc điều chỉnh cường độ hoạt ảnh.
Sử dụng: Kết nối với payload và đặt hệ số tỷ lệ. Giá trị trên 1.0 phóng to, dưới 1.0 thu nhỏ.
Tham số:
- **Scale Factor**: Số nhân được áp dụng cho tất cả giá trị vị trí và kích thước.
- **Include Rotations**: Có chia tỷ lệ giá trị xoay hay không (thường bị vô hiệu hóa).
Trường hợp sử dụng:
- Thay đổi kích thước hoạt ảnh đã nhập để phù hợp với kích thước skeleton mới
- Tạo các biến thể phóng đại hoặc tinh tế của hoạt ảnh
- Chia tỷ lệ hàng loạt nhiều hoạt ảnh cho các kích thước nhân vật khác nhau
Schneider
Khớp các đường cong Bézier mượt vào khung hình chính hoạt ảnh bằng thuật toán khớp đường cong Schneider.
Mục đích: Khớp đường cong nâng cao tạo ra các đường cong Bézier có vẻ tự nhiên từ các chuỗi khung hình chính dày đặc.
Khả dụng: **Chỉ dành cho Plus**.
Cách hoạt động: Thuật toán Schneider phân tích vị trí và tiếp tuyến khung hình chính để tạo các điểm điều khiển Bézier tối ưu phù hợp chặt chẽ với chuyển động gốc.
Tham số:
- **Error Tolerance**: Độ lệch tối đa cho phép so với khung hình chính gốc. Thấp hơn = chính xác hơn, cao hơn = đường cong mượt hơn.
- **Corner Angle**: Góc ngưỡng (độ) tại đó chia đường cong thành các đoạn.
Tốt nhất cho:
- Hoạt ảnh vẽ tay hoặc nhập với nhiều khung hình chính
- Chuyển đổi nội suy tuyến tính thành đường cong Bézier mượt
- Giảm số lượng khung hình chính trong khi duy trì chất lượng đường cong
Lưu ý: Tính toán chuyên sâu hơn các thuật toán đơn giản hơn như RDP, nhưng tạo ra chất lượng đường cong cao hơn.
Physics Constraint Bake
Bake ràng buộc vật lý thành khung hình chính: chuyển động PhysicsConstraint thành khung hình chính xoay/tịnh tiến và loại bỏ timeline vật lý.
Mục đích: Chuyển mô phỏng vật lý thời gian chạy thành khung hình chính rõ ràng để hoạt ảnh mang tính quyết định và có thể chỉnh sửa mà không cần PhysicsConstraints. Sau bake, PhysicsConstraints và timeline vật lý sẽ bị loại khỏi payload.
Khả dụng: **Chỉ dành cho Plus**.
Đầu vào/Đầu ra:
- **payload_in** → **payload_out** (đã bake)
- **changes** (danh sách thay đổi tùy chọn)
Điều khiển:
- **Sample FPS**: tốc độ lấy mẫu mô phỏng.
- **Bake Rotation**: ghi khung hình chính xoay.
- **Bake Translation**: ghi khung hình chính tịnh tiến.
- **Bake Translation (Children)**: áp dụng bake tịnh tiến cho xương con phụ thuộc chuyển động vật lý.
Ghi chú:
- Cần Spine JSON gốc để tái dựng dữ liệu mô phỏng.
- Dùng khi muốn loại bỏ PhysicsConstraints nhưng vẫn giữ chuyển động.
Attachment Visibility
Tối ưu hóa kết xuất bằng cách đặt attachment của slot thành null khi alpha của nó bằng 0.
Mục đích: Ngăn game engine phải xử lý hoặc kết xuất các phần gắn vô hình.
Sử dụng: Phân tích các track alpha/màu và tự động thêm hoặc sửa đổi khung hình chính trên kênh 'attachment' tương ứng.
Tham số:
- **Alpha Threshold**: Giá trị alpha mà dưới đó một phần gắn được coi là vô hình.
- **Auto Restore**: Nếu được bật, node sẽ tự động khôi phục phần gắn hiển thị cuối cùng khi giá trị alpha vượt quá ngưỡng.
Payload Merger
Hợp nhất nhiều payload hoạt ảnh đã xử lý trở lại thành một payload thống nhất duy nhất.
Mục đích: Thiết yếu cho các pipeline xử lý song song nơi các hoạt ảnh hoặc nhóm xương khác nhau được tối ưu hóa riêng và cần được kết hợp lại.
Chiến lược hợp nhất:
1. **Đầu vào cơ sở**: Cung cấp cấu trúc skeleton (xương, slot, skin, v.v.)
2. **Đầu vào ghi đè**: Cung cấp các track đã xử lý thay thế track cơ sở
3. **Ghi cuối cùng thắng**: Khi nhiều ghi đè cung cấp cùng một track, cái cuối cùng có ưu tiên
Phát hiện xung đột:
- Xung đột giữa các đầu vào ghi đè được phát hiện và báo cáo
- Thay thế Cơ sở → Ghi đè là hành vi bình thường (không phải xung đột)
- Toast cảnh báo hiển thị khi xảy ra xung đột track
Ví dụ pipeline:
```
Input → AnimFilter('run') → Cleanup ───────┐
→ AnimFilter('idle') → Quantizer ────┤
→ (base) ────────────────────────────→ Merger → Output
```
Trường hợp sử dụng:
- Các trình tối ưu hóa khác nhau cho các hoạt ảnh khác nhau
- Xử lý xương/slot riêng biệt với việc kết hợp lại
- Thử nghiệm A/B các chiến lược tối ưu hóa khác nhau
Animation Viewer
Công cụ trực quan để kiểm tra và so sánh các đường cong hoạt ảnh trước và sau khi tối ưu hóa.
Mục đích: Cung cấp biểu diễn đồ họa của khung hình chính và đường cong cho kênh đã chọn.
Sử dụng: Bằng cách kết nối cả hai đầu vào 'payload_before' và 'payload_after', nó sẽ phủ các đường cong gốc và đã tối ưu hóa, giúp trực quan hóa tác động của tối ưu hóa của bạn dễ dàng hơn.
Animation Filter
Lọc các track hoạt ảnh dựa trên tên hoạt ảnh (ví dụ: 'run', 'idle').
Mục đích: Hữu ích để áp dụng các chiến lược tối ưu hóa khác nhau cho các hoạt ảnh khác nhau.
Sử dụng: Ví dụ, bạn có thể áp dụng tối ưu hóa có mất dữ liệu mạnh (như DCT) cho hoạt ảnh nhân vật nền trong khi sử dụng tối ưu hóa không mất dữ liệu (như Spline) cho hành động nhân vật chính.
Asset Filter
Lọc tài nguyên atlas theo tên, hoạt động ở hai chế độ: trước giải nén (lọc văn bản atlas) hoặc sau giải nén (lọc sprite).
Mục đích: Kiểm soát tài nguyên nào được bao gồm trong quy trình - tài nguyên nào giải nén từ atlas hoặc sprite nào đã giải nén để đóng gói lại.
Chế độ:
1. CHẾ ĐỘ TRƯỚC GIẢI NÉN (trước AtlasUnpacker):
- Đầu vào: atlas_in (atlas_project)
- Đầu ra: atlas_out (atlas_project đã lọc)
- Quy trình: InputNode → AssetFilter → AtlasUnpacker
- Trường hợp sử dụng: Lọc tài nguyên nào giải nén từ atlas (tiết kiệm thời gian xử lý)
2. CHẾ ĐỘ SAU GIẢI NÉN (sau AtlasUnpacker):
- Đầu vào: sprites_in (sprites)
- Đầu ra: sprites_out (sprites đã lọc)
- Quy trình: AtlasUnpacker → AssetFilter → AtlasRepacker
- Trường hợp sử dụng: Lọc sprite nào đã giải nén để bao gồm trong atlas cuối cùng
Hành vi UI:
- Trong chế độ TRƯỚC GIẢI NÉN: Phân tích văn bản atlas để phát hiện tên tài nguyên
- Trong chế độ SAU GIẢI NÉN: Phát hiện tên tài nguyên từ mảng sprite
- Công tắc 'Cho phép tất cả': Khi được chọn, cho phép tất cả tài nguyên đi qua (danh sách hiển thị nhưng bị vô hiệu hóa)
- Hộp kiểm: Chọn tài nguyên cụ thể để bao gồm (khi 'Cho phép tất cả' không được chọn)
Ví dụ:
- Trước giải nén: Chỉ chọn tài nguyên 'char_*' để chỉ giải nén sprite nhân vật
- Sau giải nén: Loại trừ sprite 'background_*' khỏi atlas đóng gói lại cuối cùng
- Tạo atlas chỉ vũ khí bằng cách chọn mẫu 'weapon_*'
Bone Filter
Lọc các track hoạt ảnh xương dựa trên tên xương.
Mục đích: Cho phép nhắm mục tiêu hoặc loại trừ các xương cụ thể khỏi quá trình tối ưu hóa.
Sử dụng: Bạn có thể muốn loại trừ các xương nhạy cảm, như những xương được sử dụng cho biểu cảm khuôn mặt, khỏi tối ưu hóa mạnh để bảo toàn từng chi tiết trong khi tối ưu hóa mạnh các xương ít quan trọng hơn.
Skin Filter
Lọc dữ liệu hoạt ảnh và tài nguyên dựa trên tên skin.
Mục đích: Chỉ xử lý các skin cụ thể từ dự án Spine có nhiều skin.
Sử dụng: Khi dự án Spine có nhiều skin (ví dụ: 'default', 'armor', 'casual'), node này cho phép bạn lọc skin nào để bao gồm trong xử lý.
Tham số:
- **Skins List**: Hộp kiểm cho mỗi skin có sẵn
- **Allow All**: Công tắc để bao gồm tất cả skin (mặc định)
Trường hợp sử dụng:
- Tạo atlas riêng cho mỗi skin
- Áp dụng tối ưu hóa khác nhau cho các skin khác nhau
- Loại trừ các skin ít sử dụng khỏi bản dựng đã tối ưu hóa
Lưu ý: Skin chia sẻ cấu trúc skeleton nhưng có thể có các attachment khác nhau.
Slot Filter
Lọc các track hoạt ảnh slot dựa trên tên slot.
Mục đích: Hữu ích để nhắm mục tiêu hoặc loại trừ các slot cụ thể có thể có yêu cầu về thời gian hoặc khả năng hiển thị đặc biệt.
Sử dụng: Bạn có thể sử dụng nó để loại trừ các slot vũ khí hoặc hiệu ứng được chuyển đổi bằng code khỏi bị ảnh hưởng bởi tối ưu hóa khả năng hiển thị attachment.
Parameter Filter
Lọc các track hoạt ảnh dựa trên loại thuộc tính của chúng (ví dụ: rotation, scale, color).
Mục đích: Cho phép áp dụng các tối ưu hóa tiếp theo chỉ cho các loại dữ liệu hoạt ảnh cụ thể.
Sử dụng: Đặt node này trước trình tối ưu hóa để giới hạn phạm vi của nó. Ví dụ, bạn có thể áp dụng tối ưu hóa RDP chỉ cho các track 'translation' và 'scale'.
Atlas Unpacker
Trích xuất các sprite riêng lẻ từ texture atlas Spine.
Mục đích: Phân tách tệp atlas thành các sprite thành phần, cho phép phân tích hoặc đóng gói lại riêng lẻ.
Sử dụng: Kết nối đầu ra 'atlas_project' từ InputNode với đầu vào 'atlas_project_in' của node này. Đầu ra sau đó có thể được gửi đến AssetViewer để kiểm tra hoặc AtlasRepacker để tối ưu hóa.
⭐ Cắt xén lưới: Kết nối đầu ra 'Original JSON' từ InputNode đến đầu vào 'Skeleton JSON' để kích hoạt cắt xén tự động các sprite theo ranh giới lưới của chúng (thay vì ranh giới hình chữ nhật). Điều này làm giảm đáng kể việc sử dụng bộ nhớ kết cấu cho các sprite có tệp đính kèm lưới bằng cách loại bỏ các pixel trong suốt bên ngoài vỏ lưới.
Đầu ra:
- **sprites_out**: Mảng sprite được chuẩn hoá (cho viewer/repacker)
- **sprites_data_out**: Ảnh/metadata sprite đã trích xuất (gói có cấu trúc)
- **atlas_out**: Chuyển tiếp atlas project
Khoá socket: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out
Atlas Repacker
Đóng gói lại các sprite riêng lẻ thành một hoặc nhiều texture atlas mới được tối ưu hóa.
Mục đích: Tối ưu hóa bộ nhớ texture và có khả năng giảm các lệnh gọi vẽ bằng cách tạo các sprite sheet hiệu quả.
Sử dụng: Chấp nhận 'sprites_data' (thường từ AtlasUnpacker) và tạo bố cục atlas mới.
Tham số:
- **Max Texture Size**: Chiều rộng/cao tối đa của các trang atlas đầu ra.
- **Padding**: Khoảng cách tính bằng pixel giữa mỗi sprite.
- **Scale**: Thay đổi kích thước tất cả sprites trước khi đóng gói.
- **Power of Two**: Buộc kích thước atlas đầu ra phải là lũy thừa của hai (ví dụ: 1024, 2048), được yêu cầu bởi một số nền tảng.
- **Allow Rotation**: Cho phép xoay sprites 90 độ để đóng gói hiệu quả hơn.
Atlas Viewer
Trực quan hóa bố cục atlas texture và vị trí sprite.
Mục đích: Công cụ gỡ lỗi và kiểm tra để hiểu cấu trúc atlas.
Khoá socket: atlas_project, atlas_in, atlas, json
Atlas Merger
Kết hợp nhiều nguồn atlas thành một atlas thống nhất duy nhất.
Mục đích: Hợp nhất nhiều dự án atlas thành một.
Đầu vào:
- **atlas_inputs**: Mảng đa đầu vào của các dự án atlas
Đầu ra:
- **atlas_out**: Dự án atlas đã hợp nhất
- **merged_out**: Đầu ra hợp nhất kế thừa
- **merged_atlas_out**: Đầu ra hợp nhất kế thừa
Trường hợp sử dụng:
- Kết hợp atlas nhân vật với atlas vũ khí
- Hợp nhất sprite cơ sở với nội dung DLC
- Kết hợp lại sau khi xử lý atlas song song
Pipeline điển hình:
```
InputA → Unpacker → Repacker ─┐
├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Trước Repacker, dữ liệu là các sprite riêng lẻ; sau Repacker, chúng trở thành dự án atlas. Atlas Merger kết hợp các dự án atlas, sau đó bước cuối Unpacker → Repacker đóng gói lại tất cả chặt hơn thành một atlas thống nhất.
Asset Viewer
Hiển thị các sprite riêng lẻ từ atlas đã giải nén.
Mục đích: Công cụ gỡ lỗi trực quan cho thao tác atlas.
Sử dụng: Chấp nhận 'sprites_data' từ node Atlas Unpacker và cho phép bạn trực quan hóa từng hình ảnh được trích xuất, kiểm tra các thuộc tính của nó (kích thước, xoay, v.v.) và xác minh độ chính xác trực quan sau khi giải nén.