任意の方向を向くことができる事前にレンダリングされた2Dスプライトを実装するにはどうすればよいですか?


28

Clash of Clansのようなゲームがどのように部隊をレンダリングするかをグーグルで調べましたが、実行前に3Dモデルを2Dスプライトシートに事前レンダリングし、実行時に2Dイメージをレンダリングしているようです。ただし、クラッシュオブクランの部隊は、あらゆる方向を向くことができます。

私の同様のゲームでは、アニメーションの各フレームですべての部隊タイプ(18のタイプがあります)のあらゆる方向(0-360度)のイメージを作成する場合、大量のイメージを生成する必要があります。これが他の開発者がやっていることを想像することはできませんが、実際にこれを達成するにはどうすればよいですか?


2
ちなみに、あなたが言及している手法は「ビルボード」と呼ばれています。
ウェッカルE.

回答:


45
  1. 通常、方向は360未満です。一般的なケースは8または16です。アニメーションも非常に短いです。

  2. オートメーションはあなたの友達です。Blender / 3DMax / etcスクリプトを作成して、リストからモデルをロードし、必要なすべてのフレームと方向で画像にレンダリングします。コンテンツに応じて画像にタグを付け、ゲームからそれらに対処します。

  3. アクセスを高速化するために、すべてをテクスチャアトラス(別名スプライトシート)に詰め込みます。

最終的に、数十個のスプライトができあがり、数十個のアトラスにきちんと詰め込まれます。そんなに大したことではない;)

CoCから画像を見つけることができませんでしたが、ここではキャラクターアニメーションに同じアプローチを使用したDiablo IIがあります。たとえば、Amazonの近接攻撃:

ここに画像の説明を入力してください


4
レンダリング能力/時間とストレージスペースおよびダウンロード時間のバランス。
M.ミンペン

3
「アトラス」とは何ですか?リンクはありますか?
BЈовић

7
@BЈовић「Texture Atlas」を探してください。それは非常に一般的な概念です。
Kromsterは、サポートモニカ

2
Blizzard Northの開発者によるこの手法の議論では、PCグラフィックス機能の厄介な瞬間を処理するのは奇妙な一時的な措置であり、それでも実際にはそうではなかったという結論に達したことは注目に値するかもしれません価値があることになります。それについてのインタビューがあり、最終的にすべてを再レンダリングするのに非常に時間がかかったため、一般的な結論はそれは素晴らしいアプローチではないということでした(そして彼らの次のゲームは間違いなく3Dになるでしょう)。
KRyan

1
@KRyan良い追加!D2のVPCのNPCとギアの量によるものだと思います。CoCとモバイルプラットフォームでは、バランスが異なります。
Kromsterは、モニカをサポートする

8

また、これらの画像の低解像度に留意してください。Clash of Clansで使用されているものはわかりませんが、スペースを節約するためにできることがいくつかあります。

  • 通常よりも頻繁に標準方向(N、E、S、W、NE、SE、SW、NW)に面するように軍隊の配置をバイアスし、標準方向のみに最適化できます。

  • 一部の方向のみを事前にレンダリングする複合アプローチを実行できます。フレームの間に、既存の画像と一致しない軍隊をレンダリングするか、時間を使い果たした場合は最も近い画像を使用できます。

  • 可能な場合は左/右対称を使用して、保存されているフレームの数を半分にします。

  • 歩行や休憩などの特定のアニメーションに優先順位を付けて、これらの方向とフレームをさらに保存できます。次に、保存する方向とフレームの数が少ない剣のスイングなど、他のアニメーションの優先順位を下げます(スイングの最初と最後のフレームにより多くの方向を維持することをお勧めします)。

  • 最も近い画像を使用してから引き伸ばすことで、残りの方向を偽造できます。

全体として、約18ユニット、最大8方向、約20フレーム/秒で2秒のアニメーション、平均64x64ピクセル、約2バイト/ピクセルについて話しているかもしれません。つまり、18x2x20x64x64x2 = 50 MBです。また、デバイスの機能とマップで使用されるユニットの数に基づいて、方向の数、解像度、およびフレームの数をスケーリングする場合があります。


2
また、特定のオブジェクトの近くでズームインすると、ビルボードから3Dモデルに切り替えることができます。そのため、3Dに近づき、バックグラウンドで走り回っているだけの場合は、より高速な2Dを使用します。ただし、トランジションをスムーズに処理するのは難しい場合があります。
ティムB

@TimBこれは、最終的に高解像度をレンダリングし、低解像度の画像を使用するため、特に優れています。
ピーター

2

@Kromsterの回答に加えて、画像はしばしば大幅に圧縮されることに注意してください。多くの繰り返し要素(空白の背景など)がある大きな「アトラス」画像では、圧縮が重要です。したがって、画像の最終的な「サイズ」は、個々の画像サイズの単なる乗算ではありません。


5
GPUでの圧縮の動作は、jpegでの動作とは異なり、特にClash of Clansが記述されたデバイスのモバイルGPUで動作します。en.wikipedia.org/wiki/S3_Texture_Compressionつまり、空白の背景はテクスチャ圧縮とはまったく関係ありません。
ピーター

-2

古典的な例として、疑似3D環境で2Dスプライトを使用したオリジナルのDoomをダウンロードすることをお勧めします。スプライトには8つの向きがあり(プレイヤーの視点に対して)、メモリから近づくと8種類のサイズがあります。これは非常に目立ちましたが、ゲームプレイには十分でした。クラッシュや他の等角投影ゲームでは、もちろん距離を考慮する必要はありません。


異なるサイズはありませんでした。レンダリングは、必要に応じて単純な最近傍の拡大/縮小を行いました。
R ..

@R ..訂正してくれてありがとう。プレイしてから数年が経ちました!:)
グラハム

1
申し訳ありませんが、これは「どのように実装できますか?」という質問にはまったく答えません。
Kromsterは、

@Kromsterそれで、「これをどのように実装するのですか?」と尋ねる質問に対して、私はそれを実装した古典的なゲームの簡単な概要(360の代わりに8つの角度)で質問に答えていません。 OPがClashで認識できなかったように見えるので、プレイすると簡単にわかりますか?そして、その一般的なケースと等角図の特定のケースの違いに注意してください。あなたの回答ほどではないが、質の低い回答と質問に回答しないことには違いがあることを認めます。
グラハム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.