1

私の質問は簡単に言えば、キャラクターの表面に流れる血はどのように作られているのでしょうか? こちらの動画の0:34~から紹介されています。

わかりましたので、私が調べたことについての詳細をいくつか示します (私はこの影響を数週間達成しようとしましたが、成功しませんでした): 三角形 (キャラクター メッシュの三角形) 平面と交差し、(スラッシュの) 線を描画するために各三角形の線方程式を計算します。ただし、サーフェスを滴下するために、各三角形にエッジで接続された三角形へのインデックスを保持する三角形マップを作成してみました。次に、各三角形の面に沿って重力方向に線を引きました。これは多くのプロセッサ パワーを消費し、一般に悪影響を及ぼします。しずくの厚さを増やそうとすると、さらに多くの問題が発生するため、まったく機能しません。

octree テクスチャと、表面を横切る液体の流れをシミュレートする際のそれらの使用法を調べましたが、これを実装する方法がわかりません。私が見る限り、これは重力では機能しません。

私は現在 Cg シェーダーを調べており、これが解決策であると考えています。同じチーム (Wolfire) による別のビデオを見つけました。これは、ここに示されている血のエフェクトにシェーダーを使用することを暗示しています。それがどのように行われるかの手がかりを与えてくれるかもしれないシェーダーの例を探しましたが、今のところ運がありません.

シェーダーには C# と Cg という言語を使用しています。誰かが説明などに役立つコードを提供したい場合は、どの言語でも構いません。変換を試してみます:-)

この投稿の前半で述べたように、私はこれを解決するためにかなりの時間を費やし、私の脳が傷つき始めているので、私を助けてくれた人に感謝します.

4

2 に答える 2

1

これは、Smoothed Particle Hydrodynamics などの動的流体よりもシェーダーのトリックです。

まず、上記のビデオは、非常に優れたグラフィックス プログラマー (IMO) によって作成されました。同じまたは類似の効果を得るのは簡単な作業ではないことに注意してください.

彼は、各テクセルに血液の量を保存する独自の「血液テクスチャ」を保存していると述べています。

怪我を追加するときは、傷の場所の血液量を増やします (血液マップへ)。

各フレームは、いくつかの基準を指定して血液マップを更新します。

  • 各テクセル -> 上のテクセルに血が多い場合... 現在のテクセルで血の量を増やします。

  • シェーダー内のワールド座標をチェックして、「上」にあるものを特定する必要があります。

  • ビデオと一致させたい場合は、垂直方向のギャップも確認する必要があります。滴る。

  • すべてのテクセルでの全体的な血液量を特定の分まで減らします (システムが時間の経過とともに遅くなるようにするため)。

滴る血が「水平面」に当たるとどうなる?水平面にデカールを追加しているように見えますが、これは「滴る」たびに増加します。

幸運を

編集:これは、私が作成したスライド血液のくだらない(開発時間1時間)例です...それはGLSLにあります...表示するには、適切なグラフィックカードとwebGL準拠のブラウザーが必要です。 http://glsl.heroku.com/e#6237.48

于 2013-01-24T00:15:00.020 に答える
0

これは遅すぎますが、後世のためにここに残しておきます。Wolfire の血しぶきエフェクトは、nVidia Gravity Maps サンプルの (非常に) アップグレードされたバージョンのようです。サンプルは次の場所にあります。

http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html#HLSL_BloodShader

また、GDC プレゼンテーションのスライドもここにあります。

ftp://download.nvidia.com/developer/presentations/GDC_2004/gdc2004_BloodShader.pdf

于 2015-09-16T20:24:22.737 に答える