ゲームアニメーションを作成する際のよくある間違い





私は最近、現在のゲームプロジェクトの開発フェーズを完了しました。データとアニメーションコードの多くの小さな欠陥を修正する必要がありました。 この種の問題は、過去のプロジェクトでよく発生しました。 少し動揺して、前に使った最も簡単なヒントとコツを書き始めました。 これらは、ゲームアニメーションの操作を開始する他の開発者にとって有用です。



安定化後のジョイスティック信号への応答



最近のゲームパッドには通常、デジタルボタンだけでなく、ジョイスティックを使用したアナログトリガーもあります。 それぞれがほぼ無限の値を出力できます。 ジョイスティックは、0〜360度の任意の角度と0〜1の偏差半径を送信できます。トリガーは、バイナリボタンに似ていますが、0〜1の正規化された値を生成できます。



キャラクターのアクションとアニメーションのキーポイントにアナログ制御を結び付けるとき、この違いを考慮することが重要です。 ユーザーは、アナログコントロールの値を0から1に変更するために一定の時間を必要とします。この範囲にさまざまなタイプのアクションをアクティブ化するために使用されるセグメントがいくつかある場合、アナログコントロールのいくつかの中間状態は、ゲームのユーザーにとって予期しないアクションを引き起こす可能性があります。



たとえば、プレイヤーは通常2つの異なる方法でジョイスティックを使用して180度回転できます(下図を参照)。









ジョイスティックの偏差を180度変更するさまざまな方法



どちらの場合も、問題が発生する可能性があります。 左側のケースでは、これはジョイスティックが元の位置を通過するためです。 ジョイスティックの位置の半径がゼロであるため、ゲームはこれをキャラクター停止アニメーションをオンにする信号と誤って解釈することがあります。 現在のプロジェクトでは、スローダウンアニメーションの一部が完了するまで停止アニメーションの中断を許可しません。そのため、ユーザーがジョイスティックを反対方向に拒否しようとしても、すぐに再び動き始めることはできません。 右側の場合、ジョイスティックの唯一の基準が円の特定のセグメント内にある場合、ゲームは90度回転しようとする場合があります。



もちろん、トリガーされたアクションまたはアニメーションをすぐに停止できる場合は、プレーヤーがアナログジョイスティックを完全に回転させた後に置き換えられ、ある程度までこの問題は無視できます。 トリガーされたアクションが中断されない場合、プレイヤーは予想される反応を得るために前のアクションの完了を待つ必要があります。 これにより、彼が入力したキーストロークを完全に無視することさえできます。



このような場合を防ぐために、ジョイスティックまたはアナログ入力の他の要素の安定化基準を入力できます。 アナログ入力の最後の数フレームから平均値を取得し、現在の値と比較できます。 したがって、アナログ入力が安定しているかどうか、およびそれを考慮する必要があるかどうかを数値的に決定します。 または、彼は急速に変化し続け、それに対する反応は延期されなければなりません。 このアプローチにより、アナログ入力を使用してトリガーアクションを生成する誤検知反応の数が大幅に削減されます。 ここでの主な欠点は、いくつかのフレームの制御の遅延です。 ただし、現在のプロジェクトの多くのキャラクターの動きでこの設定を正しい設定で使用すると、ユーザーは誰も違いに気付かないでしょう。



ブレンドをオーバーラップする十分なアニメーションフレーム



ビデオゲームの多くのキャラクターは本物のアスリートです。 彼らは高速で走り、ジャンプし、再び走り、走りながら操縦し、大きな慣性を維持することができます。 したがって、ビデオゲームでは、あるアクションから別のアクションに移動するとき、キャラクターの移行と動きの滑らかさと信頼性を維持することが非常に重要です。 滑らかさを確保する1つの方法は、動作間に余分な混合時間を追加することです。 これにより、あるアニメーションから別のアニメーションへの移行がスムーズになります。 ただし、これがうまく機能するためには、ミキシングプロセスで、完了したアニメーションまたは依存するアニメーションの更新を継続し、キャラクターの慣性に従って移動する必要があります。



アニメーションが完了するまでの動きが、このアニメーションと次のアニメーションの間のミキシングの持続時間より短い場合、ミキシングアルゴリズムは、特定の速度を持たない静的なポーズを子アニメーションとして使用します。 多くの場合、これはゲームによって速度ゼロとして解釈されます。 依存アニメーションに残されたミックスの重みに応じて、依存アニメーションがゼロ速度に急激に移行すると、移行中にキャラクターの混合速度に不連続が生じる可能性があります。









アニメーションAとBの間を移動するときにキャラクターの速度を変更します



小文字の場合、混合速度には、依存するアニメーションの速度がゼロに急激に低下するために生じる不連続性が含まれます。 上の例では、ミキシングプロセス中のキャラクターの速度は、依存するアニメーションのトランジションポイントから多数のフレームが残っているため、正確に予測されたままです。



アセットと混合するときに重要なアクションを失わないようにしてください



キャラクターによって実行されるアクションのほとんどは、準備、アクション自体、およびその完了から構成されます。 これらのセグメントの少なくとも1つを削除すると、キャラクターは不自然に見えます。 たとえば、野球選手がバックスイングなしでヒットしようとしてショットを完了したとします。 残念ながら、ビデオゲームでこのような不自然なトランジションを作成するのは簡単すぎます。



この効果は、ボールを持ったプレイヤーが絶えずドリブルし、ボールを床に当ててリバウンドでキャッチするバスケットボールゲームで非常に顕著です。 言い換えれば、彼はほとんど常にスイングして床にボールを打つか、空中で捕まえて動きを完了します。 完全を期すために、打たれたボールの各セグメントとその後続のキャプチャを完全にプレイする必要があります。そうしないと、ドリブルが不自然に見えます。 準備、アクション、完了のプロセスをスムーズに継続できるものに置き換えることができるように、各セグメントの移行に非常に注意する必要があります。 多くの場合、アニメーションの開始時に待機セグメントを含む新しいアセットに切り替えるときに問題が発生します。 トランジションブレンディングプロセスが長すぎる場合、前のアニメーションが続行されるため、プレイヤーはアニメーションのアクションの準備を確認できません。 結果として生じるゲーム内の動きはあまりリアルに見えません。



ブレンドトランジションのタイプまたは長さを動的に変更することにより、状況を改善する方法があります。 ただし、この場合の最善の方法は、現在のアニメーションがミックス内で十分な重量に達するまで、アニメーションに必要なポーズがないようにアセットを作成することにより、これらの問題を完全に回避することです。 これにより、準備、アクション、完了が画面にはっきりと表示されます。 例:バットを振る準備ができている野球選手のアニメーションをミックスし、アニメーションとの長いミックスがある場合、野球選手にアニメーションアセットでバットスイングの動き自体を早めに開始させないでください。



加算または減算ではなく、ソースモーションのスケーリング



多くの場合、キャラクターがインタラクションのために特定のポイントに到達するように、アニメーションに動きを追加する必要があります。 たとえば、キャラクターが一歩進んでドアノブに近づく。 ゲームでは、実行中にアニメーションの動きを変換しなければならないことが多く、逆運動学によりキャラクターの手をハンドルに十分近づけることができます。 この場合、アニメーション全体で一定の速度で発生する移動を追加する必要はありません。代わりに、アニメーションが移動しているときに注意し、必要な追加の移動量を考慮して移動の速度を変換する必要があります。 つまり、アニメーションの一部のセグメントでキャラクターが動かない場合、これらのセグメントに動きを追加しないでください。 そうしないと、そのような状況が発生する可能性があります。キャラクターは立つ必要がありますが、代わりにキャラクターが動き、足が床の上を滑ってしまいます。









20%の動きを加えたキャラクターの速度。 両方の破線は同じ距離をカバーしています。



上の図では、アニメーションの速度のグラフを取得します。一定の速度から始まり、静止状態まで減速します。 ゲームでは、アニメーション中にキャラクターの動きの20%を追加する必要があります。 あるケースでは、アニメーションのフレーム数に動きを追加し、各マップに均等に配分することにしました。 その結果、キャラクターは、スタンバイ状態にある場合、完了近くでもゼロ以外の速度を維持し続けます。 2番目のケースでは、速度グラフ全体を20%スケーリングするだけで、動きの20%を追加しました。 これで、モーションアニメーションの一部でキャラクターがより速く動き、アニメーションで指定されたゼロ速度で静止したままになります。



私が働いていた古いシステムの1つでは、キャラクターを次のように特定の高さまでジャンプさせました:アニメーションでは、地面から離れて着陸する時間が記録され、アルゴリズムがキャラクターが特定の高さに達するために必要な追加の変位量を計算しました。 その後、彼はこの追加の動きを地面から離れて着陸する瞬間に均等に分配しました。 基本的な動きの多くを無視したため、どの場合でもこの動きを自然にすることはできませんでした。 翌年、システムを書き直し、ジャンプに合わせてキャラクターの垂直速度を調整し始めました。 結果ははるかに自然に見えました。 これは、キャラクターがまだ上に移動していないジャンプの部分がほぼ同じままであり、キャラクターがすでに速く移動している場合にのみ速度が得られたために発生しました。 現在のアクションに関するデータに基づいて、特定のマークに合うように変更を加えることで、視覚的な結果が大幅に向上しました。



多数のアニメーションの品質管理



過去数年にわたって、私は多くのスポーツビデオゲームに取り組む機会がありました。 このタイプのゲームには興味深い複雑さがあります。彼らは現実世界の特定のアスリートの正確な動きを再現しようとします。 他のほとんどのゲームでは、1つのタイプのゲームアクションに対して1つのアニメーションしかありません。 しかし、時々、ゲームアスリートが実際のプロトタイプとより厳密に一致するように、数十の異なるバリエーションを作成する必要がありました。 そのため、大量のゲームアニメーションが表示され、各アニメーションに対して手動で実行する必要のある操作には、多くの開発時間がかかります。 新機能のために、突然、新しいタグを何百もの異なるアセットに手動で追加する必要があると想像してください。これには多くの時間がかかります。



このような状況では、データを検証し、いくつかまたはすべてのアニメーションアセットの修正スクリプトを作成できるフレームワークがあると便利です。 このようなスクリプトは、特定のルールセットに従って検証を実行し、手動検証を必要とするアセットのリストを作成し、問題を自動的に修正し、必要なアセットの特定のポイントにメタデータを追加することもできます。



通常、このようなデータの問題を事前に修正するのが最善です。 そうしないと、エラーの発生過程でエラーを修正するのに非常に長い時間がかかる可能性があります。 さらに、このようなデータエラーを修正するには、現在の作業を中断する必要があります。 原則として、データ検証スクリプトにエネルギーを費やすと、問題が発生したときに解決するよりもはるかに多くの時間を節約できます。 さらに、このようなスクリプトの実装経験を積んだことで、新しいスクリプトをより良く、より速く作成できるようになります。 スクリプトがある場合は、問題のある新しいアニメーションのすべてのアセットをすばやくダブルチェックできます。 これは、新しいアニメーションが絶えずゲームに追加される開発において非常に便利です。



あなたの意見を私と共有してください



私のヒントが、開発プロセスでの数時間の作業の節約に役立つことを願っています。 これらのヒントの少なくとも一部は、プロジェクト内のアニメーションとアニメーション遷移の数を簡単にスケーリングできる環境を作成するのに役立ちます。 これらのヒントについて何か言いたいことがある場合、またはゲームアニメーションを操作するための独自の有用な推奨事項がある場合は、jcdelannoy @ gmail.comまでご連絡ください。 よろしくお願いします!



All Articles