スプライトアニメーションのフレームレートの選び方

「アニメーションのfpsはいくつにすべき?」という質問は、答えが1つであるかのようによく尋ねられます。実際には、動作に何種類のフレームを使うかと、そのフレームをどの速さで再生するかという、別々の2つの答えがあります。これらを混同すると、十分なフレームがあるのに動きが鈍く見えたり、高速で再生しているのに動きがぎこちなく見えたりします。

フレーム数と再生速度は別々の判断

4フレームの歩行サイクルを毎秒8フレームで再生すると、1周期は半秒です。8フレームの歩行サイクルを8fpsで再生すると、再生速度は同じでも1周期は1秒で、2倍の長さになります。フレーム数はループ内の動きの細かさを決め、再生速度はループの繰り返しの速さを決めます。細かい12フレームのサイクルでも、遅すぎて歩行に見えない場合があります。一方、粗い2フレームのサイクルでも、適切なテンポなら動作は明確に伝わります。人の動きの知覚は、細部より時間の配分を重視するためです。

実用上重要なのは、一定の制作予算では2つの調整項目がトレードオフになるからです。攻撃を4フレームしか描けなくても、悪いアニメーションが確定するわけではありません。タイミングの問題を直すのにフレームを増やす必要があると思い込まず、4フレームが正しく伝わるまで再生速度と保持時間を調整します。詳しくは後述します。

8、12、24fpsは実際にどう感じられるか

これらの数値は、ゲーム自体の描画フレームレートとは独立して、表示フレームが変わる頻度を示します。

  • 8fps — 約125msごとに新フレーム。はっきり段階的で、次が出る前に各ポーズを個別に認識できる長さがあります。滑らかというより、意図的で重みのある、またはレトロな動きです。
  • 12fps — 約83msごとの新フレーム。手描きアニメーションの伝統的な2コマ打ちで、24fps映画の1フレームおきに新しい絵を描きます。多くのゲーム動作で流れるように見える滑らかさと、少ない描画枚数を両立します。
  • 24fps — 映画と同じ約42msごとの新フレーム。段階が知覚されず完全に滑らかに見えます。同じ時間を埋めるには12fpsの約2倍の絵が必要で、同じ枚数なら半分の時間で再生します。

どれも客観的に正解ではありません。何を動かし、どんな印象を伝えたいかによるため、次の節ではゲーム全体の1つの数値でなく、動作別に説明します。

同じ歩行サイクルのフィルム状の3行。4フレームに「8 fps 粗いレトロ」、6フレームに「12 fps 標準」、12フレームに「24 fps 滑らかで流れる動き」のラベル
同じ歩行を3通りで描いた例。上の行ほど優れたアニメーションなのではなく、絵の枚数が多いことに注意してください。それは品質判断であると同時にコストでもあります。

レトロゲームが低fpsだった理由と、今はスタイルの選択である理由

ゲーム機や初期のPCが6–10fpsでアニメーションを動かしたのは、まず芸術的に選んだためではなく、厳しいメモリ上限の中で作業していたためです。フレームを追加するたびにスプライトデータが増え、キロバイト単位のカートリッジROMやシステムRAMに収める必要がありました。キャラクターを8fpsではなく24fpsで動かす制作会社は、ゲーム内の各動作に約3倍のフレーム用容量を必要とし、それが全キャラクターに掛かります。通常、その余裕はありませんでした。フレーム数の少なさは、この制約の直接の結果であり、アニメーターは限られた中で重要なフレームを選ぶのが非常に上手になりました。

現在、この制約はほぼなくなっています。2Dゲームのフレーム数を制限するのは、ストレージやメモリではありません。今8fpsを選ぶのは意図的なスタイル上の判断で、通常は当時の見た目を再現したいか、粗い段階的な動きがその絵柄に本当に合うからです。どちらの理由が自分のプロジェクトに当てはまるかを理解する価値があります。「レトロだから低fps」と「フレーム予算を使い切ったから低fps」は、まったく違う理由で同じ結果を生みますが、自由に無視できる制約は片方だけです。

動作別の推奨速度

アクション一般的なフレーム数一般的な再生理由
待機2–44–8fps呼吸やまばたきなどの微細な動きは、伝わるために速度を必要としない
歩行6–810–14fps明確なリズムが必要。遅すぎると鈍い動きや酔った動きに見えます
走行6–1014–20fps歩行と同じフレーム数でも、速いテンポで速さが伝わります
攻撃3–6不均等で、予備動作・衝撃に比重を置く衝撃は複数フレームにぼかさず、1フレームで決める必要があります
待機から警戒への遷移2–38–12fps滑らかさより、すばやく読み取りやすい状態変化が重要です

これらはルールではなく出発点です。本当の確認は、実際のゲームの大きさと速度でループを見ることだけです。アニメーションソフトの大きいプレビューで正しく見える数値でも、動く画面上でスプライトが高さ48ピクセルになると、まったく違って見えます。

長く表示するフレームと時間設定

連続画像のすべてのフレームに同じ表示時間は不要です。ホールドフレームは、パンチ前の予備動作、ジャンプの頂点、剣が当たる直前など、周囲より長く表示するポーズです。均一な速度より少し長く保持すると、速い部分の前に見る人が予備動作を認識できます。これはイージングの一種です。動きはめったに直線的でなく、時間設定もそうあるべきです。

実際には、攻撃アニメーションは一定fpsのNフレームではありません。予備動作のフレームを150ms保持し、40msずつの速い移行フレーム2枚、100ms保持する衝撃フレーム、200ms保持する回復フレームというものです。多くのアニメーションシステムが、全体の1つの速度ではなくフレームごとの表示時間を設定できるのは、このためです。ツールが固定速度にしか対応しないなら、長く表示したいフレームを複製し、1回ではなく2〜3回の更新を占めさせて、停止を近似できます。

アニメーションのfpsとゲームのfpsは別です

ゲームが60または120fpsで描画されても、スプライトアニメーションは12fpsで再生できます。これらの数値は無関係です。ゲームの描画ループは毎回フレームを描画し、アニメーションシステムはそのループ内で次のスプライトフレームへ進む頻度を決めます。通常は描画の更新ごとに進めるのではなく、経過時間を追跡し、しきい値を超えたらフレームを切り替えます。フレームレートに1つの意味しかない分野からスプライトアニメーションを始めた人は、この2つを混同しがちです。

この分離によって、カメラ移動や入力応答が滑らかな60fpsのゲームでも、スタイルとして意図的に粗い8fpsのキャラクターアニメーションを表示できます。また、ゲームの目標フレームレートを変えてもスプライトのタイミングを調整し直す必要はありません。必要になるなら、アニメーションシステムが両者を誤って結び付けています。

一般的なエンジンでの設定場所

  • Unity — Animationウィンドウのサンプルレートはクリップ全体のFPSを設定します。タイムラインの個別キーフレームは、そのレート内で停止を作るため不均等に配置できます。
  • Godot — AnimatedSprite2D および SpriteFrames アニメーションごとのfpsと、個別フレームの保持用の時間倍率を別々に設定できます。
  • カスタム/エンジン非依存 — 多くの独自スプライトアニメーターは、単一fps定数ではなく、累積時間とフレーム別の時間配列を比較します。自作なら最も柔軟な方法です。

よくある質問

歩行サイクルには十分なフレームがあるのに硬く見えます。なぜですか?

通常はフレーム数ではなくタイミングの問題です。各フレームが同じ時間で再生されていないか確認してください。実際の歩行は体重配分が不均等で、均一再生では平坦になります。足が地面に接するフレームを、足が通過するフレームより少し長く保持してみてください。

アニメーションを正しく認識できる最低フレーム数はありますか?

固定の最低数はありません。2フレームの待機中のまばたきや、2フレームの攻撃の閃光も、正しい時間設定なら明確に伝わります。重要なのはポーズの変化が動作を伝えるかで、間を何段階でつなぐかではありません。

一貫性のために、すべてのアニメーションを同じfpsにすべきですか?

必ずしもそうではありません。一貫した表現にはフレーム数やシルエットの表現を揃える利点がありますが、異なる動作は異なる速度で動くのが自然です。走行を待機と同じfpsへ強制すると、通常どちらかが不自然になります。

フレームサイズが不揃いな生成スプライトシートから切り分けた画像を、どうアニメーションにしますか?

アニメーションを組む前に、すべてのフレームに同じキャンバスサイズと一貫したピボットを持たせてください。そうしないと、外接矩形が異なるフレームは、時間設定を調整しても揺れたりずれたり見えます。まず位置、次にfpsを調整します。

アニメーション用の、きれいで一貫したフレームを取得

タイミングが正しく伝わるのは、先に全フレームを一貫してトリミング・配置した場合だけです。スプライトシートスライサーのMagic Sliceはアルファチャンネルから各スプライトの内容範囲を検出し、フレームを合わせる余白を付けるので、不均一な元画像がタイミングを妨げません。すべてブラウザー内で動作します。

スプライトシートスライサーを開く