1

助けが必要です。私は頭を悩ませてきましたが、これらに似た形状(ライトバースト、グリマー、太陽光線など)をプログラムで生成する方法の良いコード例を見つけることができないようです.

http://www.richardrosenman.com/storage/lightburst.jpg

ここで本当に助けが必要です。似たようなものを作成するのに役立つコードを使用して、誰かがいくつかの例をオフにすることはできますか?

C++ に似た言語を使用しています。

4

2 に答える 2

2

これらはすべて、中心が明るい光の中心のように見え、移動すると、フェード (暗くなる) と拡散 (さらに広がる) の両方になります。

rフェードするには、 (距離)の関数によって最大強度からライトをスケーリングする必要があります。1/r物理的には、これはorのようなものです1/r^2が、あなたの場合、指数関数的e^(-r)または線形フェードを使用すると、より運が良くなる可能性があります1 - a*r

効果の主要な側面は拡散です。完全なレイトレーサーを構築する以外に拡散をエミュレートする最も簡単な方法は、回転軸に沿って線形ガウス ブラー(または単純な平均化ブラー) を適用することです。たとえば、r = 3、シータ = 0.5 の拡散点は、r = 3、シータ = 0.4 と r = 3、シータ = 0.6 の間の非拡散点の平均である可能性があります。ぼかし関数の「ウィンドウ」が でスケーリングされる場合、最良の効果が得られますr。つまり、 が大きいrほど、平均化ウィンドウが大きくなるか、ガウス ブラーのシグマが大きくなります。

最後に、拡散の前に、シータ変化透過関数によってビームが回転的に「フィルター処理」されたように見えます。つまり、フィルターを「逃げる」ビームの量は角度の関数です。この関数はいくらかランダム化されているように見えますが、明らかな構造があります (つまり、単純なホワイト ノイズではなく、明暗の帯)。これは、構造を持つランダム データを生成するPerlin Noiseの最適な候補です。パーリン ノイズ アルゴリズムで、この構造の細かさをカスタマイズできます。これが、あなたが示した 3 つの写真の違いです。

要約すると:

  1. まず、非分散分布を計算します。

    • f(r,theta) = 1/r (またはその他のフェージング) のフェード ボールを開始します。

    • 退色する光の球にノイズの多いフィルター関数 p(theta) を掛けます -- ただし、特定の半径を超えたポイントに対してのみ可能です (その白い球が中央にあるようにするため)。

  2. 次に、放射状に成長するぼかしウィンドウですべてを分散させます

  3. おそらく、すべてにホワイト ノイズ グレインを追加します。

これは、これらを生成する 1 つの方法にすぎないと思います。他にもあるかもしれませんが、良いスタートになるかもしれません。

于 2013-09-06T03:17:07.610 に答える