Skip to main content
Go to Editor

위키

이 가이드는 JSON Optimizer를 빠르게 시작하는 데 도움이 됩니다. 프로젝트 로드: InputNode 를 사용하여 .json , .atlas , .png 파일을 로드하세요. 프리셋 선택(Plus 모드): Plus 모드에서는 오른쪽 패널에서 내장 프리셋(예: "Basic Fall

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

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

초보자워크플로우가이드

이 가이드는 JSON Optimizer를 빠르게 시작하는 데 도움이 됩니다. 프로젝트 로드: InputNode 를 사용하여 .json , .atlas , .png 파일을 로드하세요. 프리셋 선택(Plus 모드): Plus 모드에서는 오른쪽 패널에서 내장 프리셋(예: "Basic Fallback") 중 하나를 선택하세요. 그러면 최적화 그래프가 자동으로 구성됩니다. Free 모드에서는 최...

Read article

소켓 타입 & 데이터 흐름

소켓유형데이터연결

이 글은 노드 그래프의 소켓에서 사용되는 데이터 타입과, 어디에 무엇을 연결할 수 있는지 설명합니다. 소켓 타입 Spine Payload — 대부분의 처리 노드가 사용하는 Spine 프로젝트의 런타임 친화적 표현입니다. Atlas Project — 아틀라스 노드에서 사용하는 아틀라스 메타데이터 + 페이지 이미지입니다. Sprites — 언팩된 스프라이트 이미지/리전(Atlas Unpac...

Read article

구독 플랜 및 프리미엄 기능

구독프리미엄플러스가격

re-polish는 서로 다른 요구에 맞춘 두 가지 구독 등급을 제공합니다. 무료 플랜 ✓ 기본 노드 그래프 ✓ JSON 뷰어 ✓ 여러 트랙에서 애니메이션을 재생하고 애니메이션 간 믹스를 조절할 수 있는 타임라인 ✓ 제한된 최적화 ✓ Spine 버전: 4.2, 4.1, 4.0, 3.8, 3.7 Plus 플랜 ($5/월) ✓ 모든 무료 기능 ✓ 키, 커브, 텍스처, 스켈레톤 스케일 최적화...

Read article

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

개념손실형무손실초보자

모든 최적화 방법은 두 가지 유형으로 나뉩니다: 무손실: 이 방법들은 중복 데이터를 제거하기만 합니다... 예: Spline 최적화 노드 , CleanupNode . 손실형: 이 방법들은 애니메이션 곡선을 단순화합니다... 예: RDP 최적화 노드 , QuantizerNode . 권장: 항상 무손실 최적화부터 시작하세요. 추가적인 파일 크기 감소가 필요할 때만 손실형 방법을 사용하고,...

Read article

효율성 측정 방법

가이드메트릭통계

최적화의 효과를 이해하려면 다음 지표에 주의하세요: 파일 크기: .json 파일의 최종 크기가 최적화의 주요 목표입니다. 키프레임 수: "통계" 탭에서 각 애니메이션에서 제거된 키프레임 수를 보여주는 표와 차트를 찾을 수 있습니다. 시각적 비교: 항상 "보기" 탭을 사용하여 "이전"과 "이후" 애니메이션을 비교하세요. 손실형 최적화가 허용할 수 없는 시각적 아티팩트를 도입하지 않았는지...

Read article

보기: 컨트롤 패널

뷰어컨트롤UI

보기 탭은 캔버스 위에 조작 패널을 오버레이로 표시합니다. 세 그룹으로 나뉩니다: 애니메이션 컨트롤 애니메이션 — 재생할 Spine 애니메이션을 선택합니다. 스킨 — 적용할 스킨을 선택합니다. 속도 — 재생 속도 배율 (0.1× → 3.0×). 보기 컨트롤 보기 초기화 — 기본 카메라/레이아웃 위치로 되돌립니다. 보기 옵션 — 비교 뷰 위치를 위한 수치 오프셋: 간격 X / 간격 Y (...

Read article

보기: 성능 패널

성능FPS메모리UI

Performance 패널은 현재 재생 중인 스켈레톤(들)의 런타임 메트릭을 실시간으로 보여줍니다. 실시간 FPS — 모니터가 측정한 초당 프레임. Frame Time — 프레임당 시간(밀리초, 낮을수록 좋음). FPS chart — 최근 120개 샘플을 막대로 표시. 스켈레톤 메트릭 Visible Slots — 마지막 샘플에서 보였던 슬롯 수. Avg. Visible — 보이는 슬롯...

Read article

보기: 타임라인

viewertimelineanimationplaybackguide

타임라인 패널은 Viewer 하단에 있는 도킹 가능한 애니메이션 시퀀서입니다. 여러 트랙에 애니메이션 클립을 배치하고 재생을 제어하며 트랜지션을 미리보기할 수 있습니다. 트랙과 클립 최대 4개 애니메이션 트랙 — 각 트랙은 Spine의 trackIndex 레이어에 매핑됩니다. 상위 트랙은 하위 트랙에 블렌딩됩니다. 애니메이션 추가 — 임의의 트랙에서 + 버튼을 클릭하여 애니메이션 피커를...

Read article

보기: 레코더

viewerrecorderrecordingexportvideoguide

레코더 는 Viewer에서 Spine 애니메이션을 동영상, 애니메이션 이미지 또는 이미지 시퀀스로 캐처합니다. 녹화 모드 ⚡ Quick Record — MediaRecorder + captureStream() 을 사용한 리얼타임 캐처. WebM 출력만 가능. 빠르지만 리얼타임 프레임 레이트에 제한됩니다. 🎬 HQ Export — WebCodecs VideoEncoder + readPi...

Read article

결과 탭

결과테이블최적화

결과 탭은 상세한 최적화 결과를 보여줍니다. 결과 테이블 — JSON 최적화 결과를 변경 단위(행)로 표시합니다(예: 어떤 애니메이션/본/속성/키프레임이 수정 또는 제거되었는지). 스프라이트/아틀라스 비교 — 텍스처 최적화를 사용한 경우, 이 섹션에서 스프라이트 크기와 패킹 결과를 비교합니다. 팁: 결과 뷰로 정확히 무엇이 바뀌었는지 확인하세요.

Read article

통계 탭

통계차트메트릭

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

Read article

파이프라인 예시 (영상)

영상예시파이프라인YouTube

공식 YouTube 플레이리스트의 실제 파이프라인을 소개합니다. 전체 플레이리스트 열기 예시 Spine2D 실험 1: RDP 알고리즘으로 곡선 최적화 — Spine 2D 기본 최적화 데모: Ramer–Douglas–Peucker(RDP) 알고리즘이 중복 곡선/키 데이터를 제거해 JSON을 줄입니다. RDP는 중요한 키를 제거할 수 있으므로 항상 애니메이션을 확인하고 RDP 노드 전에 필...

Read article

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 프로젝트

Video To Png Sequence

Spine 워크플로용으로 비디오 클립을 PNG 프레임 시퀀스로 변환합니다.

이 도구는 Input 메뉴에 있는 무료 입력 도구로, 실제 제작 워크플로에 맞게 설계되었습니다. 그린 스크린용 크로마 키와 검은 배경용 언프리멀티플라이 스타일 매트 정리를 지원합니다. 출력은 payload_out 및 atlas_out으로 전달됩니다.

Picture Input

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

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

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

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

Version: 생성된 스텁 스켈레톤용 Spine JSON 버전 형식.
Blending: 생성된 어태치먼트의 블렌드 모드(노멀, 가산, 곱셈, 스크린).

Psd To Skeletons

레이어가 있는 PSD/PSB 파일을 불러와 Photoshop 장면 레이아웃을 유지하는 연결된 Spine 스켈레톤을 생성하여 정확한 프리뷰 구성을 돕습니다.

목적: 장면이 이미 Photoshop에서 구성되어 있고 그 레이어 스택을 viewer 안의 연결된 Spine 스켈레톤 세트로 바꾸고 싶을 때 사용하는 노드입니다. 보이는 각 PSD 레이어는 PSD 좌표를 기준으로 배치된 이미지형 스켈레톤이 되므로 preview 구성과 오브젝트의 정확한 배치가 훨씬 쉬워집니다.

Viewer workflow: 생성 후에도 viewer에서 draw order를 변경하고 가져온 PSD 레이어 사이에 다른 스켈레톤을 배치할 수 있으므로, 추가 Spine 캐릭터나 props를 Photoshop 컴포지션 안에 자연스럽게 끼워 넣을 수 있습니다.

사용 가능 범위: 무료 노드입니다. 이 노드는 독립형이며 graph socket을 노출하지 않습니다.

Version: 생성된 레이어 스켈레톤에 사용하는 Spine JSON 버전 형식입니다.
Blending: 생성된 attachment에 사용하는 블렌딩 모드입니다.
Load PSD: PSD/PSB 선택기를 열고 선택한 파일에서 연결된 레이어 스켈레톤을 생성합니다.
File Info: 현재 로드된 PSD/PSB 파일의 읽기 전용 요약입니다.
Layer Count: 연결된 스켈레톤으로 변환될 보이는 레이어 수의 읽기 전용 카운트입니다.
Preflight: 생성 전에 감지된 레이어 이름 문제에 대한 읽기 전용 보고서입니다.

Project Input

Spine 프로젝트 폴더 또는 아카이브를 그래프에 로드하고, 하위 프로젝트 인식 노드가 사용할 수 있도록 project_out 소켓을 통해 ProjectPayload를 노출합니다.

목적: 프로젝트 기반 워크플로의 진입점입니다. Spine 프로젝트 폴더 또는 아카이브를 스캔하고 ProjectPayload를 생성하며, Project Viewer, 필터, Static Bake, Deduplicator 같은 하위 노드에서 쓸 캐시된 메타데이터를 유지합니다.

컨트롤:
- **Load Folder**: File System Access API를 통해 시스템 폴더 선택기를 열고, 선택한 디렉터리를 스캔하고, 요약을 업데이트하고, 메타데이터를 캐시하고, 이후 변경을 다시 스캔할 수 있도록 file watcher를 시작합니다.
- **Browse (Fallback)**: **showDirectoryPicker()** 가 없는 브라우저를 위해 숨겨진 **webkitdirectory** input을 사용합니다. 프로젝트는 로드되지만 지속적인 디렉터리 handle이 없어서 live watching과 신뢰할 수 있는 rescan은 사용할 수 없습니다.
- **Load Archive**: **.zip** 또는 **.spine** 아카이브를 가상 프로젝트 트리로 로드합니다. 아카이브 기반 프로젝트는 디렉터리 handle을 유지하지 않으므로 **Rescan** 은 설계상 사용할 수 없습니다.
- **Rescan**: 디렉터리 handle을 사용할 수 있을 때 이전에 로드한 폴더를 다시 스캔합니다. 스캔 전에 읽기 권한을 다시 확인합니다. fallback browse 또는 archive 모드로 로드한 프로젝트는 보통 로드된 디렉터리가 없다고 표시합니다.
- **Clear Project**: 파일 감시를 중지하고 현재 payload, 요약, execution cache, 캐시된 payload 메타데이터를 비웁니다.
- **Reset to Defaults**: 일반 노드 컨트롤만 재설정합니다. 현재 프로젝트를 **언로드하지 않으며**, **Clear Project** 를 대신하지도 않습니다.
- **Drop folder or .zip here**: 폴더와 아카이브를 받아 같은 로딩 pipeline으로 보내는 drag-and-drop 진입점입니다.

출력:
- **project_out**: 스캔된 트리, 평면 파일 목록, 크기 합계, 유형 분석이 포함된 ProjectPayload로, 하위 프로젝트 인식 노드에서 사용합니다.
- **stats**: DEV 전용 진단 출력입니다。

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

Epsilon: 원래 커브에서의 최대 편차. 높은 값은 더 많은 키프레임을 제거하지만 커브 디테일이 손실될 수 있습니다.
Steep: 곡률 감도 임계값. 복잡한 커브가 직선으로 평탄화되는 것을 방지합니다.
Round Mode: 최적화된 값의 반올림 모드: 없음(원본 유지), 소수점 첫째 자리, 정수.
Golden Rule: 활성화하면 중요한 형태/면적을 가진 커브가 RDP에 의해 단순화되는 것을 방지합니다.
S Run Length: 템플릿 기반 평탄화가 활성화되기 전에 필요한 연속 표준 Spine S-곡선의 최소 개수입니다. 0으로 설정하면 이 기능이 비활성화됩니다.
S Deviation: 표준 Spine S-곡선 템플릿에서 허용되는 정규화 편차입니다(퍼밀, 0-300). 값이 낮을수록 더 정확한 일치가 필요하고, 값이 높을수록 템플릿에 가까운 연속 구간을 더 많이 평탄화합니다.

Spline

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

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

소켓 키: payload_in, payload_out, changes

Max Error: 스플라인 피팅의 최대 허용 근사 오차. 낮음 = 원본에 더 근접한 피팅.
Min Group Size: 제거 가능한 그룹을 형성하는 데 필요한 최소 연속 선형 키프레임 수.

Refit

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

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

소켓 키: payload_in, payload_out, changes

Error Tolerance: 원래 커브와 피팅된 베지어 사이의 최대 허용 편차. 낮음 = 더 정확한 일치.
Max Iterations: 커브 피팅의 최적화 반복 횟수. 더 많은 반복 = 더 나은 피팅이지만 느림.

Quantizer

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

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

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

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

Precision: 키프레임 값의 소수점 자릿수. 적음 = 파일이 작지만 정확도가 낮음.

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. **비영어 문자 정리**: 다운스트림 도구에서의 문제를 피하기 위해 이름/식별자에 포함된 비영어 문자를 치환합니다.

Remove Unused Color Tracks: 기본값에서 변경되지 않는 색상/알파 구성 요소 제거.
Remove Redundant IKRotation: IK 제약 조건에 의해 완전히 제어되는 본 회전 키프레임 제거.
Remove Redundant Path Constraint Keys: 설정 값을 복제하는 패스 제약 조건 키프레임 제거.
Sanitize Non English Characters: 본/슬롯 이름의 비ASCII 문자를 안전한 대체 문자로 교체.

Scale

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

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

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

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

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

Scale Bones: 본 위치 및 크기 스케일링.
Scale Attachments: 어태치먼트 위치 및 크기 스케일링.
Scale Animations: 애니메이션 키프레임 스케일링.
Scale Constraints: 제약 조건 매개변수 스케일링.
Scale Path: 패스 데이터 스케일링.

Schneider

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

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

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

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

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

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

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

Min Segment Size: 처리를 위한 세그먼트 내 최소 키프레임 수.

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 테스트

Warn conflicts: 페이로드 병합 충돌 시 경고 표시.

Animation Viewer

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

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

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

Show changed: 변경된 애니메이션만 표시.
Animation: 보기용 애니메이션 선택.
Target: 보기용 대상 본/슬롯.
Property: 표시할 속성(회전, 이동 등).

Project Viewer

Displays a Spine project from the project_in socket for inspection and preview without mutating the incoming data.

Deduplicator

Deduplicates atlas projects by consuming project_inputs and returning payloads, atlas_projects, original_jsons, and shared_atlas_out for canonicalized downstream workflows.

The Deduplicator node scans all atlas regions for visually identical or near-identical sprites. It merges duplicates by choosing a canonical representative and remapping references. Several thresholds control detection sensitivity for different sprite types (glow, solid, alpha). Optionally constrains the output canonical atlas dimensions. A verification pass ensures the deduplicated result is visually equivalent to the original within the specified RMSE tolerance.

Repack mode: 중복 제거 후 리패킹 모드.
Glow threshold: 글로우 효과 스프라이트 감지 임계값.
Solid threshold: 솔리드 스프라이트 감지 임계값.
Min sprite area: 분석을 위한 최소 스프라이트 면적(픽셀²).
Alpha hash threshold: 비교를 위한 알파 해시 임계값.
Verification threshold: 중복 검증 임계값.
Color rmse threshold: 중복 감지를 위한 색상 RMSE 임계값.
Constrain canonical atlas size: 정규 아틀라스 크기 제한.
Max canonical atlas width: 정규 아틀라스 최대 너비.
Max canonical atlas height: 정규 아틀라스 최대 높이.

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

Page Info: 아틀라스 페이지 치수 및 정보.
Stats: 공간 사용 통계 및 스프라이트 수.

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'를 받아들이고 각 추출된 이미지를 시각화하고 속성(치수, 회전 등)을 검사하며 압축 해제 후 시각적 정확성을 확인할 수 있습니다.

Asset select: 보기용 에셋 선택.
Pixel stats: 에셋의 픽셀 통계 표시.