カスタマイズ可能な2Dキャラクターのスプライト作成をどのように処理すればよいですか?


8

ブラウザベースのMMORPGのアバターアニメーション(スプライト)を作成したいのですが。プレイヤーはキャラクターをカスタマイズすることができ、コンテンツは頻繁に変更されます(新しい武器、鎧など)。すべてのスプライトシートの作成と更新を構造的に管理するにはどうすればよいですか?

さまざまな組み合わせの量は、すべての順列を生成するだけでは機能しないほど十分に大きいです。

これはサーバーベースまたはクライアントベースにすることができますが、完全にクライアントで機能する場合は、HTML5 / CSS / Canvas / WebGLだけにしてください。


3
複数のスプライトのプレーヤーの作成+色合い
LearnCocos2D 2013

スプライトのこれらの種類の生成に関連記事:gamasutra.com/blogs/DavidYork/20161130/286500/...
MichaelHouse

回答:


14

「可能なすべてのオプションを生成せずに」これを効果的に行うには、レイヤー化アプローチを使用する必要があります...少なくとも理論的には、実際には最終的にレイヤードテクスチャを単一のスプライトに集約して描画呼び出しを削減したとしても、これについては後で詳しく説明します。

レイヤー化アプローチでは、武器やギアを持たないすべてのキャラクターにスプライトセットを用意し、各武器やギアの個々のスプライトセットをベースキャラクタースプライトの上にレンダリングして最終的な合成キャラクターを形成できるように配置します。

表示角度が少ない単純なスプライト(従来のファイナルファンタジーゲームのバトルスプライトなど)の場合、これは比較的簡単です。より複雑なスプライト(複数の面と等角投影法を備えたDiablo IIのキャラクターなど)の場合、スプライトに "ギャップ"を残す必要があるため、スプライトに "ギャップ"を残さなければならないため、武器およびアーマースプライトの構築はより困難になります。キャラクター。この問題を軽減する簡単な方法は、機器のスプライトをさらに「フォアグラウンド」と「バックグラウンド」のレイヤーに分割できるようにすることです。スプライトをレンダリングするプロセスは、論理的には次のとおりです。

  1. ギアの背景レイヤーをレンダリングします(通常は武器のみ)。
  2. 基本キャラクターのスプライトをレンダリングします。
  3. ギアの前景レイヤー(通常は主に鎧)をレンダリングします。

この方法は確実ではありませんが(特に、装備可能な独立して交換可能なギアの数を増やし、レンダリングされたキャラクターにも影響を与える場合)、アーティストがコツをつかめば、ほとんどの機器で機能しますオーサリング手法の。

切り替え可能なレイヤーを備えたスプライト編集ツールは、キャラクターのリファレンスレイヤーがそれを振り回さずに空を舞う剣や杖をアニメートすることが難しいため、非常に重要です。スプライトが実際に3Dツールで作成されている場合、このパイプラインを設定する方がはるかに簡単です。

このテクニックは、上記のバニラ形式で使用できます。ただし、これは、画面上の文字ごとの描画呼び出しの数を大幅に増やすことを意味することに注意してください。これは、一度に多くの文字が画面に表示される可能性を少なくとも考慮しなければならないMMOで深刻な問題になる可能性があります。時間。

組み合わされたレイヤーレンダーを単一のスプライトシートにベイク処理することは、この問題に対処するための便利なツールです。ディスクに保存したり、メモリにキャッシュしたりできるテクスチャに対して、上記のレンダリング手順を実行するコードが必要です。こうすることで、プレーヤーがギアを切り替えるたびに、増加したレンダリングコストを一度支払うことができますが、その最初のレンダリングの後は、後続のすべてのフレームにベイクされた複合テクスチャシートの使用に切り替えます。

実行時の効率を最大化するには、キャラクターとギアのすべてのスプライトシートが正確に揃っていることを確認してください。これにより、個々のフレームではなくシート全体をレンダリングできます。オフラインビンパッキングのさまざまな形式を使用して、シート上のスプライトのレイアウトを最大化し、テクスチャ圧縮を使用してオフラインスペースを節約できます。

ゲームのコンテンツビルド中にこの手法を利用することもできます。NPCなどの固定ギアを持つキャラクターをプリベイクして、実行時間を節約できます(特に頻繁に表示されるキャラクターの場合)。

また、近くにいる他のプレーヤーのベースキャラクタータイプと装備されたギアをすべてのプレーヤーに報告する方法として、ゲームを確認して、近くのプレーヤーが最終的に来るときにクライアントのマシンで先制的に合成を実行できるようにする必要があります。ローカルプレーヤーのビューに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.