재구성된 불꽃을 사용한 8비트 불꽃 스프라이트
fire-sprites 스킬이 이미 렌더링한 움직임이 필요합니다: 이 스킬은 평면 비디오가 아닌 moves/NAME/에 있는 몸체와 불꽃 레이어를 별도로 사용합니다. $KIT는 키트 루트입니다(이 파일에서 두 단계 위). py는 $KIT/.venv/bin/python이며, 프로젝트 디렉토리에서 실행하세요.
py $KIT/tools/retro.py # 렌더링된 모든 움직임
py $KIT/tools/retro.py "breath_*" # 또는 일부만 (이름 또는 글로브)
open retro.html
불꽃을 줄이지 않고 재구성하는 이유
불꽃 스프라이트를 축소하고 팔레트에 스냅하면 평평한 흰색 블롭이 됩니다: 카메라에서 불꽃은 흰색으로 클리핑되므로 내부에 유지할 색상이 없습니다. 대신:
- 몸체: 다운스케일, 하드 알파 가장자리, 고정 8색 피부 및 가죽 팔레트에 매핑(명도 가중치 적용으로 음영 유지), 1픽셀 어두운 윤곽선.
- 불꽃: 실제 불꽃 모양은 프레임별로 유지하지만 색상은 다시 그립니다. 픽셀이 불꽃 내부에 얼마나 깊이 있는지에 따라 7색 열 램프 단계를 선택하며, 가장자리의 어두운 빨간색에서 주황색, 노란색을 거쳐 흰색 코어까지, 단계 사이에 4x4 질서 있는 디더링을 적용합니다. 깊이는 해당 불꽃의 두께에 상대적으로 측정되므로 얇은 검 불꽃도 뜨거운 코어를, 거대한 숨결 구름도 넓은 그라데이션을 가집니다. 작은 열림 패스는 불꽃 레이어로 새어나온 얇은 벽선을 제거합니다.
retro.html은 각 움직임을 네 가지 방식으로 보여줍니다: 재구성된 불꽃과 직접 양자화, 64px 및 40px 바디 높이. 직접 버전은 퍼포머가 차이를 볼 수 있도록 제공되며, 재구성된 불꽃이 실제로 사용할 버전입니다.
애니메이션은 "on twos"(마스터 프레임 속도의 절반)로 실행되어 레트로 느낌을 주고 시트 크기를 절반으로 줄입니다.
출력물: retro/NAME_B64.png, NAME_B40.png(재구성), NAME_A64.png, NAME_A40.png(직접), 그리고 프레임 그리드, fps 및 발 앵커가 포함된 retro/atlas.json. CSS에서 정수 배수로만 최근접 이웃 스케일링(image-rendering: pixelated)하여 그립니다.
퍼포머에게 전달할 내용
결과를 설명하기 전에 먼저 살펴보세요. 일반적인 발견 사항:
- 숨결 구름은 매우 잘 읽힙니다. 다시 그리면 영상에 없는 구조를 제공합니다.
- 프레임 가장자리, 창문 또는 날아간 벽에 닿은 구름은 이 스케일에서 네모지게 나타납니다.
- 숨결의 피크에서 몸체가 거의 흰색으로 깜박이고 실루엣 프레임에서는 진한 감청색으로 매핑되는데, 이는 팔레트가 영상의 빛을 따르기 때문입니다. 불편하면 피부 톤을 고정하는 옵션을 제공하세요(아직 구현되지 않음).
외형 변경
tools/retro.py 상단의 상수를 편집하세요: BODY_PAL(몸체 팔레트, 가장 어두운 것부터), FIRE_RAMP(가장자리에서 코어까지), for B in (64, 40)의 크기, 그리고 heat = 줄의 깊이 곡선. 한 퍼포머의 모든 움직임에서 팔레트를 일관되게 유지하여 애니메이션이 서로 일치하도록 하세요.