Skip to main content
Go to Editor

위키

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

FPSUIYouTubeanimationexportguideplaybackrecorderrecordingtimelinevideoviewer가격가이드개념결과구독데이터메모리메트릭무손실뷰어성능소켓손실형연결영상예시워크플로우유형차트초보자최적화컨트롤테이블통계파이프라인프리미엄플러스

시작하기: 기본 워크플로우

초보자워크플로우가이드

이 가이드는 JSON Optimizer를 빠르게 시작하는 데 도움이 됩니다.

  1. 프로젝트 로드: InputNode를 사용하여 .json, .atlas, .png 파일을 로드하세요.
  2. 프리셋 선택(Plus 모드): Plus 모드에서는 오른쪽 패널에서 내장 프리셋(예: "Basic Fallback") 중 하나를 선택하세요. 그러면 최적화 그래프가 자동으로 구성됩니다. Free 모드에서는 최소한의 수동 그래프를 구성하세요: InputNodeQuantizerNodeOutputNode.
  3. 그래프 실행: "그래프 실행" 버튼을 클릭하세요.
  4. 결과 비교: "보기" 탭으로 전환하여 원본과 최적화된 애니메이션을 시각적으로 비교하세요.
  5. 변경 사항 확인: "결과" 및 "통계" 탭에서 어떤 키가 수정되었거나 삭제되었는지에 대한 자세한 정보를 확인할 수 있습니다.

소켓 타입 & 데이터 흐름

소켓유형데이터연결

이 글은 노드 그래프의 소켓에서 사용되는 데이터 타입과, 어디에 무엇을 연결할 수 있는지 설명합니다.

간단한 규칙

대부분의 처리 노드는 Spine Payload를 대상으로 동작합니다. 아틀라스 관련 노드는 Atlas Project 또는 Sprites를 대상으로 동작합니다. 소켓이 무엇을 기대하는지 확실하지 않다면 ValidatorNode를 사용하세요.

소켓 타입

  • Spine Payload — 대부분의 처리 노드가 사용하는 Spine 프로젝트의 런타임 친화적 표현입니다.
  • Atlas Project — 아틀라스 노드에서 사용하는 아틀라스 메타데이터 + 페이지 이미지입니다.
  • Sprites — 언팩된 스프라이트 이미지/리전(Atlas Unpacker → Asset Viewer / Atlas Repacker).
  • JSON — 진단/검증/디핑을 위한 원본 또는 재구성된 Spine JSON입니다.
  • Changes — 일부 최적화기가 생성하고 뷰어/리포팅 노드에서 사용하는 diff 목록/스트림입니다.

키 → 타입 → 연결

소켓 키(예시)데이터 타입생성 주체연결 대상
payload, payload_in, payload_outSpine PayloadInputNode, 대부분의 처리 노드처리 노드(RDP/Spline/Refit/Quantizer/Cleanup 등), 그리고 OutputNode.payload
original_jsonJSONInputNodeDiagnosticNode, JSONDiffNode.json_before, OutputNode.original_json, 일부 아틀라스 노드(예: repacker alpha 모드)
reconstructed_json_outJSONOutputNodeJSONDiffNode.json_after, validator/디버그
changesChanges 목록일부 처리 노드 + OutputNodeAnimationViewerNode(선택), 리포트/디버그
atlas_projectAtlas ProjectInputNode / atlas viewerAtlasUnpackerNode.atlas_project, OutputNode.atlas_project, atlas filter
atlas_in, atlas_outAtlas Project(또는 atlas 관련 스트림)Atlas 노드 / 필터Atlas 노드, AtlasViewerNode, AtlasMergerNode(multi-input 사용)
sprites_out, sprites_in, sprites_data_inSpritesAtlasUnpackerNode, 필터AssetViewerNode.sprites_in, AtlasRepackerNode.sprites_data_in
atlas_inputs여러 Atlas Project여러 소스AtlasMergerNode.atlas_inputs(여러 아틀라스 연결)

실전 파이프라인

  • 기본 JSON 최적화: InputNode → (선택: DiagnosticNode / 필터) → 최적화기(RDPNode, SplineNode, QuantizerNode, …) → OutputNode.
  • 아틀라스 재패킹: InputNode.atlas_projectAtlasUnpackerNode → (선택: AssetViewerNode) → AtlasRepackerNodeOutputNode.atlas_project/atlas_assets.

구독 플랜 및 프리미엄 기능

구독프리미엄플러스가격

re-polish는 서로 다른 요구에 맞춘 두 가지 구독 등급을 제공합니다.

무료 플랜

  • ✓ 기본 노드 그래프
  • ✓ JSON 뷰어
  • ✓ 여러 트랙에서 애니메이션을 재생하고 애니메이션 간 믹스를 조절할 수 있는 타임라인
  • ✓ 제한된 최적화
  • ✓ Spine 버전: 4.2, 4.1, 4.0, 3.8, 3.7

Plus 플랜 ($5/월)

  • ✓ 모든 무료 기능
  • ✓ 키프레임, 커브, 텍스처를 아우르는 최적화 툴킷
  • ✓ 물리를 키프레임으로 베이크
  • ✓ 베이크된 키프레임을 커브로 정리
  • ✓ 그래프 프리셋
  • ✓ 우선 지원

Plus 받기

상단 내비게이션의 Upgrade 버튼을 클릭한 뒤:

  • Get Plus 선택
  • Patreon으로 이동 — 구독 완료
  • 동일한 Patreon 계정으로 로그인한 상태에서 노드 에디터로 돌아와 링크를 검증하고 Plus를 활성화
  • (선택) 활성화 코드 입력 (특별 프로모션용)

핵심 개념: 손실형 vs 무손실

개념손실형무손실초보자

모든 최적화 방법은 두 가지 유형으로 나뉩니다:

권장: 항상 무손실 최적화부터 시작하세요. 추가적인 파일 크기 감소가 필요할 때만 손실형 방법을 사용하고, 결과는 반드시 시각적으로 확인하세요.

효율성 측정 방법

가이드메트릭통계

최적화의 효과를 이해하려면 다음 지표에 주의하세요:

  • 파일 크기: .json 파일의 최종 크기가 최적화의 주요 목표입니다.
  • 키프레임 수: "통계" 탭에서 각 애니메이션에서 제거된 키프레임 수를 보여주는 표와 차트를 찾을 수 있습니다.
  • 시각적 비교: 항상 "보기" 탭을 사용하여 "이전"과 "이후" 애니메이션을 비교하세요. 손실형 최적화가 허용할 수 없는 시각적 아티팩트를 도입하지 않았는지 확인하세요.
  • "결과" 테이블의 보고서: 여기에서 데이터에 대한 각각의 특정 변경 사항을 자세히 검토할 수 있습니다.

보기: 컨트롤 패널

뷰어컨트롤UI

보기 탭은 캔버스 위에 조작 패널을 오버레이로 표시합니다. 세 그룹으로 나뉩니다:

애니메이션 컨트롤

  • 애니메이션 — 재생할 Spine 애니메이션을 선택합니다.
  • 스킨 — 적용할 스킨을 선택합니다.
  • 속도 — 재생 속도 배율 (0.1× → 3.0×).

보기 컨트롤

  • 보기 초기화 — 기본 카메라/레이아웃 위치로 되돌립니다.
  • 보기 옵션 — 비교 뷰 위치를 위한 수치 오프셋: 간격 X / 간격 Y (원본/최적화 사이 거리) 및 오프셋 X / 오프셋 Y (전체 이동).

디버그 컨트롤

  • 디버그 모드 — 디버그 렌더링 오버레이를 활성화합니다(런타임 지원에 따라 다름).
  • 물리 사용 — 물리 시뮬레이션을 토글합니다(스켈레톤이 물리를 사용하는 경우).
  • 라벨 — 라벨 오버레이를 토글합니다.

보기: 성능 패널

성능FPS메모리UI

Performance 패널은 현재 재생 중인 스켈레톤(들)의 런타임 메트릭을 실시간으로 보여줍니다.

실시간

  • FPS — 모니터가 측정한 초당 프레임.
  • Frame Time — 프레임당 시간(밀리초, 낮을수록 좋음).
  • FPS chart — 최근 120개 샘플을 막대로 표시.

스켈레톤 메트릭

  • Visible Slots — 마지막 샘플에서 보였던 슬롯 수.
  • Avg. Visible — 보이는 슬롯 수의 이동 평균(단일 프레임보다 안정적).
  • Vertices — 렌더링에 사용 중인 현재 정점 수.
  • Bounds (px) — 현재 스켈레톤 경계(너비×높이, 픽셀).
  • Avg. Bounds — 경계의 이동 평균.
  • Largest Texture — 스켈레톤에서 감지된 가장 큰 아틀라스 페이지(치수 기준).
  • Texture Memory — 로드된 아틀라스 페이지의 추정 총 텍스처 메모리. 가능한 경우 페이지별 내역(파일명, 치수, 추정 크기)도 표시됩니다.

개선(Optimized가 있는 경우)

  • Slot Improvement — Original과 Optimized의 Avg. Visible 비교.
  • Memory Change — Original과 Optimized의 Texture Memory 비교.

보기: 타임라인

viewertimelineanimationplaybackguide

타임라인 패널은 Viewer 하단에 있는 도킹 가능한 애니메이션 시퀀서입니다. 여러 트랙에 애니메이션 클립을 배치하고 재생을 제어하며 트랜지션을 미리보기할 수 있습니다.

트랙과 클립

  • 최대 4개 애니메이션 트랙 — 각 트랙은 Spine의 trackIndex 레이어에 매핑됩니다. 상위 트랙은 하위 트랙에 블렌딩됩니다.
  • 애니메이션 추가 — 임의의 트랙에서 + 버튼을 클릭하여 애니메이션 피커를 엽니다(검색 필터 포함).
  • 클립 드래그 및 리사이즈 — 클립 본체를 드래그하여 트랙 상에서 이동, 좌우 끝을 드래그하여 시작 시간이나 길이 변경.
  • 클립 삭제 — 클립을 선택하고 Delete 또는 Backspace를 누릅니다.
  • 오버랩 감지 — 같은 트랙에서 겹치는 클립은 빨간색으로 하이라이트됩니다.

트랜스포트 컨트롤

  • Play / Pause / Stop — 표준 재생 컨트롤.
  • Previous / Next — 이전/다음 클립의 시작으로 점프.
  • 애니메이션 속도 — 0.1×에서 3.0× 슬라이더.
  • Auto-stop — 타임라인 끝에서 재생이 자동 정지됩니다.

트랜지션 믹싱

  • 글로벌 믹스 듀레이션 — 연속된 클립 사이의 기본 크로스페이드 시간을 설정.
  • 트랜지션별 오버라이드 — 두 클립 사이의 트랜지션 버블을 클릭하여 커스텀 믹스 듀레이션을 설정. 개별 오버라이드를 글로벌 값으로 리셋할 수 있습니다.

시크와 스크러브

  • 플레이헤드 — 타임 룰러의 핸들을 드래그하거나 룰러를 클릭하여 시크.
  • 커서 시간 미리보기 — 트랙 영역에 호버하면 커서 아래의 시간이 표시됩니다.
  • Web Worker — 부드러운 성능을 위해 시크와 이벤트 계산이 백그라운드 워커로 오프로드됩니다.

물리 대응 재생

  • Update(활성 constraints)와 None(비활성) 사이에서 물리를 토글.
  • 시크 중 물리 constraints를 올바르게 settle시키기 위해 스켈레톤 시간이 진행됩니다.

멀티 스켈레톤 지원

  • 타겟 페어 셀렉터 — 각 트랙은 모든 페어(🌐 All pairs) 또는 특정 스켈레톤을 타겟으로 할 수 있습니다.
  • 스켈레톤별 위치와 스케일 — 개별 스켈레톤의 X/Y 오프셋과 스케일 입력.
  • 그리기 순서 — 렌더 레이어 우선순위를 제어하는 숫자 입력.

디버그 그리기

Bones, Bone Names, Regions, Meshes, Hulls, Bounds, Paths, Clipping, Points 표시를 토글.

스킨 선택

로드된 스켈레톤에 정의된 모든 스킨의 멀티셀렉트 체크박스.

보기 설정

  • Spacing X / Y — 스켈레톤 페어 간 간격.
  • Offset X / Y — 글로벌 뷰포트 시프트.
  • PMA 토글 — premultiplied alpha 모드(Spine 3.x) 또는 atlas alpha 모드(Spine 4.x: auto / pma / bleed / none).
  • 스켈레톤 라벨 — 라벨 오버레이 토글.

보기: 레코더

viewerrecorderrecordingexportvideoguide

레코더는 Viewer에서 Spine 애니메이션을 동영상, 애니메이션 이미지 또는 이미지 시퀀스로 캐처합니다.

녹화 모드

  • ⚡ Quick RecordMediaRecorder + captureStream()을 사용한 리얼타임 캐처. WebM 출력만 가능. 빠르지만 리얼타임 프레임 레이트에 제한됩니다.
  • 🎬 HQ Export — WebCodecs VideoEncoder + readPixels()를 사용한 오프라인 프레임 단위 렌더링. 모든 포맷을 지원하며 픽셀 퍼펙트 출력을 생성합니다.

출력 포맷

  • 동영상: WebM, MP4, AVI, MOV
  • 애니메이션 이미지: GIF, Animated PNG (APNG)
  • 이미지 시퀀스: PNG Sequence, WebP Sequence

코덱 (HQ Export)

VP8, VP9, H.264 (AVC), AV1, ProRes — 사용 가능한 코덱은 브라우저 지원에 따라 자동 감지됩니다.

품질

  • 프리셋: Low (~1 Mbps), Medium (~3 Mbps), High (~5 Mbps), Lossless (~20 Mbps).
  • 커스텀 비트레이트 — kbps로 지정하여 세밀하게 제어.

타이밍

  • FPS: 24, 30, 60 또는 커스텀 (1–120 fps).
  • 워밍업 — 녹화 시작 전에 물리/constraint가 안정되는 시간(초).
  • Pause-after — 지정 시간만큼 마지막 프레임을 유지.
  • 마지막 프레임 포함 — 토글.

뷰포트와 크롭

  • 크롭 활성/비활성 — 크롭 영역 토글.
  • 크롭 사각형 — Spine 월드 좌표로 X, Y, 너비, 높이.
  • Snap to pair — 설정 가능한 패딩으로 스켈레톤 페어에 크롭을 자동 맞춤.
  • 인터랙티브 크롭 오버레이 — 뷰포트에서 직접 모서리/변을 드래그.

해상도

  • 스케일 모드 — 퍼센트 슬라이더 (10%–400%).
  • 고정 모드 — 명시적 픽셀 치수 (최대 4096px).
  • 계산된 출력 해상도가 리얼타임으로 표시됩니다.

렌더 옵션

  • Render bones — 디버그 본 오버레이 포함.
  • Render images — 어태치먼트 이미지 포함.
  • Render others — 바운딩 박스, 패스.
  • MSAA — None / 2× / 4× 안티에일리어싱.
  • Smoothing — 0–8 레벨, 알고리즘 선택 (Bicubic / Bilinear).

배경

  • 투명 — 알파 비대응 포맷(예 GIF, JPEG)에서 자동 비활성화.
  • 단색 — 커스텀 컨러 피커.
  • 체커보드 — 투명도 시각적 인디케이터.
  • 알파 채널 지원: VP9+WebM, AV1+MP4, PNG Sequence, APNG, WebP Sequence.

HUD 오버레이

  • 토글: 트랙 정보, 시간, 프레임 번호, FPS, 스켈레톤 라벨.
  • 커스텀 텍스트 — 워터마크 문자열.
  • 위치 — 4개 모서리(좌상, 우상, 좌하, 우하).
  • 폰트 크기 — 8–64px, 텍스트 컨러 피커 포함.

반복과 멀티 스켈레톤

  • 반복 횟수 — 1–100 루프 반복.
  • 타겟 페어 — 특정 스켈레톤 또는 모두 녹화.
  • 스켈레톤 모드 — Combined(단일 파일) / Separate files(스켈레톤당 파일 1개).

파일명 템플릿

변수 포함 템플릿 문자열: {project}, {animation}, {W}, {H}, {fps}. 해결된 파일명의 라이브 미리보기가 표시됩니다.

타임라인 통합

녹화 범위는 타임라인에 빨간/오렌지 파선 클립으로 표시됩니다. 끝을 드래그하여 범위 리사이즈, 본체를 드래그하여 위치 변경, 또는 설정 버튼(⚙️)으로 전체 녹화 설정을 엽니다.

결과 탭

결과테이블최적화

결과 탭은 상세한 최적화 결과를 보여줍니다.

  • 결과 테이블 — JSON 최적화 결과를 변경 단위(행)로 표시합니다(예: 어떤 애니메이션/본/속성/키프레임이 수정 또는 제거되었는지).
  • 스프라이트/아틀라스 비교 — 텍스처 최적화를 사용한 경우, 이 섹션에서 스프라이트 크기와 패킹 결과를 비교합니다.

팁: 결과 뷰로 정확히 무엇이 바뀌었는지 확인하세요.

통계 탭

통계차트메트릭

통계 탭은 최적화 결과를 차트와 집계 지표로 요약합니다.

  • 최적화 차트 — 데이터셋 전반의 최적화 영향을 시각화합니다(JSON 최적화에서 변경이 발생한 경우).
  • 지표 테이블 — 원본/신규 크기와 감소율 같은 핵심 수치.
  • 텍스처 패킹 통계 — 아틀라스 재패킹을 사용한 경우, 페이지 수, 총/사용 면적, 효율, 그리고 페이지별 상세 내역을 보여줍니다.

이 탭으로 전체적으로 얼마나 개선됐는지 확인하세요.

파이프라인 예시 (영상)

영상예시파이프라인YouTube

공식 YouTube 플레이리스트의 실제 파이프라인을 소개합니다.

전체 플레이리스트 열기

예시

Spine2D 실험 1: RDP 알고리즘으로 곡선 최적화 — Spine 2D 기본 최적화 데모: Ramer–Douglas–Peucker(RDP) 알고리즘이 중복 곡선/키 데이터를 제거해 JSON을 줄입니다. RDP는 중요한 키를 제거할 수 있으므로 항상 애니메이션을 확인하고 RDP 노드 전에 필터 노드로 민감한 본/슬롯을 제외하세요. YouTube에서 보기

Spine2D 실험 2: 양자화 알고리즘으로 곡선 최적화 — 양자화는 가장 안전한 곡선 최적화입니다. 값을 반올림(보통 소수 1자리)하면 즉시 용량이 줄어듭니다. 예: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. 최종 단계로 출력 노드 바로 전에 Quantizer 노드를 배치해 최적화를 고정하세요. 영상에서 거의 보이지 않는 시각적 변화의 전/후를 보여줍니다. YouTube에서 보기

Spine2D 실험 3: Spline과 Refit으로 곡선 재구성 — Spline은 직선 구간에 대해 무손실(중간의 중복 키 제거)이며, Refit은 손실형이지만 강력합니다. 복잡한 구간을 하나의 베지에 곡선으로 재구성합니다. 이 알고리즘은 물리 베이킹과 Schneider 노드로 정리한 뒤에 이상적입니다. 참고: Refit 반복이 100을 넘으면 최적 곡선을 찾는 데 몇 분이 걸릴 수 있습니다. 영상에서 두 방법과 최적화 비율을 보여줍니다. YouTube에서 보기

Spine2D 실험 4: 어태치먼트 가시성과 Cleanup 노드로 중복 데이터 제거 — 어태치먼트 가시성과 Cleanup 노드를 활용한 구조적 Spine 2D 최적화. 어태치먼트 가시성은 알파가 0이 되면 어태치먼트를 비활성화하고 페이드 인 시 복원하여 드로우콜과 중복 키를 줄입니다. Cleanup은 논리적 중복(미사용 색/알파 트랙, 제약에 의해 완전히 제어되는 IK 회전 키, 패스 제약 키)을 제거합니다. 영상에서 이런 로직 기반 최적화가 곡선 단순화와 어떻게 다른지 보여줍니다. YouTube에서 보기

Spine2D 실험 5: 비선형 파이프라인 구성(필터와 Merge) — 비선형 최적화: 필터(애니메이션/본/슬롯/파라미터/스킨)로 데이터 스트림을 분기하고, 병렬 브랜치에서 서로 다른 알고리즘을 실행(예: 몸 본은 강한 압축, 얼굴 애니메이션은 무손실 유지)한 뒤 Merge 노드로 하나의 스켈레톤으로 합칩니다. 단순한 입력 → 최적화 → 출력 파이프라인을 넘어 최적화가 필요한 부분만 타겟팅할 수 있습니다. YouTube에서 보기

Spine2D 실험 6: 텍스처 재패킹 및 선택적 스케일링 — 고급 텍스처 최적화 파이프라인. Atlas Unpacker/Repacker 노드로 아틀라스를 그래프 안에서 언팩, 리사이즈/압축, 리팩까지 수행해 기존 Spine 작업 흐름보다 빠릅니다. 비선형 파이프라인으로 자산을 분리하고 캐릭터 텍스처는 100% 유지, 다른 텍스처는 25%로 축소한 뒤 하나의 공유 아틀라스로 합칠 수 있습니다. Atlas/Asset Viewer 노드는 각 단계에서 시각적 검사와 필터링을 제공합니다. 리사이즈 목표 설정, 선택적 처리, 재사용 가능한 템플릿화가 쉬워집니다. YouTube에서 보기

Spine2D 실험 7: Scale 노드로 즉시 스켈레톤 조정 — 종단 간 Spine 2D 최적화 파이프라인과 스켈레톤 스케일링. Scale 노드는 번거로운 Spine 작업 흐름(내보내기/가져오기, 리팩/언팩, 경로 수정)을 하나의 그래프 단계로 대체합니다. 목표 크기를 설정하고 뷰포트에서 즉시 미리보기한 뒤 실시간으로 반복 조정할 수 있습니다. 영상은 곡선/키 최적화, 자산 처리, 스켈레톤 리사이징을 하나의 간결한 파이프라인으로 보여줍니다. YouTube에서 보기

Spine2D 실험 8: 공개 베타 노드 개요 — 공개 베타에서 제공되는 모든 노드와 re‑polish가 애니메이터와 개발자 요구를 어떻게 연결하는지에 대한 안내입니다. 중복 키 정리, 베지에→선형 단순화, 용량 절감을 위한 반올림, 보이지 않는 어태치먼트 제거, 미사용 속성 정리, 비영문 문자 감지, 아틀라스 언팩/필터/스케일/리팩을 포함합니다. 듀얼 뷰로 시각적 결과와 FPS를 나란히 비교 검증합니다. 공개 베타는 re-polish.com에서 이용 가능합니다. YouTube에서 보기

Spine2D 실험 9: 물리 제약을 키프레임으로 베이크 — 이 영상에서는 물리 제약을 표준 키프레임으로 베이크하는 최신 실험을 보여줍니다. 새로운 베이크 알고리즘은 다음을 보장합니다: 완벽한 루프(시작과 끝 프레임 사이의 지터/점프 없음), 최적화된 파일 크기(자동 커브 정리로 JSON 크기를 원본에 가깝게 유지), 하위 호환성(베이크된 키로 Spine 4.2 물리 애니메이션을 Spine 4.1 또는 4.0에서도 사용 가능). YouTube에서 보기

Nodes

Input

Spine 프로젝트 파일, JSON 전용 입력, 데모 에셋 및 ZIP 패키지를 그래프로 가져옵니다.

용도: 대부분의 워크플로에서 사용하는 기본 진입점입니다. JSON, atlas, 텍스처를 읽어 후속 노드가 처리할 수 있는 내부 데이터로 정규화합니다.

지원 모드:
1. 전체 프로젝트: JSON + atlas + 텍스처
2. JSON 전용: atlas 없이 skeleton/animation 데이터를 처리
3. ZIP 패키지: 완전한 프로젝트가 들어 있는 패키징된 zip
4. 데모 에셋: 빠른 테스트를 위한 내장 샘플 데이터

주요 출력:
- **payload_out**: 최적화 노드를 위한 정규화된 데이터
- **original_json_out**: 비교 또는 재구성을 위한 원본 JSON
- **atlas_project_out**: 텍스처가 제공될 때 파싱된 atlas 프로젝트

Picture Input

독립적인 PNG/JPEG 이미지를 뷰포트에 추가해 더 깔끔한 미리보기와 프레젠테이션 샷을 만들 수 있게 합니다.

용도: 이 노드를 사용하면 이미지를 프레젠테이션 레이어나 시각적 보조 요소로 뷰포트에 직접 배치할 수 있습니다. 장면을 꾸미고, 보조 그래픽을 추가하고, 동영상이나 데모를 녹화하기 전에 프로젝트 미리보기를 더 다듬어진 모습으로 만들고 싶을 때 유용합니다.

워크플로: 이미지 하나를 불러온 다음 뷰포트 도구로 크기를 조절하고, 이동하고, z-index를 조정해 구도 안에 올바르게 배치합니다. 이렇게 하면 주요 Spine 프로젝트 데이터를 건드리지 않고도 매력적인 쇼케이스 샷을 쉽게 만들 수 있습니다.

이 노드는 독립형이며 그래프 소켓을 노출하지 않습니다.

Output

최종 결과를 수집하고 최적화된 데이터를 개별 파일, 묶음 파일 세트 또는 아카이브로 다운로드할 수 있게 합니다.

용도: 최적화된 JSON, atlas 데이터, 텍스처, 스프라이트의 내보내기 허브 역할을 합니다. 단일 JSON/atlas/텍스처 세트, 여러 파일 세트, 또는 전체 Spine 프로젝트를 다시 빌드하지 않고 이미지 출력만 원할 때는 스프라이트만으로도 결과를 조합할 수 있습니다.

내보내기 옵션:
- 파일을 개별적으로 또는 하나의 아카이브로 다운로드
- 패킹된 결과 또는 언패킹된 파일이 포함된 아카이브 다운로드
- JSON을 압축 형식 또는 읽기 쉬운 pretty-print 형식으로 내보내기
- 전체 Spine 프로젝트 데이터 또는 스프라이트/이미지 결과만 내보내기

체이닝 워크플로: OutputNode가 그래프의 절대적인 끝일 필요는 없습니다. 출력을 다른 파이프라인 단계로 넘기고 같은 파일에 추가 최적화 패스를 실행할 수 있습니다. 실제로 key와 curve 최적화는 최대 3회 연속 반복까지 테스트되었습니다.

주요 출력:
- **reconstructed_json_out**: 재구성된 Spine JSON
- **original_json_passthrough_out**: 원본 JSON의 패스스루
- **payload_out**: 추가 체이닝을 위한 payload
- **changes**: 수집된 최적화 변경 사항
- **atlas_assets**: 내보내기 준비가 된 atlas 리소스

RDP

애니메이션 곡선을 단순화합니다(RDP).

목적: 직선 또는 거의 직선인 애니메이션 구간에서 두 점을 잇는 직선 위의 점을 제거해 키프레임 수를 줄입니다.

황금 규칙: 기본적으로 비활성화되어 있습니다. 형태가 큰 곡선(면적/곡률)이 직선화되는 것을 막아줍니다. 더 강한 압축이 꼭 필요할 때만 시각 검토 후 비활성화하세요.

소켓 키: payload_in, payload_out, changes

Spline

스플라인 기반 곡선 최적화.

목적: 시각적 품질을 유지하면서 부드러운 곡선 피팅을 수행합니다.

소켓 키: payload_in, payload_out, changes

Refit

Bezier 리핏으로 키프레임 수를 줄입니다.

목적: 허용 오차 내에서 더 적은 곡선으로 맞춥니다。

소켓 키: payload_in, payload_out, changes

Quantizer

키프레임 및 곡선의 숫자 값 정밀도를 줄입니다.

목적: 지정된 소수 자릿수로 숫자를 반올림하여 파일 크기를 줄이는 간단하지만 효과적인 방법입니다.

사용법: 거의 모든 애니메이션 데이터에 적용할 수 있습니다. 키프레임 수가 많을수록 더 효과적입니다.

주의: 너무 공격적인 양자화(낮은 정밀도)는 애니메이션에서 떨림이나 시각적 아티팩트를 유발할 수 있습니다.

Cleanup

중복되거나 불필요한 애니메이션 데이터를 제거하기 위해 다양한 정리 작업을 수행합니다.

목적: 다른 최적화기가 놓칠 수 있는 특정 종류의 중복 데이터를 제거하기 위한 전문 도구입니다.

사용법: payload를 'payload_in'에 연결하고 결과를 'payload_out'에서 받으세요. 변경 사항별 보고서가 필요하다면 'changes'도 함께 사용하세요.

소켓 키:
- 입력: payload_in
- 출력: payload_out, changes

현재 지원하는 정리 작업:
1. **사용하지 않는 색상/알파 트랙 제거**: 애니메이션 동안 한 번도 보이지 않는 슬롯의 color/alpha 타임라인을 제거합니다.
2. **중복 IK 회전 제거**: IK 제약(믹스 100%)에 의해 완전히 제어되는 뼈에서 rotation 키프레임을 제거합니다.
3. **패스 제약 키 제거**: 패스 제약(믹스 값 100%)에 의해 완전히 제어되는 뼈에서 rotate/translate 키프레임을 제거합니다.
4. **비영어 문자 정리**: 다운스트림 도구에서의 문제를 피하기 위해 이름/식별자에 포함된 비영어 문자를 치환합니다.

Scale

지정된 계수로 애니메이션 키프레임의 모든 숫자 값을 스케일링합니다.

목적: 애니메이션 데이터를 균일하게 스케일링하여 스켈레톤 비례 크기 조정 또는 애니메이션 강도 조정에 유용합니다.

사용법: 페이로드에 연결하고 스케일 계수를 설정합니다. 1.0 이상의 값은 확대, 1.0 미만은 축소합니다.

매개변수:
- **Scale Factor**: 모든 위치 및 크기 값에 적용되는 승수.
- **Include Rotations**: 회전 값도 스케일링할지 여부(일반적으로 비활성화됨).

사용 사례:
- 가져온 애니메이션을 새 스켈레톤 크기에 맞게 조정
- 애니메이션의 과장되거나 미묘한 변형 생성
- 다른 캐릭터 크기를 위한 여러 애니메이션 일괄 스케일링

Schneider

슈나이더 곡선 피팅 알고리즘을 사용하여 애니메이션 키프레임에 부드러운 베지어 곡선을 맞춥니다.

목적: 밀집된 키프레임 시퀀스에서 자연스러운 모양의 베지어 곡선을 생성하는 고급 곡선 피팅.

사용 가능: **Plus 전용 노드**.

작동 방식: 슈나이더 알고리즘은 키프레임 위치와 접선을 분석하여 원래 모션과 밀접하게 일치하는 최적의 베지어 제어점을 생성합니다.

매개변수:
- **Error Tolerance**: 원래 키프레임에서 최대 허용 편차. 낮음 = 더 정확, 높음 = 더 부드러운 곡선.
- **Corner Angle**: 곡선을 세그먼트로 분할하는 임계 각도(도).

최적 대상:
- 많은 키프레임이 있는 손으로 그린 또는 가져온 애니메이션
- 선형 보간을 부드러운 베지어 곡선으로 변환
- 곡선 품질을 유지하면서 키프레임 수 줄이기

참고: RDP와 같은 간단한 알고리즘보다 계산 집약적이지만 우수한 곡선 품질을 생성합니다.

Physics Constraint Bake

Bake Physics Constraints to Keys: PhysicsConstraint 모션을 회전/이동 키프레임으로 변환하고 물리 타임라인을 제거합니다.

목적: 런타임 물리 시뮬레이션을 명시적 키프레임으로 변환하여 애니메이션을 결정적이고 PhysicsConstraints 없이 편집 가능하게 만듭니다. Bake 후 payload에서 PhysicsConstraints와 물리 타임라인이 제거됩니다.

사용 가능: **Plus 전용 노드**.

입력/출력:
- **payload_in** → **payload_out** (baked)
- **changes** (옵션 변경 목록)

컨트롤:
- **Sample FPS**: 시뮬레이션 샘플링 속도.
- **Bake Rotation**: 회전 키프레임 작성.
- **Bake Translation**: 이동 키프레임 작성.
- **Bake Translation (Children)**: 물리 모션에 의존하는 자식 본에 이동 bake 적용.

노트:
- 시뮬레이션 재구성을 위해 원본 Spine JSON이 필요합니다.
- PhysicsConstraints를 제거하면서 모션을 유지하려면 사용하세요.

Attachment Visibility

알파가 0일 때 슬롯의 어태치먼트를 null로 설정하여 렌더링을 최적화합니다.

목적: 게임 엔진이 보이지 않는 어태치먼트를 처리하거나 렌더링하는 것을 방지합니다.

사용법: 알파/색상 트랙을 분석하고 해당 'attachment' 트랙에서 키프레임을 자동으로 추가하거나 수정합니다.

매개변수:
- **Alpha Threshold**: 어태치먼트가 보이지 않는 것으로 간주되는 알파 값.
- **Auto Restore**: 활성화된 경우 알파 값이 임계값을 초과하면 노드가 자동으로 마지막으로 표시된 어태치먼트를 복원합니다.

Payload Merger

여러 처리된 애니메이션 페이로드를 단일 통합 페이로드로 다시 병합합니다.

목적: 다른 애니메이션 또는 뼈 그룹이 별도로 최적화되고 재결합이 필요한 병렬 처리 파이프라인에 필수적입니다.

병합 전략:
1. **기본 입력**: 스켈레톤 구조 제공(뼈, 슬롯, 스킨 등)
2. **오버라이드 입력**: 기본 트랙을 대체하는 처리된 트랙 제공
3. **마지막 쓰기 우선**: 여러 오버라이드가 동일한 트랙을 제공할 때 마지막이 우선

충돌 감지:
- 오버라이드 입력 간의 충돌이 감지되어 보고됩니다
- 기본 → 오버라이드 대체는 정상 동작(충돌 아님)
- 트랙 충돌 시 경고 토스트 표시

파이프라인 예:
```
Input → AnimFilter('run') → Cleanup ───────┐
      → AnimFilter('idle') → Quantizer ────┤
      → (base) ────────────────────────────→ Merger → Output
```

사용 사례:
- 다른 애니메이션용 다른 최적화 프로그램
- 재결합이 있는 별도의 뼈/슬롯 처리
- 다른 최적화 전략의 A/B 테스트

Animation Viewer

최적화 전후의 애니메이션 곡선을 검사하고 비교하기 위한 시각적 도구입니다.

목적: 선택한 트랙에 대한 키프레임 및 곡선의 그래픽 표현을 제공합니다.

사용법: 'payload_before' 및 'payload_after' 입력을 모두 연결하면 원본 및 최적화된 곡선이 겹쳐져 최적화의 영향을 시각화하기 쉽습니다.

Animation Filter

애니메이션 이름(예: 'run', 'idle')에 따라 애니메이션 트랙을 필터링합니다.

목적: 다른 애니메이션에 다른 최적화 전략을 적용하는 데 유용합니다.

사용법: 예를 들어, 배경 캐릭터 애니메이션에는 공격적인 손실 최적화(예: DCT)를 적용하고 주 캐릭터 액션에는 무손실 최적화(예: Spline)를 사용할 수 있습니다.

Asset Filter

아틀라스 에셋을 이름으로 필터링하며, 두 가지 모드로 작동: 언팩 전(아틀라스 텍스트 필터링) 또는 언팩 후(스프라이트 필터링).

목적: 워크플로에 포함되는 에셋 제어 - 아틀라스에서 언팩할 에셋 또는 재팩에 포함할 언팩된 스프라이트 제어.

모드:
1. 프리-언팩 모드 (AtlasUnpacker 이전):
   - 입력: atlas_in (atlas_project)
   - 출력: atlas_out (필터링된 atlas_project)
   - 워크플로: InputNode → AssetFilter → AtlasUnpacker
   - 사용 사례: 아틀라스에서 언팩할 에셋 필터링 (처리 시간 절약)

2. 포스트-언팩 모드 (AtlasUnpacker 이후):
   - 입력: sprites_in (sprites)
   - 출력: sprites_out (필터링된 sprites)
   - 워크플로: AtlasUnpacker → AssetFilter → AtlasRepacker
   - 사용 사례: 최종 아틀라스에 포함할 언팩된 스프라이트 필터링

UI 동작:
- 프리-언팩 모드에서: 아틀라스 텍스트를 파싱하여 에셋 이름 발견
- 포스트-언팩 모드에서: 스프라이트 배열에서 에셋 이름 발견
- '모두 허용' 토글: 체크하면 모든 에셋 통과 (목록은 표시되지만 비활성화)
- 체크박스: 포함할 특정 에셋 선택 ('모두 허용'이 체크 해제된 경우)

예시:
- 프리-언팩: 'char_*' 에셋만 선택하여 캐릭터 스프라이트만 언팩
- 포스트-언팩: 'background_*' 스프라이트를 최종 재팩 아틀라스에서 제외
- 'weapon_*' 패턴을 선택하여 무기 전용 아틀라스 생성

Bone Filter

뼈 이름에 따라 뼈 애니메이션 트랙을 필터링합니다.

목적: 최적화 프로세스에서 특정 뼈를 대상으로 하거나 제외할 수 있습니다.

사용법: 얼굴 표정에 사용되는 뼈와 같은 민감한 뼈를 공격적인 최적화에서 제외하여 모든 세부 사항을 보존하고 덜 중요한 뼈는 크게 최적화할 수 있습니다.

Skin Filter

스킨 이름을 기반으로 애니메이션 및 에셋 데이터를 필터링합니다.

목적: 멀티 스킨 Spine 프로젝트에서 특정 스킨만 처리합니다.

사용법: Spine 프로젝트에 여러 스킨(예: 'default', 'armor', 'casual')이 있는 경우 이 노드를 사용하여 처리에 포함할 스킨을 필터링할 수 있습니다.

매개변수:
- **Skins List**: 사용 가능한 각 스킨의 체크박스
- **Allow All**: 모든 스킨 포함 토글(기본값)

사용 사례:
- 스킨별 별도 아틀라스 생성
- 다른 스킨에 다른 최적화 적용
- 최적화된 빌드에서 거의 사용되지 않는 스킨 제외

참고: 스킨은 스켈레톤 구조를 공유하지만 다른 어태치먼트를 가질 수 있습니다.

Slot Filter

슬롯 이름에 따라 슬롯 애니메이션 트랙을 필터링합니다.

목적: 특별한 타이밍 또는 가시성 요구 사항이 있을 수 있는 특정 슬롯을 대상으로 하거나 제외하는 데 유용합니다.

사용법: 코드로 전환되는 무기 또는 효과 슬롯이 어태치먼트 가시성 최적화의 영향을 받지 않도록 제외하는 데 사용할 수 있습니다.

Parameter Filter

속성 유형(예: rotation, scale, color)에 따라 애니메이션 트랙을 필터링합니다.

목적: 특정 유형의 애니메이션 데이터에만 후속 최적화를 적용할 수 있습니다.

사용법: 범위를 제한하기 위해 이 노드를 최적화 프로그램 앞에 배치합니다. 예를 들어, 'translation' 및 'scale' 트랙에만 RDP 최적화를 적용할 수 있습니다.

Atlas Unpacker

Spine 텍스처 아틀라스에서 개별 스프라이트를 추출합니다.

목적: 아틀라스 파일을 구성 요소 스프라이트로 분해하여 개별 분석 또는 재포장을 가능하게 합니다.

사용법: InputNode의 'atlas_project' 출력을 이 노드의 'atlas_project_in' 입력에 연결합니다. 출력은 AssetViewer로 보내 검사하거나 AtlasRepacker로 보내 최적화할 수 있습니다.

⭐ 메시 자르기: InputNode의 'Original JSON' 출력을 'Skeleton JSON' 입력에 연결하면 스프라이트를 메시 경계로 자동 자르기(직사각형 경계 대신)할 수 있습니다. 이를 통해 메시 헐 외부의 투명 픽셀을 제거하여 메시 첨부 파일이 있는 스프라이트의 텍스처 메모리 사용량을 크게 줄일 수 있습니다.

출력:
- **sprites_out**: 표준화된 스프라이트 배열(viewer/repacker용)
- **sprites_data_out**: 추출된 스프라이트 이미지/메타데이터(구조화된 번들)
- **atlas_out**: Atlas project 패스스루

소켓 키: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out

Atlas Repacker

개별 스프라이트를 하나 이상의 새로운 최적화된 텍스처 아틀라스로 재포장합니다.

목적: 효율적인 스프라이트 시트를 생성하여 텍스처 메모리를 최적화하고 잠재적으로 드로우 콜을 줄입니다.

사용법: 'sprites_data'(일반적으로 AtlasUnpacker에서)를 받아들이고 새로운 아틀라스 레이아웃을 생성합니다.

매개변수:
- **Max Texture Size**: 출력 아틀라스 페이지의 최대 너비/높이.
- **Padding**: 각 스프라이트 사이의 픽셀 거리.
- **Scale**: 포장 전에 모든 스프라이트의 크기를 조정합니다.
- **Power of Two**: 출력 아틀라스 치수가 2의 거듭제곱(예: 1024, 2048)이 되도록 강제합니다. 일부 플랫폼에서 필요합니다.
- **Allow Rotation**: 더 나은 포장 효율성을 위해 스프라이트를 90도 회전할 수 있습니다.

Atlas Viewer

언팩 전에 아틀라스 구조를 점검하기 위한 경량 시각화 및 분석 도구.

목적: 무거운 언팩 작업 없이 아틀라스 페이지와 영역을 빠르게 미리 볼 수 있게 합니다. 아틀라스 구조를 검증하고 미사용 영역을 식별하는 데 도움됩니다.

사용법: InputNode의 'atlas_project' 출력을 'atlas' 입력에 연결하세요. 옵션으로 'original_json_out'을 'json' 입력에 연결해 영역 사용량을 분석할 수 있습니다.

기능:
- 영역 경계를 포함한 아틀라스 페이지 시각적 미리보기
- 영역 강조 표시: 녹색 = 사용됨, 빨간색 = 스켈레톤에서 미사용
- 페이지 탐색 컨트롤
- 전체/미사용 영역 수를 보여주는 통계

사용 사례:
- 최적화 전 빠른 아틀라스 검증
- 불필요한 리소스(미사용 영역) 식별
- 아틀라스 패킹 문제 디버깅
- 자산 구조 이해

소켓 키: atlas_project, atlas_in, atlas, json

Atlas Merger

여러 아틀라스 소스를 단일 통합 아틀라스로 결합합니다.

목적: 여러 아틀라스 프로젝트를 하나로 병합합니다.

입력:
- **atlas_inputs**: 아틀라스 프로젝트의 다중 입력 배열

출력:
- **atlas_out**: 병합된 아틀라스 프로젝트
- **merged_out**: 레거시 병합 출력
- **merged_atlas_out**: 레거시 병합 출력

사용 사례:
- 캐릭터 아틀라스와 무기 아틀라스 결합
- 기본 스프라이트와 DLC 콘텐츠 병합
- 병렬 아틀라스 처리 후 재결합

일반적인 파이프라인:
```
InputA → Unpacker → Repacker ─┐
                               ├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Repacker 전의 데이터는 개별 스프라이트입니다. Repacker 후에는 아틀라스 프로젝트가 됩니다. Atlas Merger가 아틀라스 프로젝트를 결합하고, 최종 Unpacker → Repacker 과정에서 모든 것을 하나의 통합 아틀라스로 밀도 있게 패킹합니다.

Asset Viewer

압축 해제된 아틀라스의 개별 스프라이트를 표시합니다.

목적: 아틀라스 조작을 위한 시각적 디버깅 도구입니다.

사용법: Atlas Unpacker 노드의 'sprites_data'를 받아들이고 각 추출된 이미지를 시각화하고 속성(치수, 회전 등)을 검사하며 압축 해제 후 시각적 정확성을 확인할 수 있습니다.