手足を切り取ってレンダリングするキャラクター(Java / OpenGLのブレンダーモデル)


10

取り外し可能な四肢を持つことができるようにしたい場合、キャラクターアニメーションとレンダリングクラスを作成する際にどのような点を考慮する必要がありますか?私は神経系に至るまですべてを定義できる詳細な身体システムを開発しました。ドワーフフォートレスに見られるダメージの詳細レベルに似たものを目指しています。たとえば、キャラクターが上腕を損傷すると、腕全体を無効にする神経損傷の可能性があります。または、腕を完全に失う可能性があります。

このデータ部分を処理するためにシステムを作成しました。各キャラクターには、付属物と内部パーツを持つトランクがあります。各付属肢は、子付属肢と内部パーツを持つこともできます。親の付属肢が無効化/削除されている場合、子の付属肢は無効化/削除されます。無効化/削除された付属物または内部部品のいずれかが一生必要な場合、キャラクターはすぐに死亡します。

私が現在取り組んでいるのは、この描画/アニメーション部分です。アニメーションを定義して、現在の身体の状態(腕や脚がないなど)を考慮して、許可されているアニメーションを知るにはどうすればよいですか?足りない手足を描画しないように描画システムを設定するにはどうすればよいですか?各四肢/付属物は独自のモデルである必要がありますか(切断された付属物を地面に描きたい)。

移行元のシンプルなシステム(テスト用に作成したもの)は、アニメーションのすべてのキーフレームを完全なモデルとしてVBOにインポートします(キーフレームが開始/停止する場所の頂点カウントとともに)。Blenderで定義されたボーンをインポートしたり利用したりせず、フレーム間を補間しません。

これはかなり大きな質問である可能性が高いため、目的の場所にたどり着くためのリソースも探しています。

編集

必要な手足がない場合に代替アニメーションを実行するように設定したいので、アニメーションしている手足を知っているアニメーションについて質問します。それを考えた上で、アニメーションを起動する前にそのチェックを行い、その時に適切なアニメーションを起動することを想像します。

回答:


7

私は現在、同様のシステムに取り組んでいます。手続きアニメーション+解体など

どのアニメーションが身体の現在の状態を与えることが許可されているかを知るためにアニメーションを定義するにはどうすればよいですか(腕/脚がないなど)?

手足がそこにない場合、私はこのビットを完全にフォローしません。それが見られないので、それがアニメーション化されているかどうかを誰が気にしますか。

各四肢/付属物は独自のモデルである必要がありますか(切断された付属物を地面に描きたい)。

頂点ボーンウェイトを使用してこれらを動的に構築します。品質はおそらくすべての手足を手作業で行うよりも若干低くなりますが、一度行った後はすべてのモデルに適用できるため、手間がかかりません。

次のセクションからの健全なアプローチでは、はい、各手足には独自のモデルがあります。

エンティティ全体の手元に完全なモデルがあり、手足がそれぞれ切断されていると思います。

足りない手足を描画しないように描画システムを設定するにはどうすればよいですか?

2つの主要な選択肢です。最も簡単な方法は、手足を個別に描画することです。手足を結合すると、手足を削除したときに表示される「生の肉」テクスチャで通常は非表示になる追加の面があります。

2番目の選択肢は、動的に実行することです。これは、比較的単純なモデルでのみ機能します。アプローチは、ベースモデルを取り、解体したい四肢に重み付けされた頂点を見つけることです。それらの頂点を削除し、開いているセクションがわかるように、それらが接続しているものを書き留めます。次に、「生の肉」の質感を持つ三角形を使用して、開いた部分を動的に閉じます。健全なソフトウェア開発者の観点から見ると、このアプローチは良いものではなく(ランタイムモデルの変形)、「フラットな」パフォーマンス特性は少ないですが、私はそれが好きです。

最初の方法はより多くの描画呼び出しを生成しますが、それはまたもう少し親しみやすいです。

私は個人的に2番目を使用して、比較的成功していますが、すべてのモデルは非常に低ポリゴンであるため、モデルを動的に切り取り、フレーム内でVBOを再アップロードすることが今のところ可能です。

Blenderで定義されたボーンをインポートしたり利用したりせず、フレーム間を補間しません。

これは、どの頂点がどのジョイントに属しているのかをどのようにして知ることができるので、手続き的な方法で解体を行うことを本当に困難にしますか?頂点の骨の重みと分離はうまく調和しているので、この点を再考することをお勧めします。

補間に投資することもお勧めします。これがないと、アニメーションの速度を上げたり下げたりすることができず、フレームレートと連動します。つまり、アニメーションを最大限に活用できなくなります。たとえば、誰かが止まっているときなど、歩行アニメーションを遅くすることはできません。


@Michael、ありがとう。最終的に必要になることがわかっているので、補間とインポートボーンを立ち上げましたが、まだ持っていません。あなたが言ったことから、私がその点に達したら何をすべきか知っているようです。おそらく、付属肢または付属肢のグループを骨に関連付けるだけです。ボーンのインポートについて別の質問をします。
MichaelHouse

あなたは似たようなものに取り組んでいるので、おそらくあなたはこの関連する質問についてもっと情報がありますか?gamedev.stackexchange.com/q/20931/7191
MichaelHouse

5

あなたの最良のオプションは、手足を切り取り、創傷の現在の状態に応じて複数のサブモデルを使用することです。キーフレームごとにVBOを使用するアプローチは、やり過ぎです。骨格アニメーションシステムを使用し、受けたダメージに応じて異なるアニメーションを再生します(片足でリンピング、2本の足なしでクロールなど)。

Valveは、L4D2の傷と解体についてのスライドの優れたセットを公開しました。臓器や骨のモデルを使用し、カットや銃声などのテクスチャプロジェクションに基づいて「スキン」モデルをクリッピングするアプローチが本当に好きです。


面白い。これらのスライドはよく見えます。これは、付属肢全体に影響を与えなかった損傷に対しては機能するようです。
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.