宇宙船のプラズマトレイルを作成する方法


13

似たような効果を使用する見栄えの良い宇宙ゲームをたくさん見ました。私はこれらの効果のいくつかが一般的に行われる方法を見つけることに本当に興味があります。

特に、利用可能なすべてのリソースを使用せずに、宇宙船またはミサイルの背後にあるトレイルがどのように達成されるかを知りたいと思います。

エフェクトの例については、ジンバルスクリーンショットと、同じリンクのビデオをご覧ください。また、Ether Vaporのミサイルトレイル

これらは両方とも同じテクニックですか?私は主に2Dに興味がありますが、あまりにも違うとは思いません。

それでは、このような効果をどのように作成すればよいでしょうか?私たちはピクセルシェーダー、ブレンドモード/フィルター、ビットマップ効果、パーティクルシステム、または何を話しているのですか?プラットフォーム固有ではありません。私は理論を探していますが、具体的な例やリンクは素晴らしいでしょう。そして、詳細が良いほど。

回答:


7

それでは、このような効果をどのように作成すればよいでしょうか?私たちはピクセルシェーダー、ブレンドモード/フィルター、ビットマップ効果、パーティクルシステム、または何を話しているのですか?プラットフォーム固有ではありません。私は理論を探していますが、具体的な例やリンクは素晴らしいでしょう。そして、詳細が良いほど。

上記のすべて。

あなたが彼らのソースコードを突き通さない限り、あなたは彼らがそれをどのようにしたかを正確に知らないかもしれません。

ただし、2つのゲームの外観から、どちらも船に接続されて航行するジオメトリのように見えます。基本的なポイントスプライトパーティクルシステムであるとは限りませんが、それほど難しくはありません。

一部のゲームでは曲線アルゴリズムを使用し、そこから頂点のリストを生成し、トレイルの2つのエンドポイントに異なるテクスチャを適用して少しのテクスチャリングを行います。宇宙へと続く。

プレイヤーの船は動きが予測できないため、興味深いケースです。カーブアルゴリズムの制御点を更新するか、最終的な船の位置をサンプリングして、それに基づいて頂点位置を生成する必要があるかもしれません。

見てみましょうこの回答をあなたがコントロールポイントのオフ動作する何かを持っているしたい場合は、以前の質問から。ただし、プレイヤーの位置をサンプリングすることは、ニーズに応じてはるかにうまく機能し、理解しやすくなります。

考えさせるものは次のとおりです。

プレーヤーの位置のサンプリングを開始します。これらのポイントは、トレイルのボディセグメントを形成し、そこからジオメトリを構築できます。個別のテクスチャを持つ個別のテールセグメントを保持することをお勧めします。プレーヤーが回転していることを検出し、これらのセグメントの頻度を増やすと、ブロック曲線になってしまいます。それが目的の効果でない限り:)

特定のイベントでは、セグメントは生成を停止する必要があり、既存のセグメントは、テールに最も近いボディセグメント(テール自体ではない)から開始して、ゆっくりとスケーリングを開始する必要があります。これは、プレーヤーの速度が低下した場合です。しかし、セグメントが縮小される速度がプレイヤーの船速と一致する場合、新しいセグメントは、セグメントが取り出されるとすぐに形成されます。そのため、これはフルモーションの船でもうまく機能します。トレイルの長さは常に同じです-これにより、流動性のある一貫した流れが得られます。

ヘッドセグメントは、常にプレイヤーの現在の位置にあるべきです。ターンが検出されると、既存のヘッドセグメントがボディセグメントに追加され、新しいヘッドセグメントが開始されます。繰り返す。テクスチャによっては、各セグメントの長さも最大になる場合があります。

これにより、この効果を簡単にモデル化できます。より多くのセグメントが提供されない限り、効果は常にそれ自体で減少/縮小するという考えから脱却し、収縮しないように速度で遊んでいます。


4

そのようなトレイルを作成するには、さまざまな可能性があります。単純な線、多角形、点群などを使用できます。

それらは通常、次の2つの概念のいずれかに基づいています。

  • 前の位置を追跡し、これらを使用して尾を描きます。
  • 速度/方向を追跡し、それに基づいてテールを調整します。

最初の方法はミサイルなどに適していますが、2番目の方法は何か(ドラゴンの尻尾など)に続く何かに適しています。

エンジンテールの簡単な実装はそれほど複雑ではありません。以前の位置を保存するためのバッファが必要になるだけです。どの言語を使用しているかはわかりませんが、このためにリングバッファまたは何らかの類似のバッファを使用します(端での迅速な削除と挿入)。

x番目のフレーム/更新ティックごとに(1秒に100回行う必要はありません)、基本的にバッファ内の最も古い/最後の要素をドロップし、現在位置をその先頭に追加します(バッファがいっぱいの場合のみ)。常にn個の要素が含まれていることを確認してください(nは尾の長さを決定します)。

次に、描画中に現在の位置から開始し、バッファー内のすべてのポイントを通る線のセットを描画しますが、頂点ごとに不透明度を下げます。

このようにして、きれいできれいな尻尾になるはずです。プラットフォームに基づいて、これを拡張できます。たとえば、シェーダーを使用するか、そのパスに沿って素敵なテールグラフィックをラップします。

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