1 ポイント 投稿者 GN⁺ 2024-02-26 | 1件のコメント | WhatsAppで共有

Amigaでアニメーション「woosh」画面をコーディングする

  • Amigaは1985年の発売当時、グラフィックスとサウンドの驚異をもたらした。
  • Amigaで多彩な画像を表示するのは簡単だが、ゲームエンジンの文脈では多くの課題がある。

課題1: RAM要件

  • 一般的なAmiga 500は512KBの「チップRAM」と512KBの拡張RAMを備えている。
  • グラフィックスとサウンドの表示に使えるのはチップRAMだけなので、より価値が高い。
  • フルスクリーンのキャラクターグラフィック(CG)は320x240ビットマップで32色を使い、非圧縮の状態で48KBのRAMを占有する。
  • アセット圧縮を支援するためZX0圧縮フォーマットを追加し、CGを圧縮すると8KBまで減らせるため収容可能になる。
  • レベルアセットの読み込み時には、圧縮されたCGは拡張RAMに読み込まれ、表示直前にチップRAMへ展開される。
  • 48KBのチップRAMを新たに確保する代わりに、別の画面メモリ領域を再利用する。

課題2: 「画面分割」効果

  • 当初は画面切り替えのために垂直ワイプを検討していた。
  • しかし見栄え良くするには、各スキャンラインごとにカラーパレットを調整するグラデーションワイプが必要になる。
  • 画面分割効果のほうが実装しやすく、一般の観客にもより格好よく見える。
  • Amigaの特別な機能2つが連携して、この効果を可能にしている:
    1. コプロセッサ(copper)はCPUと並列に動作し、画面上の特定のラインでハードウェアレジスタを変更するよう指示できる。
    2. 画面メモリは、ハードウェアレジスタで画面ポインタを設定することで、チップRAM内のどこへでも切り替えられる。

課題3: 「モーションライン」

  • アニメーション効果を完成させるには、背景で「woosh」するラインが必要だ。
  • スプライトを使ってラインを描くのは、スクリーンメモリとは独立して描画・移動できるため良い選択だ。
  • Amigaのスプライトは非常に制限が多く、複雑でもある。

スプライトの色

  • スプライトはビットプレーンとカラーパレットを共有するため、使う色はできるだけ少なくしたい。
  • スプライトは3色だけを使い、CGには28色、背景には1色を残す。
  • 異なるスプライトはパレット内の異なる色を使用する。

スプライトグラフィックの再利用

  • スプライトグラフィックの先頭4バイトは、スプライトの位置と高さを示す「制御ビット」だ。
  • 同じグラフィックを複数の位置に描きたい場合、これは問題になる。
  • その代わりに制御ビットだけを持つ8個の偽スプライトを作り、スプライトポインタをこの偽スプライトに設定する。

ビットプレーンがオフのときスプライトは描画されない

  • CGが画面上端に到達する前は、画面上端とCG開始位置の間に大きな空白がある。
  • この間にビットプレーンが有効になっていると、ゴミデータが画面に描画されてしまう。
  • ビットプレーンを無効にすると、スプライトも描画されない。
  • 解決策は、ビットプレーンを1枚だけ有効にし、画面ポインタを空データに設定することだ。

結論

  • 当初はRAM要件のため、ゲームにCGを含めるべきか確信が持てなかった。
  • データ圧縮を実装することで、オーバーヘッドが非常に妥当であると証明された。
  • Amigaハードウェアの独特な特徴を活用することは、特に興味深い。

GN⁺の意見:

  • この記事は、Amigaコンピュータのグラフィックス処理能力と、ゲーム開発中のメモリ最適化技術をよく示している。
  • データ圧縮とハードウェアの特殊機能を活用して、限られた資源の中で印象的な効果を実現する方法を説明している。
  • Amigaのようなクラシックコンピュータのハードウェアを理解し活用することは、レトロゲーム開発者やコンピュータ史に関心のある人にとって非常に興味深いテーマだ。

1件のコメント

 
GN⁺ 2024-02-26
Hacker Newsのコメント
  • 「Racing the beam」についてのコメント要約:

    • あるユーザーは「ビームレース」技法をよく知っており、この技法を使ってフレームごとのCPU時間を計算していたことを思い出している。
    • アドレス $dff180 を使って画面端の色を設定しており、この技法はインターネットではなく口コミで学んだと述べている。
    • 今でもこのチップセットを最大限に活用しようとしている人がいるのか気にしており、Amiga向けにゲームを開発する人たちがどのようなプロフィールなのか疑問を示している。
    • Amigaへの関心を共有してくれたことに感謝を表している。
  • Amiga 500のメモリ構成についてのコメント要約:

    • あるユーザーは、Amiga 500は標準で512kBのチップRAMを搭載しており、多くのユーザーが追加で512kBのファストRAMを拡張していたと指摘している。
    • この拡張RAMはグラフィックハードウェアから直接アクセスできず、本当のファストRAMよりも遅かったと説明している。
  • Amigaにおける日本式コンソールゲームの可能性についてのコメント要約:

    • あるユーザーは、Amigaで日本式のコンソールゲームがどのように見えたのか気になっており、Amigaの性能が不足していたのか、それとも単に大半のゲームデザインが好みに合わなかっただけなのかと疑問を呈している。
    • Factor 5が手がけたBonkの移植を例に挙げ、彼らを魔法使いのような開発者だったと称賛している。
  • 制約の中でコーディングする魅力についてのコメント要約:

    • あるユーザーは、制約の中でコーディングすることにはとても強い魅力があると感じている。
  • Amigaに関する個人的な体験とアニメーション制作手法の共有についてのコメント要約:

    • あるユーザーは、自分が使っていたAmigaはほかの人たちが体験したものとは違って感じられ、Nintendo NESと比べてもそれほど懐かしさを感じないと述べている。
    • それでも、このようなアニメーションがどのように作られたのかを見せてくれるのはとても素晴らしいことだと認めている。