# 아미가에서 애니메이션 "woosh" 화면 코딩

> Clean Markdown view of GeekNews topic #13526. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13526](https://news.hada.io/topic?id=13526)
- GeekNews Markdown: [https://news.hada.io/topic/13526.md](https://news.hada.io/topic/13526.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-02-26T10:26:47+09:00
- Updated: 2024-02-26T10:26:47+09:00
- Original source: [dansalva.to](https://dansalva.to/coding-the-anime-woosh-screen-on-amiga/)
- Points: 1
- Comments: 1

## Topic Body

### 아미가에서 애니메이션 "우쉬" 화면 코딩하기

- 아미가는 1985년 출시될 당시 그래픽과 사운드의 경이로움을 선사함.
- 아미가에서 다채로운 이미지를 표시하는 것은 간단하지만, 게임 엔진의 맥락에서는 많은 도전이 있음.

### 도전 1: RAM 요구 사항

- 일반적인 아미가 500은 512KB의 "칩 RAM"과 512KB의 확장 RAM을 가지고 있음.
- 칩 RAM만이 그래픽과 사운드를 표시하는 데 사용될 수 있어 더 가치가 있음.
- 전체 화면 캐릭터 그래픽(CG)은 320x240 비트맵으로 32색을 사용하며, 압축되지 않은 상태에서 48KB의 RAM을 차지함.
- 자산 압축을 지원하기 위해 ZX0 압축 포맷을 추가하여 CG를 압축하면 8KB로 줄어들어 수용 가능함.
- 레벨 자산이 로드될 때 압축된 CG는 확장 RAM으로 로드되고, 표시 직전에 칩 RAM으로 압축 해제됨.
- 48KB의 칩 RAM을 찾는 대신, 다른 화면 메모리 부분을 재사용함.

### 도전 2: "화면 분할" 효과

- 처음에는 화면 전환을 위해 수직 와이프를 고려함.
- 그러나 그것을 멋지게 보이게 하려면, 매 스캔라인마다 색상 팔레트를 조정하는 그라데이션 와이프가 필요함.
- 화면 분할 효과는 더 쉽게 구현할 수 있으며, 일반 관람자에게 더 멋져 보임.
- 아미가의 특별한 기능 두 가지가 협력하여 이 효과를 가능하게 함:
  1. 코프로세서(copper)는 CPU와 병렬로 동작하며, 화면의 특정 라인에서 하드웨어 레지스터를 변경하도록 지시할 수 있음.
  2. 화면 메모리는 하드웨어 레지스터에서 화면 포인터를 설정함으로써 칩 RAM의 어디로든 변경될 수 있음.

### 도전 3: "모션 라인"

- 애니메이션 효과를 완성하기 위해서는 배경에서 "우쉬"하는 라인이 필요함.
- 스프라이트를 사용하여 라인을 그리는 것은 스크린 메모리와 독립적으로 그리고 이동할 수 있기 때문에 좋은 선택임.
- 아미가 스프라이트는 매우 제한적이고 복잡함.

##### 스프라이트 색상

- 스프라이트는 비트플레인과 색상 팔레트를 공유하므로 가능한 적은 색상을 사용하고자 함.
- 스프라이트는 3색만 사용하며, CG에는 28색, 배경에는 1색을 남김.
- 서로 다른 스프라이트는 팔레트에서 다른 색상을 사용함.

##### 스프라이트 그래픽 재사용

- 스프라이트 그래픽의 첫 4바이트는 스프라이트의 위치와 높이를 알려주는 "제어 비트"임.
- 여러 위치에서 동일한 그래픽을 그리고 싶을 때 이것은 문제가 됨.
- 대신 8개의 가짜 스프라이트를 만들어 제어 비트만을 가지고 스프라이트 포인터를 이 가짜 스프라이트로 설정함.

##### 스프라이트는 비트플레인이 꺼져 있을 때 그려지지 않음

- CG가 화면 상단에 도달하기 전에는 화면 상단과 CG 시작 사이에 빈 공간이 많음.
- 이 시간 동안 비트플레인이 활성화되어 있으면, 쓰레기 데이터가 화면에 그려짐.
- 비트플레인을 비활성화하면 스프라이트도 그려지지 않음.
- 해결책은 단 1개의 비트플레인을 활성화하고 화면 포인터를 빈 데이터로 설정하는 것임.

#### 결론

- 처음에는 RAM 요구 사항 때문에 게임에 CG를 포함시킬지 확신이 없었음.
- 데이터 압축이 구현되어 있어 오버헤드가 매우 합리적이라는 것을 증명함.
- 아미가 하드웨어의 독특한 특징을 활용하는 것이 특히 흥미로움.

GN⁺의 의견:
- 이 기사는 아미가 컴퓨터의 그래픽 처리 능력과 게임 개발 중의 메모리 최적화 기술을 잘 보여줌.
- 데이터 압축과 하드웨어의 특수 기능을 활용하여 제한된 자원 내에서 멋진 효과를 구현하는 방법을 설명함.
- 아미가와 같은 고전 컴퓨터의 하드웨어를 이해하고 활용하는 것은 레트로 게임 개발자나 컴퓨터 역사에 관심 있는 사람들에게 매우 흥미로운 주제임.

## Comments



### Comment 23307

- Author: neo
- Created: 2024-02-26T10:26:47+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39494227) 
- "Racing the beam"에 대한 댓글 요약:
  - 한 사용자는 '빔 레이싱' 기술에 대해 잘 알고 있으며, 이 기술을 사용하여 프레임당 CPU 시간을 계산했음을 회상함.
  - 주소 $dff180을 사용하여 화면 가장자리에 색상을 설정했고, 이 기술을 인터넷이 아닌 구전으로 배웠음을 언급함.
  - 현재도 이 칩셋을 최대한 활용하려는 사람들이 있는지 궁금해하며, 아미가 컴퓨터에 게임을 개발하는 사람들의 프로필에 대해 의문을 표함.
  - 아미가에 대한 관심을 공유해준 것에 대해 감사함을 표현함.

- Amiga 500의 메모리 구성에 대한 댓글 요약:
  - 한 사용자는 Amiga 500이 기본적으로 512kB의 칩 RAM을 가지고 있었고, 많은 사용자들이 추가적인 512kB의 패스트 RAM을 확장했음을 지적함.
  - 이 확장된 RAM은 그래픽 하드웨어에 직접 접근할 수 없었으며, 실제 패스트 RAM보다는 느렸음을 설명함.

- 아미가에서 일본식 콘솔 게임의 잠재력에 대한 댓글 요약:
  - 한 사용자는 아미가에서 일본식 콘솔 게임이 어떻게 보일지 궁금해하며, 아미가가 성능이 부족한 것인지 아니면 단지 대부분의 게임 디자인이 마음에 들지 않았던 것인지 의문을 제기함.
  - Factor 5가 만든 Bonk 게임 변환을 예로 들며, 그들이 마법사 같은 개발자였음을 칭찬함.

- 제약 조건 내에서 코딩하는 매력에 대한 댓글 요약:
  - 한 사용자는 제약 조건 내에서 코딩하는 것이 매우 매력적이라고 느낌을 표현함.

- 아미가에 대한 개인적인 경험과 애니메이션 제작 방법 공유에 대한 댓글 요약:
  - 한 사용자는 자신이 사용했던 아미가가 다른 사람들이 경험한 것과 다르게 느껴졌으며, 닌텐도 NES와 비교하며 그리 향수를 느끼지 않는다고 언급함.
  - 그럼에도 불구하고, 이러한 애니메이션들이 어떻게 만들어졌는지 보여주는 것은 매우 멋진 일임을 인정함.
