Ten przewodnik pomoże Ci szybko rozpocząć pracę z JSON Optimizer.
Załaduj projekt: Użyj InputNode, aby załadować pliki .json, .atlas oraz .png.
Wybierz preset (tryb Plus): W trybie Plus użyj panelu po prawej stronie, aby wybrać jeden z wbudowanych presetów (np. "Basic Fallback"). To automatycznie zbuduje graf optymalizacji. W trybie Free zbuduj minimalny graf ręcznie: InputNode → QuantizerNode → OutputNode.
Uruchom graf: Kliknij przycisk "Uruchom graf".
Porównaj wyniki: Przełącz się na zakładkę "Podgląd", aby wizualnie porównać animacje oryginalne i zoptymalizowane.
Przejrzyj zmiany: W zakładkach "Wyniki" i "Statystyki" znajdziesz szczegółowe informacje o tym, które klucze zostały zmodyfikowane lub usunięte.
Typy gniazd (socketów) i przepływ danych
gniazdatypydanepołączenia
Ten artykuł wyjaśnia typy danych używane przez gniazda (sockety) w grafie węzłów oraz to, co można gdzie podłączać.
Szybka zasada
Większość węzłów przetwarzających działa na ładunku Spine. Węzły związane z atlasem działają na projekcie atlasu lub sprite’ach. Jeśli nie masz pewności, czego oczekuje gniazdo, użyj ValidatorNode.
Typy gniazd
Ładunek Spine — przyjazna dla środowiska wykonawczego reprezentacja projektu Spine używana przez większość węzłów przetwarzających.
Projekt atlasu — metadane atlasu + obrazy stron używane przez węzły atlasu.
Zalecenie: Zawsze zaczynaj od optymalizacji bezstratnych. Metod stratnych używaj tylko wtedy, gdy potrzebujesz dalszej redukcji rozmiaru pliku, i zawsze sprawdzaj efekt wizualnie.
Jak mierzyć efektywność
przewodnikmetrykistatystyki
Aby zrozumieć skuteczność optymalizacji, zwróć uwagę na następujące metryki:
Rozmiar pliku: Końcowy rozmiar pliku .json jest głównym celem optymalizacji.
Liczba klatek kluczowych: W zakładce "Statystyki" znajdziesz tabele i wykresy pokazujące, ile klatek kluczowych zostało usuniętych w każdej animacji.
Porównanie wizualne: Zawsze używaj zakładki "Podgląd" do porównania animacji "przed" i "po". Upewnij się, że optymalizacje stratne nie wprowadziły niedopuszczalnych artefaktów wizualnych.
Raport w tabeli "Wyniki": Tutaj możesz szczegółowo zbadać każdą konkretną zmianę wprowadzoną do danych.
Podgląd: Panel sterowania
podglądsterowanieUI
Zakładka Podgląd nakłada panel Kontrolki na płótno. Jest podzielony na trzy grupy:
Sterowanie animacją
Animacja — wybiera, która animacja Spine jest odtwarzana.
Skórka — wybiera, która skórka jest zastosowana.
Prędkość — mnożnik prędkości odtwarzania (0.1× → 3.0×).
Opcje widoku — numeryczne offsety do ustawiania widoku porównania: Spacing X / Spacing Y (odległość między Original/Optimized) oraz Offset X / Offset Y (globalne przesunięcie).
Sterowanie diagnostyką
Tryb diagnostyczny — włącza dodatkowe nakładki renderingu (zależy od wsparcia runtime).
Fizyka — przełącza symulację fizyki (jeśli szkielet używa fizyki).
Etykiety — przełącza nakładkę z etykietami.
Podgląd: Panel wydajności
wydajnośćFPSpamięćUI
Panel Performance pokazuje w czasie rzeczywistym metryki runtime dla aktualnie odtwarzanego szkieletu (lub szkieletów).
Czas rzeczywisty
FPS — liczba klatek na sekundę mierzona przez monitor.
Frame Time — czas jednej klatki w ms (im mniej, tym lepiej).
FPS chart — ostatnie 120 próbek w formie słupków.
Metryki szkieletu
Visible Slots — ile slotów było widocznych w ostatniej próbce.
Vertices — bieżąca liczba wierzchołków używana do renderowania.
Bounds (px) — aktualne granice szkieletu (szerokość×wysokość) w pikselach.
Avg. Bounds — średnia krocząca granic.
Largest Texture — największa strona atlasu (wg wymiarów) wykryta dla szkieletu.
Texture Memory — szacunkowa łączna pamięć tekstur dla załadowanych stron atlasu. Jeśli dostępne, panel pokazuje też podział na strony (nazwa pliku, wymiary i szacowany rozmiar).
Ulepszenia (gdy dostępne jest Optimized)
Slot Improvement — porównuje Avg. Visible dla Original vs Optimized.
Memory Change — porównuje Texture Memory dla Original vs Optimized.
Podgląd: Oś czasu
viewertimelineanimationplaybackguide
Panel Oś czasu to dokowalny sekwencer animacji na dole Podglądu. Umożliwia rozmieszczanie klipów animacji na wielu ścieżkach, kontrolowanie odtwarzania i podgląd przejść.
Ścieżki i klipy
Do 4 ścieżek animacji — każda ścieżka odpowiada warstwie trackIndex Spine. Wyższe ścieżki mieszają się na szczycie niższych.
Dodaj animację — kliknij przycisk + na dowolnej ścieżce, aby otworzyć selektor animacji (z filtrem wyszukiwania).
Przeciągaj i zmieniaj rozmiar klipów — przeciągnij ciało klipu, aby go przesuwać wzdłuż ścieżki; przeciągnij lewe/prawe krawędzie, aby zmienić czas rozpoczęcia lub długość trwania.
Usuwanie klipów — zaznacz klip i naciśnij Delete lub Backspace.
Wykrywanie nakładania — nakładające się klipy na tej samej ścieżce są podświetlane na czerwono.
Poprzedni / Następny — przeskocz do początku poprzedniego lub następnego klipu.
Prędkość animacji — suwak od 0.1× do 3.0×.
Auto-stop — odtwarzanie zatrzymuje się automatycznie na końcu osi czasu.
Miksowanie przejść
Globalny czas miksowania — ustawia domyślny czas crossfade między kolejnymi klipami.
Nadpisania dla poszczególnych przejść — kliknij bąbelek przejścia między dwoma klipami, aby ustawić indywidualny czas miksowania. Możesz zresetować nadpisania do wartości globalnej.
Przewijanie i scrubbing
Głowica odtwarzania — przeciągnij uchwyt na linijce czasu lub kliknij linijkę, aby przewinąć.
Podgląd czasu kursora — najechanie na obszar ścieżki wyświetla czas pod kursorem.
Web Worker — obliczenia przewijania i zdarzeń są przenoszone do wątku w tle dla płynnej wydajności.
Odtwarzanie z uwzględnieniem fizyki
Przełączaj fizykę między Update (aktywne ograniczenia) a None (wyłączone).
Podczas przewijania czas szkieletu jest przyspieszany, aby prawidłowo ustabilizować ograniczenia fizyki.
Obsługa wielu szkieletów
Selektor pary docelowej — każda ścieżka może celować we wszystkie pary (🌐 Wszystkie pary) lub w konkretny szkielet.
Pozycja i skala per szkielet — pola przesunięcia X/Y i skali dla indywidualnych szkieletów.
Kolejność rysowania — pole numeryczne do kontroli priorytetu warstwy renderowania.
Pola wielokrotnego wyboru dla wszystkich skórek zdefiniowanych w załadowanym szkielecie.
Ustawienia widoku
Spacing X / Y — odstęp między parami szkieletów.
Offset X / Y — globalne przesunięcie widoku.
PMA — tryb premultiplied alpha (Spine 3.x) lub tryb alpha atlasu (Spine 4.x: auto / pma / bleed / none).
Etykiety szkieletów — przełączanie nakładki z etykietami.
Podgląd: Nagrywanie
viewerrecorderrecordingexportvideoguide
Nagrywanie przechwytuje animacje Spine z podglądu jako wideo, animowane obrazy lub sekwencje klatek.
Tryby nagrywania
⚡ Szybkie nagrywanie — przechwytywanie w czasie rzeczywistym za pomocą MediaRecorder + captureStream(). Generuje tylko WebM. Szybkie, ale ograniczone do czasu rzeczywistego.
🎬 Eksport HQ — renderowanie klatka po klatce offline za pomocą WebCodecs VideoEncoder + readPixels(). Obsługuje wszystkie formaty i daje idealną jakość pikseli.
Formaty wyjściowe
Wideo: WebM, MP4, AVI, MOV
Animowany obraz: GIF, Animated PNG (APNG)
Sekwencja klatek: PNG Sequence, WebP Sequence
Kodeki (Eksport HQ)
VP8, VP9, H.264 (AVC), AV1, ProRes — dostępne kodeki są automatycznie wykrywane na podstawie wsparcia przeglądarki.
Rozmiar czcionki — 8–64px, plus selektor koloru tekstu.
Powtórzenia i wiele szkieletów
Liczba powtórzeń — 1–100 iteracji pętli.
Para docelowa — nagraj konkretny szkielet lub wszystkie.
Tryb szkieletów — Połączone (jeden plik) / Oddzielne pliki (jeden plik na szkielet).
Szablon nazwy pliku
Ciąg szablonu ze zmiennymi: {project}, {animation}, {W}, {H}, {fps}. Podgląd rozwiązanej nazwy pliku wyświetlany na żywo.
Integracja z osią czasu
Zakres nagrywania pojawia się jako czerwono-pomarańczowy przerywany klip na osi czasu. Przeciągnij krawędzie, aby zmienić rozmiar zakresu, przeciągnij ciało, aby zmienić pozycję, lub użyj przycisku ustawień (⚙️), aby otworzyć pełne ustawienia nagrywania.
Zakładka Wyniki
wynikitabelaoptymalizacja
Zakładka Wyniki pokazuje szczegółowy wynik optymalizacji.
Tabela wyników — widok wyników optymalizacji JSON w układzie „zmiana = wiersz” (np. która animacja/kość/właściwość/klatka kluczowa została zmodyfikowana lub usunięta).
Porównanie Sprite/Atlas — gdy użyto optymalizacji tekstur, ta sekcja porównuje rozmiary sprite’ów i wyniki pakowania.
Wskazówka: użyj widoku Wyniki, aby odpowiedzieć na pytanie: co dokładnie się zmieniło?
Zakładka Statystyki
statystykiwykresymetryki
Zakładka Statystyki podsumowuje wyniki optymalizacji jako wykresy i zagregowane metryki.
Wykres optymalizacji — wizualizuje wpływ optymalizacji na cały zbiór (gdy optymalizacje JSON wprowadziły zmiany).
Tabela metryk — kluczowe liczby, np. rozmiar przed/po oraz procent redukcji.
Statystyki pakowania tekstur — jeśli użyto przepakowania atlasu, pokazuje strony, łączny/użyty obszar, efektywność oraz rozbicie na strony.
Użyj tej zakładki, aby odpowiedzieć: ile poprawiliśmy całościowo?
Przykłady pipeline (Wideo)
wideoprzykładypipeline’yYouTube
Poniżej znajdziesz kompletne, rzeczywiste potoki z oficjalnej playlisty YouTube.
Eksperymenty Spine2D 1: optymalizacja krzywych algorytmem RDP — podstawowe demo optymalizacji Spine 2D: algorytm Ramer–Douglas–Peucker (RDP) usuwa nadmiarowe dane krzywych i kluczy, zmniejszając JSON. RDP może usuwać ważne klucze, dlatego zawsze sprawdzaj animacje i wyklucz wrażliwe kości/sloty filtrami przed węzłem RDP. Oglądaj na YouTube
Eksperymenty Spine2D 2: optymalizacja krzywych algorytmem kwantyzacji — kwantyzacja to najbezpieczniejszy optymalizator krzywych: zaokrąglanie wartości (często do 1 miejsca) natychmiast zmniejsza rozmiar. Przykład: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. Użyj węzła kwantyzacji jako ostatniego kroku przed węzłem wyjścia, aby utrwalić optymalizację; wideo pokazuje porównanie „przed” i „po” z niemal niewidoczną zmianą wizualną. Oglądaj na YouTube
Eksperymenty Spine2D 3: przebudowa krzywych algorytmami Spline i Refit — Spline jest bezstratny dla prostych odcinków (usuwa nadmiarowe klucze pośrodku), a Refit jest stratny, ale bardzo skuteczny: przebudowuje złożone fragmenty jako pojedynczą krzywą Béziera. Te algorytmy są idealne po wypieczeniu fizyki i czyszczeniu węzłem Schneider. Uwaga: iteracje Refit powyżej 100 mogą trwać minuty, zanim znajdą najlepszą krzywą. Wideo pokazuje działanie obu metod i uzyskany procent optymalizacji. Oglądaj na YouTube
Eksperymenty Spine2D 4: usuwanie nadmiarowych danych węzłami widoczności załączników i czyszczenia — strukturalna optymalizacja Spine 2D z użyciem węzłów widoczności załączników i czyszczenia. Widoczność załączników wyłącza je, gdy alfa spada do 0, i przywraca je przy płynnym przejściu, redukując wywołania rysowania i nadmiarowe klucze. Czyszczenie usuwa redundancje logiczne: nieużywane ścieżki koloru/alfa, klucze rotacji IK w pełni kontrolowane przez ograniczenia oraz klucze ograniczeń ścieżki. Wideo pokazuje różnicę między taką optymalizacją a upraszczaniem krzywych. Oglądaj na YouTube
Eksperymenty Spine2D 5: budowa nieliniowych potoków (filtry i scalanie) — nieliniowa optymalizacja Spine 2D: rozdziel strumień danych filtrami (animacja, kość, slot, parametr lub skóra), uruchom różne algorytmy w równoległych gałęziach (np. agresywna kompresja dla kości ciała przy zachowaniu bezstratnej animacji twarzy), a następnie połącz gałęzie węzłem scalania w jeden szkielet. Ten przepływ pracy wykracza poza proste Wejście → Optymalizacja → Wyjście i pozwala optymalizować tylko to, co potrzebne. Oglądaj na YouTube
Eksperymenty Spine2D 6: przepakowanie tekstur i selektywne skalowanie — zaawansowane potoki optymalizacji tekstur: węzły rozpakowania i przepakowania atlasu pozwalają rozpakować, przeskalować i spakować atlasy w jednym grafie, szybciej niż standardowy przepływ pracy Spine. Dzięki nieliniowemu potokowi możesz podzielić zasoby, pozostawić tekstury postaci na 100%, a pozostałe przeskalować do 25%, a potem złączyć wszystko w jeden wspólny atlas. Podgląd atlasu i zasobów zapewnia inspekcję wizualną oraz filtrowanie na każdym etapie. Ułatwia to definiowanie celów rozmiaru, selektywne przetwarzanie i ponowne łączenie wyników jako szablonu. Oglądaj na YouTube
Eksperymenty Spine2D 7: natychmiastowe skalowanie szkieletu węzłem skalowania — optymalizacja Spine 2D od początku do końca oraz skalowanie szkieletu. Węzeł skalowania zastępuje żmudny przepływ pracy Spine (eksport/import, przepakowanie/rozpakowanie, naprawa ścieżek) pojedynczym krokiem w grafie: ustaw rozmiar docelowy, zobacz podgląd natychmiast w oknie podglądu i iteruj w czasie rzeczywistym. Wideo łączy optymalizację krzywych i kluczy, przetwarzanie zasobów i zmianę skali szkieletu w jeden spójny potok. Oglądaj na YouTube
Eksperymenty Spine2D 8: przegląd węzłów publicznej bety — przegląd wszystkich węzłów dostępnych w publicznej becie oraz tego, jak re‑polish łączy potrzeby animatorów i programistów. Obejmuje czyszczenie zbędnych kluczy, uproszczenie Bézier→liniowe, zaokrąglanie dla zmniejszenia rozmiaru, usuwanie niewidocznych załączników, czyszczenie nieużywanych właściwości, wykrywanie znaków nieangielskich oraz atlas rozpakuj/filtruj/skaluj/przepakuj. Podwójny podgląd weryfikuje wyniki przez porównanie wizualne i FPS obok siebie. Publiczna beta jest dostępna na re-polish.com. Oglądaj na YouTube
Eksperymenty Spine2D 9: wypiekanie ograniczeń fizyki do klatek kluczowych — w tym filmie pokazuję najnowsze eksperymenty z wypiekaniem ograniczeń fizyki do standardowych klatek kluczowych. Nowy algorytm bake zapewnia: idealne pętle (zero jittera lub przeskoków między początkiem a końcem), zoptymalizowany rozmiar pliku (automatyczne czyszczenie krzywych utrzymuje rozmiar JSON blisko oryginału) oraz wsteczną kompatybilność (wypieczone klucze pozwalają używać animacji fizyki ze Spine 4.2 w Spine 4.1, a nawet 4.0). Oglądaj na YouTube
Nodes
Input
Importuje pliki projektu Spine, wejscia tylko w formacie JSON, zasoby demonstracyjne i pakiety ZIP do grafu.
Przeznaczenie: To glowny punkt wejscia dla wiekszosci przeplywow pracy. Odczytuje JSON, atlas i tekstury oraz normalizuje je do danych wewnetrznych, ktore moga przetwarzac kolejne wezly.
Obslugiwane tryby:
1. Pelny projekt: JSON + atlas + tekstury
2. Tylko JSON: przetwarzanie danych szkieletu/animacji bez atlasu
3. Pakiet ZIP: spakowany plik zip zawierajacy kompletny projekt
4. Zasoby demonstracyjne: wbudowane dane przykladowe do szybkich testow
Glowne wyjscia:
- **payload_out**: znormalizowane dane dla wezlow optymalizacji
- **original_json_out**: zrodlowy JSON do porownan lub rekonstrukcji
- **atlas_project_out**: sparsowany projekt atlasu, gdy dostarczono tekstury
Picture Input
Dodaje niezalezne obrazy PNG/JPEG do obszaru widoku, aby mozna bylo tworzyc czystsze podglady i ujecia prezentacyjne.
Przeznaczenie: Uzyj tego wezla, aby umieszczac obrazy bezposrednio w obszarze widoku jako warstwy prezentacyjne lub pomoce wizualne. Przydaje sie, gdy chcesz ozdobic scene, dodac wspierajaca grafike i sprawic, by podglady projektu wygladaly bardziej dopracowanie przed nagraniem wideo lub demonstracji.
Przeplyw pracy: Wczytaj jeden obraz, a nastepnie uzyj narzedzi obszaru widoku, aby go skalowac, przesuwac i dostosowac jego indeks z, tak aby poprawnie ulozyc go w kompozycji. To wygodny sposob na budowanie atrakcyjnych ujec pokazowych bez ingerowania w glowne dane projektu Spine.
Ten wezel jest samodzielny i nie udostepnia gniazd grafu.
Output
Zbiera koncowe wyniki i pozwala pobierac zoptymalizowane dane jako osobne pliki, pogrupowane zestawy plikow lub archiwa.
Przeznaczenie: Dziala jako centrum eksportu dla zoptymalizowanego JSON-a, danych atlasu, tekstur i sprite'ow. Moze skladac wyniki z pojedynczego zestawu JSON/atlas/tekstury, z wielu zestawow plikow albo wylacznie ze sprite'ow, gdy potrzebujesz wyjscia obrazow bez przebudowy pelnego projektu Spine.
Opcje eksportu:
- Pobieranie plikow pojedynczo albo jako jedno archiwum
- Pobieranie spakowanych wynikow albo archiwum z rozpakowanymi plikami
- Eksport JSON-a w formie zwartej albo czytelnej, sformatowanej wersji
- Eksport pelnych danych projektu Spine albo tylko wynikow sprite/obrazow
Lancuchowy przeplyw pracy: OutputNode nie musi byc bezwzglednym koncem grafu. Mozesz przekazac jego wyjscia do kolejnego etapu pipeline'u i uruchomic te same pliki przez dodatkowe przebiegi optymalizacji. W praktyce optymalizacja kluczy i krzywych byla testowana do 3 kolejnych iteracji.
Glowne wyjscia:
- **reconstructed_json_out**: odbudowany JSON Spine
- **original_json_passthrough_out**: przekazanie oryginalnego JSON-a
- **payload_out**: payload do dalszego lancuchowania
- **changes**: zebrane zmiany optymalizacji
- **atlas_assets**: zasoby atlasu gotowe do eksportu
RDP
Upraszcza krzywe animacji (RDP).
Cel: Zmniejsza liczbę klatek kluczowych w odcinkach liniowych lub prawie liniowych, usuwając punkty leżące na prostej między dwoma innymi.
Złota zasada: Domyślnie wyłączona. Chroni krzywe o wyraźnym kształcie (pole/krzywizna) przed spłaszczeniem do linii prostej. Wyłączaj tylko dla bardziej agresywnej kompresji po kontroli wizualnej.
Klucze gniazd: payload_in, payload_out, changes
Spline
Optymalizacja krzywych metodą splajnów.
Cel: Wygładza dopasowanie krzywych przy zachowaniu jakości wizualnej.
Klucze gniazd: payload_in, payload_out, changes
Refit
Refit krzywych (Bezier) w celu redukcji liczby klatek kluczowych.
Cel: Dopasowuje mniejszą liczbę krzywych, pozostając w granicach tolerancji.
Klucze gniazd: payload_in, payload_out, changes
Quantizer
Redukuje precyzję wartości numerycznych w klatkach kluczowych i krzywych.
Cel: Prosta, ale skuteczna metoda redukcji rozmiaru pliku poprzez zaokrąglanie liczb do określonej liczby miejsc dziesiętnych.
Użycie: Może być zastosowany do prawie wszystkich danych animacji. Staje się bardziej efektywny przy większej liczbie klatek kluczowych.
Ostrożnie: Zbyt agresywna kwantyzacja (niska precyzja) może powodować drżenie lub artefakty wizualne w animacjach.
Cleanup
Wykonuje różne zadania czyszczące w celu usunięcia redundantnych lub niepotrzebnych danych animacji.
Cel: Specjalistyczne narzędzie do usuwania konkretnych typów redundantnych danych, których inne optymalizatory mogą nie wykryć.
Użycie: Podłącz payload do 'payload_in' i odbierz wynik z 'payload_out'. Jeśli chcesz raport „zmiana po zmianie”, użyj również 'changes'.
Klucze gniazd:
- Wejścia: payload_in
- Wyjścia: payload_out, changes
Aktualnie wspierane czyszczenia:
1. **Usuwanie nieużywanych ścieżek Color/Alpha**: Usuwa timeline’y color/alpha dla slotów, które nigdy nie są widoczne podczas animacji.
2. **Usuwanie redundantnych rotacji IK**: Usuwa klatki kluczowe rotacji z kości, które są w pełni kontrolowane przez constraint IK z mix = 100%.
3. **Usuwanie kluczy Path Constraint**: Usuwa klatki kluczowe rotate/translate z kości w pełni kontrolowanych przez path constraint (wartości mix = 100%).
4. **Sanityzacja znaków nieangielskich**: Podmienia nieangielskie znaki w nazwach/identyfikatorach, aby uniknąć problemów w narzędziach downstream.
Scale
Skaluje wszystkie wartości numeryczne w klatkach kluczowych animacji o określony współczynnik.
Cel: Równomiernie skaluje dane animacji, przydatne do proporcjonalnej zmiany rozmiaru szkieletu lub dostosowania intensywności animacji.
Użycie: Podłącz do payload i ustaw współczynnik skalowania. Wartości powyżej 1.0 powiększają, poniżej 1.0 zmniejszają.
Parametry:
- **Scale Factor**: Mnożnik stosowany do wszystkich wartości pozycji i rozmiaru.
- **Include Rotations**: Czy skalować również wartości rotacji (zwykle wyłączone).
Przypadki użycia:
- Zmiana rozmiaru zaimportowanych animacji do dopasowania do nowych wymiarów szkieletu
- Tworzenie przerysowanych lub subtelnych wariantów animacji
- Wsadowe skalowanie wielu animacji dla różnych rozmiarów postaci
Schneider
Dopasowuje gładkie krzywe Béziera do klatek kluczowych animacji przy użyciu algorytmu dopasowania krzywej Schneidera.
Cel: Zaawansowane dopasowanie krzywej, które produkuje naturalnie wyglądające krzywe Béziera z gęstych sekwencji klatek kluczowych.
Dostępność: **Tylko w Plus**.
Jak to działa: Algorytm Schneidera analizuje pozycje i tangenty klatek kluczowych, aby wygenerować optymalne punkty kontrolne Béziera, które ściśle odpowiadają oryginalnemu ruchowi.
Parametry:
- **Error Tolerance**: Maksymalne dopuszczalne odchylenie od oryginalnych klatek kluczowych. Niższe = dokładniejsze, wyższe = gładsze krzywe.
- **Corner Angle**: Kąt progowy (stopnie) przy którym dzielić krzywą na segmenty.
Najlepsze dla:
- Ręcznie rysowanych lub zaimportowanych animacji z wieloma klatkami kluczowymi
- Konwersji interpolacji liniowej na gładkie krzywe Béziera
- Redukcji liczby klatek kluczowych przy zachowaniu jakości krzywej
Uwaga: Bardziej wymagający obliczeniowo niż prostsze algorytmy jak RDP, ale produkuje lepszą jakość krzywej.
Physics Constraint Bake
Bake Physics Constraints to Keys: zamienia ruch PhysicsConstraint na klatki kluczowe obrotu/przesunięcia i usuwa timeliny fizyki.
Cel: Konwertuje symulację fizyki w czasie działania na jawne klatki kluczowe, dzięki czemu animacje są deterministyczne i edytowalne bez PhysicsConstraints. Po bake usuwa PhysicsConstraints i timeliny fizyki z payload.
Dostępność: **Tylko w Plus**.
Wejścia/Wyjścia:
- **payload_in** → **payload_out** (baked)
- **changes** (opcjonalna lista zmian)
Kontrolki:
- **Sample FPS**: Częstotliwość próbkowania symulacji.
- **Bake Rotation**: Zapisuje klatki kluczowe obrotu.
- **Bake Translation**: Zapisuje klatki kluczowe przesunięcia.
- **Bake Translation (Children)**: Stosuje bake przesunięcia do kości potomnych zależnych od ruchu fizyki.
Uwagi:
- Wymaga oryginalnego Spine JSON do rekonstrukcji danych symulacji.
- Użyj, gdy chcesz usunąć PhysicsConstraints, ale zachować ruch.
Attachment Visibility
Optymalizuje renderowanie ustawiając attachment slotu na null, gdy jego alpha wynosi zero.
Cel: Zapobiega konieczności przetwarzania lub renderowania niewidocznych attachmentów przez silnik gry.
Użycie: Analizuje ścieżki alpha/kolor i automatycznie dodaje lub modyfikuje klatki kluczowe na odpowiedniej ścieżce 'attachment'.
Parametry:
- **Alpha Threshold**: Wartość alpha, poniżej której attachment jest uważany za niewidoczny.
- **Auto Restore**: Jeśli włączone, węzeł automatycznie przywróci ostatni widoczny attachment, gdy wartość alpha przekroczy próg.
Payload Merger
Łączy wiele przetworzonych payloadów animacji z powrotem w pojedynczy zunifikowany payload.
Cel: Niezbędny dla pipeline'ów przetwarzania równoległego, gdzie różne animacje lub grupy kości są optymalizowane oddzielnie i muszą być ponownie połączone.
Strategia łączenia:
1. **Wejście bazowe**: Dostarcza strukturę szkieletu (kości, sloty, skiny itp.)
2. **Wejścia nadpisujące**: Dostarczają przetworzone ścieżki, które zastępują ścieżki bazowe
3. **Ostatni zapis wygrywa**: Gdy wiele nadpisań dostarcza tę samą ścieżkę, ostatnie ma priorytet
Wykrywanie konfliktów:
- Konflikty między wejściami nadpisującymi są wykrywane i raportowane
- Zamiana Bazowa → Nadpisująca to normalne zachowanie (nie konflikt)
- Toast ostrzegawczy pokazywany przy konfliktach ścieżek
Przykład pipeline'a:
```
Input → AnimFilter('run') → Cleanup ───────┐
→ AnimFilter('idle') → Quantizer ────┤
→ (base) ────────────────────────────→ Merger → Output
```
Przypadki użycia:
- Różne optymalizatory dla różnych animacji
- Oddzielne przetwarzanie kości/slotów z ponownym połączeniem
- Testy A/B różnych strategii optymalizacji
Animation Viewer
Wizualne narzędzie do inspekcji i porównywania krzywych animacji przed i po optymalizacji.
Cel: Zapewnia graficzną reprezentację klatek kluczowych i krzywych dla wybranej ścieżki.
Użycie: Podłączając oba wejścia 'payload_before' i 'payload_after', nałoży oryginalne i zoptymalizowane krzywe, ułatwiając wizualizację wpływu optymalizacji.
Animation Filter
Filtruje ścieżki animacji na podstawie nazwy animacji (np. 'run', 'idle').
Cel: Przydatny do stosowania różnych strategii optymalizacji do różnych animacji.
Użycie: Na przykład, możesz zastosować agresywne optymalizacje stratne (jak DCT) do animacji postaci w tle, jednocześnie używając optymalizacji bezstratnych (jak Spline) dla akcji głównej postaci.
Asset Filter
Filtruje zasoby atlasu według nazwy, działa w dwóch trybach: przed rozpakowaniem (filtrowanie tekstu atlasu) lub po rozpakowaniu (filtrowanie sprite'ów).
Cel: Kontroluje które zasoby są zawarte w przepływie pracy - które zasoby rozpakować z atlasu lub które rozpakowane sprite'y zawrzeć w przepakowaniu.
Tryby:
1. TRYB PRZED ROZPAKOWANIEM (przed AtlasUnpacker):
- Wejście: atlas_in (atlas_project)
- Wyjście: atlas_out (przefiltrowany atlas_project)
- Przepływ: InputNode → AssetFilter → AtlasUnpacker
- Zastosowanie: Filtrowanie które zasoby rozpakować z atlasu (oszczędza czas przetwarzania)
2. TRYB PO ROZPAKOWANIU (po AtlasUnpacker):
- Wejście: sprites_in (sprites)
- Wyjście: sprites_out (przefiltrowane sprites)
- Przepływ: AtlasUnpacker → AssetFilter → AtlasRepacker
- Zastosowanie: Filtrowanie które rozpakowane sprite'y zawrzeć w końcowym atlasie
Zachowanie UI:
- W trybie PRZED ROZPAKOWANIEM: Analizuje tekst atlasu aby odkryć nazwy zasobów
- W trybie PO ROZPAKOWANIU: Odkrywa nazwy zasobów z tablicy sprite'ów
- Przełącznik 'Zezwól na wszystko': Kiedy zaznaczony, przepuszcza wszystkie zasoby (lista pokazana ale wyłączona)
- Pola wyboru: Wybierz konkretne zasoby do uwzględnienia (gdy 'Zezwól na wszystko' odznaczone)
Przykłady:
- Przed rozpakowaniem: Wybierz tylko zasoby 'char_*' aby rozpakować tylko sprite'y postaci
- Po rozpakowaniu: Wyklucz sprite'y 'background_*' z końcowego przepakowanego atlasu
- Utwórz atlas tylko z bronią wybierając wzorzec 'weapon_*'
Bone Filter
Filtruje ścieżki animacji kości na podstawie nazwy kości.
Cel: Pozwala na celowanie lub wykluczanie określonych kości z procesu optymalizacji.
Użycie: Możesz chcieć wykluczyć wrażliwe kości, takie jak te używane do wyrażeń twarzy, z agresywnej optymalizacji, aby zachować każdy szczegół, jednocześnie mocno optymalizując mniej ważne kości.
Skin Filter
Filtruje dane animacji i zasobów na podstawie nazw skinów.
Cel: Przetwarzanie tylko określonych skinów z projektu Spine z wieloma skinami.
Użycie: Gdy projekt Spine ma wiele skinów (np. 'default', 'armor', 'casual'), ten węzeł pozwala filtrować, które skiny uwzględnić w przetwarzaniu.
Parametry:
- **Skins List**: Pola wyboru dla każdego dostępnego skina
- **Allow All**: Przełącznik do uwzględnienia wszystkich skinów (domyślnie)
Przypadki użycia:
- Tworzenie osobnego atlasu na skin
- Stosowanie różnych optymalizacji do różnych skinów
- Wykluczanie rzadko używanych skinów z zoptymalizowanej wersji
Uwaga: Skiny współdzielą strukturę szkieletu, ale mogą mieć różne attachmenty.
Slot Filter
Filtruje ścieżki animacji slotów na podstawie nazwy slotu.
Cel: Przydatny do celowania lub wykluczania określonych slotów, które mogą mieć szczególne wymagania dotyczące czasu lub widoczności.
Użycie: Możesz go użyć do wykluczenia slotów broni lub efektów, które są przełączane przez kod, przed wpływem optymalizacji widoczności attachmentów.
Parameter Filter
Filtruje ścieżki animacji na podstawie ich typu właściwości (np. rotation, scale, color).
Cel: Pozwala na stosowanie kolejnych optymalizacji tylko do określonych typów danych animacji.
Użycie: Umieść ten węzeł przed optymalizatorem, aby ograniczyć jego zakres. Na przykład, możesz zastosować optymalizację RDP tylko do ścieżek 'translation' i 'scale'.
Atlas Unpacker
Wyodrębnia pojedyncze sprite'y z atlasu tekstur Spine.
Cel: Rozkłada plik atlasu na jego składowe sprite'y, umożliwiając indywidualną analizę lub przepakowanie.
Użycie: Połącz wyjście 'atlas_project' z InputNode do wejścia 'atlas_project_in' tego węzła. Wyjście może być następnie wysłane do AssetViewer w celu inspekcji lub do AtlasRepacker w celu optymalizacji.
⭐ Przycinanie siatki: Połącz wyjście 'Original JSON' z InputNode do wejścia 'Skeleton JSON', aby włączyć automatyczne przycinanie sprite'ów do granic ich siatki (zamiast prostokątnych granic). To znacznie zmniejsza zużycie pamięci tekstur dla sprite'ów z załącznikami siatki, usuwając przezroczyste piksele poza kadłubem siatki.
Wyjścia:
- **sprites_out**: Ustandaryzowana tablica sprite'ów (dla viewer/repacker)
- **sprites_data_out**: Wyodrębnione obrazy/metadata sprite'ów (uporządkowany pakiet)
- **atlas_out**: Przekazanie Atlas Project (przelot)
Klucze socketów: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out
Atlas Repacker
Przepakowuje pojedyncze sprite'y w jeden lub więcej nowych, zoptymalizowanych atlasów tekstur.
Cel: Optymalizuje pamięć tekstur i potencjalnie redukuje wywołania rysowania poprzez tworzenie wydajnych arkuszy sprite'ów.
Użycie: Akceptuje 'sprites_data' (zazwyczaj z AtlasUnpacker) i generuje nowy układ atlasu.
Parametry:
- **Max Texture Size**: Maksymalna szerokość/wysokość stron atlasu wyjściowego.
- **Padding**: Odległość w pikselach między każdym sprite'em.
- **Scale**: Skaluje wszystkie sprite'y przed pakowaniem.
- **Power of Two**: Wymusza, aby wymiary atlasu wyjściowego były potęgami dwójki (np. 1024, 2048), wymagane przez niektóre platformy.
- **Allow Rotation**: Pozwala obracać sprite'y o 90 stopni dla lepszej wydajności pakowania.
Atlas Viewer
Wizualizuje układ atlasu tekstur i pozycjonowanie sprite'ów.
Cel: Narzędzie do debugowania i inspekcji do zrozumienia struktury atlasu.
Klucze socketów: atlas_project, atlas_in, atlas, json
Atlas Merger
Łączy wiele źródeł atlasów w jeden zunifikowany atlas.
Cel: Scalanie wielu projektów atlasów w jeden.
Wejście:
- **atlas_inputs**: Tablica multi-wejściowa projektów atlasów
Wyjścia:
- **atlas_out**: Scalony projekt atlasu
- **merged_out**: Przestarzałe scalone wyjście
- **merged_atlas_out**: Przestarzałe scalone wyjście
Przypadki użycia:
- Łączenie atlasu postaci z atlasem broni
- Scalanie podstawowych sprite'ów z zawartością DLC
- Ponowne łączenie po równoległym przetwarzaniu atlasu
Typowy pipeline:
```
InputA → Unpacker → Repacker ─┐
├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Przed Repackerem dane to pojedyncze sprite'y; po Repackerze stają się projektem atlasu. Atlas Merger łączy projekty atlasów, a końcowy przebieg Unpacker → Repacker pakuje wszystko ciasno w jeden zunifikowany atlas.
Asset Viewer
Wyświetla pojedyncze sprite'y z rozpakowanego atlasu.
Cel: Wizualne narzędzie debugowania do manipulacji atlasem.
Użycie: Akceptuje 'sprites_data' z węzła Atlas Unpacker i pozwala wizualizować każdy wyodrębniony obraz, badać jego właściwości (wymiary, rotację itp.) i weryfikować dokładność wizualną po rozpakowaniu.