GN⁺: 아미가에서 애니메이션 "woosh" 화면 코딩
(dansalva.to)아미가에서 애니메이션 "우쉬" 화면 코딩하기
- 아미가는 1985년 출시될 당시 그래픽과 사운드의 경이로움을 선사함.
- 아미가에서 다채로운 이미지를 표시하는 것은 간단하지만, 게임 엔진의 맥락에서는 많은 도전이 있음.
도전 1: RAM 요구 사항
- 일반적인 아미가 500은 512KB의 "칩 RAM"과 512KB의 확장 RAM을 가지고 있음.
- 칩 RAM만이 그래픽과 사운드를 표시하는 데 사용될 수 있어 더 가치가 있음.
- 전체 화면 캐릭터 그래픽(CG)은 320x240 비트맵으로 32색을 사용하며, 압축되지 않은 상태에서 48KB의 RAM을 차지함.
- 자산 압축을 지원하기 위해 ZX0 압축 포맷을 추가하여 CG를 압축하면 8KB로 줄어들어 수용 가능함.
- 레벨 자산이 로드될 때 압축된 CG는 확장 RAM으로 로드되고, 표시 직전에 칩 RAM으로 압축 해제됨.
- 48KB의 칩 RAM을 찾는 대신, 다른 화면 메모리 부분을 재사용함.
도전 2: "화면 분할" 효과
- 처음에는 화면 전환을 위해 수직 와이프를 고려함.
- 그러나 그것을 멋지게 보이게 하려면, 매 스캔라인마다 색상 팔레트를 조정하는 그라데이션 와이프가 필요함.
- 화면 분할 효과는 더 쉽게 구현할 수 있으며, 일반 관람자에게 더 멋져 보임.
- 아미가의 특별한 기능 두 가지가 협력하여 이 효과를 가능하게 함:
- 코프로세서(copper)는 CPU와 병렬로 동작하며, 화면의 특정 라인에서 하드웨어 레지스터를 변경하도록 지시할 수 있음.
- 화면 메모리는 하드웨어 레지스터에서 화면 포인터를 설정함으로써 칩 RAM의 어디로든 변경될 수 있음.
도전 3: "모션 라인"
- 애니메이션 효과를 완성하기 위해서는 배경에서 "우쉬"하는 라인이 필요함.
- 스프라이트를 사용하여 라인을 그리는 것은 스크린 메모리와 독립적으로 그리고 이동할 수 있기 때문에 좋은 선택임.
- 아미가 스프라이트는 매우 제한적이고 복잡함.
스프라이트 색상
- 스프라이트는 비트플레인과 색상 팔레트를 공유하므로 가능한 적은 색상을 사용하고자 함.
- 스프라이트는 3색만 사용하며, CG에는 28색, 배경에는 1색을 남김.
- 서로 다른 스프라이트는 팔레트에서 다른 색상을 사용함.
스프라이트 그래픽 재사용
- 스프라이트 그래픽의 첫 4바이트는 스프라이트의 위치와 높이를 알려주는 "제어 비트"임.
- 여러 위치에서 동일한 그래픽을 그리고 싶을 때 이것은 문제가 됨.
- 대신 8개의 가짜 스프라이트를 만들어 제어 비트만을 가지고 스프라이트 포인터를 이 가짜 스프라이트로 설정함.
스프라이트는 비트플레인이 꺼져 있을 때 그려지지 않음
- CG가 화면 상단에 도달하기 전에는 화면 상단과 CG 시작 사이에 빈 공간이 많음.
- 이 시간 동안 비트플레인이 활성화되어 있으면, 쓰레기 데이터가 화면에 그려짐.
- 비트플레인을 비활성화하면 스프라이트도 그려지지 않음.
- 해결책은 단 1개의 비트플레인을 활성화하고 화면 포인터를 빈 데이터로 설정하는 것임.
결론
- 처음에는 RAM 요구 사항 때문에 게임에 CG를 포함시킬지 확신이 없었음.
- 데이터 압축이 구현되어 있어 오버헤드가 매우 합리적이라는 것을 증명함.
- 아미가 하드웨어의 독특한 특징을 활용하는 것이 특히 흥미로움.
GN⁺의 의견:
- 이 기사는 아미가 컴퓨터의 그래픽 처리 능력과 게임 개발 중의 메모리 최적화 기술을 잘 보여줌.
- 데이터 압축과 하드웨어의 특수 기능을 활용하여 제한된 자원 내에서 멋진 효과를 구현하는 방법을 설명함.
- 아미가와 같은 고전 컴퓨터의 하드웨어를 이해하고 활용하는 것은 레트로 게임 개발자나 컴퓨터 역사에 관심 있는 사람들에게 매우 흥미로운 주제임.
Hacker News 의견
-
"Racing the beam"에 대한 댓글 요약:
- 한 사용자는 '빔 레이싱' 기술에 대해 잘 알고 있으며, 이 기술을 사용하여 프레임당 CPU 시간을 계산했음을 회상함.
- 주소 $dff180을 사용하여 화면 가장자리에 색상을 설정했고, 이 기술을 인터넷이 아닌 구전으로 배웠음을 언급함.
- 현재도 이 칩셋을 최대한 활용하려는 사람들이 있는지 궁금해하며, 아미가 컴퓨터에 게임을 개발하는 사람들의 프로필에 대해 의문을 표함.
- 아미가에 대한 관심을 공유해준 것에 대해 감사함을 표현함.
-
Amiga 500의 메모리 구성에 대한 댓글 요약:
- 한 사용자는 Amiga 500이 기본적으로 512kB의 칩 RAM을 가지고 있었고, 많은 사용자들이 추가적인 512kB의 패스트 RAM을 확장했음을 지적함.
- 이 확장된 RAM은 그래픽 하드웨어에 직접 접근할 수 없었으며, 실제 패스트 RAM보다는 느렸음을 설명함.
-
아미가에서 일본식 콘솔 게임의 잠재력에 대한 댓글 요약:
- 한 사용자는 아미가에서 일본식 콘솔 게임이 어떻게 보일지 궁금해하며, 아미가가 성능이 부족한 것인지 아니면 단지 대부분의 게임 디자인이 마음에 들지 않았던 것인지 의문을 제기함.
- Factor 5가 만든 Bonk 게임 변환을 예로 들며, 그들이 마법사 같은 개발자였음을 칭찬함.
-
제약 조건 내에서 코딩하는 매력에 대한 댓글 요약:
- 한 사용자는 제약 조건 내에서 코딩하는 것이 매우 매력적이라고 느낌을 표현함.
-
아미가에 대한 개인적인 경험과 애니메이션 제작 방법 공유에 대한 댓글 요약:
- 한 사용자는 자신이 사용했던 아미가가 다른 사람들이 경험한 것과 다르게 느껴졌으며, 닌텐도 NES와 비교하며 그리 향수를 느끼지 않는다고 언급함.
- 그럼에도 불구하고, 이러한 애니메이션들이 어떻게 만들어졌는지 보여주는 것은 매우 멋진 일임을 인정함.