表面のダスト分布を概算する確立された方法はありますか?


8

直感的には、空気の流れが遅い場所では、ほこりが表面に付着する割合が高くなります。これは、表面にほこりの層が集まる代わりに、コーナーに多くなることを意味します-部屋/棚のコーナー、表面上のオブジェクトの配置によって形成されるコーナー、表面の凹み。

ほこりの厚さ/密度をオブジェクトからの距離に応じて減少させ、壁を含むいくつかのオブジェクトにその効果を組み合わせるだけで、現実感を増すことができます。これにより、予想される厚さの順序が自然に得られます。床のエッジには中央よりも多くのほこりがあり、エッジが交わるコーナーには、中央よりも多くのほこりがあります。ただし、順序を正しくすることによるリアリズムの増加には、比率を正しくするという問題が残っています。ほこりが多いと予想される場所にはほこりが多くありますが、必ずしも適切な量ではありません。

サーフェス上の異なるポイント間の現実的な厚さの比率を概算する確立された方法はありますか?私はこれを完全に物理的に正確にする必要はありません(塵が蓄積するのにかかる長い時間の間に環境を移動するオブジェクトを考慮する必要があります)。私は人間の目には信じられないような平均的な行動を探しています。

オンラインで検索したところ、表面へのダストの堆積をモデル化する方法ではなく、浮遊ダストの大気モデルがほとんど見つかりました。

私の試み-線形および指数分布

以下は、Python(PILフォーク)を使用したPython 3のコードで、私が試したいくつかのディストリビューションを示しています。

from PIL import Image
from math import exp


def linear(distance, scale):
    return max(0, 64 - distance * scale)


def exponential(distance, scale):
    return 64 * exp(-distance * scale)


def exponential_squared(distance, scale):
    return 64 * exp(-distance * distance * scale)


def gamma_corrected(value):
    corrected_value = int((value/255)**(1/2.2)*255)
    return corrected_value


def produce_image(image_size=(1024,1024),
                  glasses=(((100,300),90),((300,300),110)),
                  distribution=exponential,
                  scale=0.1,
                  background_level=0,
                  gamma=2.2,
                  filename='dusttest.png'
                  ):
    width, height = image_size
    pixels = []
    for y in range(height):
        for x in range(width):
            red, green, blue = pixel_value(x, y, image_size, glasses,
                                           distribution, scale,
                                           background_level
                                           )
            pixels.append((red, green, blue))

    image = Image.new('RGB', image_size, color=None)
    image.putdata(pixels)
    image.save(filename)


def pixel_value(x, y, image_size, glasses, distribution, scale,
                background_level
                ):
    width, height = image_size
    value = background_level
    value += distribution(x, scale)
    value += distribution(width-x, scale)
    value += distribution(y, scale)
    for glass in glasses:
        coords, radius = glass
        a, b = coords
        distance = ((x-a) ** 2 + (y-b) ** 2) ** 0.5 - radius
        if distance < 0:
            value = 0
            break
        value += distribution(distance, scale)
    value = 255 - gamma_corrected(value)
    return ((value, value, value))


if __name__ == '__main__':
    for scale in [0.1, 0.2, 0.4, 0.8]:
        produce_image(distribution=linear,
                      scale=scale,
                      background_level=20,
                      filename='linear-' + str(scale) + '-dusttest.png'
                      )
    for scale in [0.1, 0.05, 0.03, 0.01]:
        produce_image(distribution=exponential,
                      scale=scale,
                      background_level=0,
                      filename='exponential-' + str(scale) + '-dusttest.png'
                      )
    for scale in [0.01, 0.001, 0.0001, 0.00001]:
        produce_image(distribution=exponential_squared,
                      scale=scale,
                      background_level=0,
                      filename='exponential-squared-' + str(scale) + '-dusttest.png'
                      )

飲用グラスが置かれた白い棚の上から下を見下ろすことを想像してください。しばらくして、ガラスが取り除かれて、ほこりのない円形の領域が残り、棚の残り全体にほこりが分布します。ほこりは、メガネの位置や背面、側壁の影響を受けます。棚の前面(画像の下部)は開いていて、ほこりを増やすための壁はありません。

出力

(クリックして画像を拡大)

ダスト密度の線形減少とダストの一定のバックグラウンドレベル:

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

粉塵密度の指数関数的減少(ゼロのバックグラウンドレベル):

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

私は指数関数バージョンが現実に近いと予想し、視覚的に結果を好みます。ただし、これが十分に近いかどうかはまだわかりません。

Alan Wolfeの正規分布の提案に従ってexp(-distance ** 2)、さまざまな縮尺で画像を追加しました。

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

私もこれがとても好きですが、これと指数関数(exp(-distance))のどちらが最適かはまだわかりませんでした。

私は2つの方法でフィードバックを探しています。

  1. これらのディストリビューションのいずれかがあなたにとって正しく/自然に見えますか?私は、理想的には特定の問題/矛盾がある、より広い範囲の人間の目からの入力を求めています。
  2. これらの分布の1つを使用することを正当化する、またはより良い分布を示唆する物理的な解釈はありますか?

1
正規分布(ガウス関数)を試しましたか?これは、確率の特定の特性を使用して、物事が平均してどこにあるかを把握するために使用されるため、ここで役立つと思われます。ほこりはランダムに沈殿しますが、空気の流れが多く、裂け目が多い場所ではそれほど頻繁ではありませんが、操舵室では正しいようです。
アランウルフ

@AlanWolfe提案に感謝-私はそれに基づいていくつかの画像を追加しました。
trichoplax

指数関数は、線形または正規分布に基づくものよりも私にはよく見えますが、正確さについて何かをバックアップするための非意見の答えはありません:P
アランウルフ

ある種のセルオートマトンはどうですか?拡散ステップ、次に侵食拡散、そして侵食...
joojaa

回答:


2

SIGGRAPH 2000で公開されたペーパーフォールンスノーのコンピュータモデリングを参照してください。

この論文では、コンピュータグラフィックスの積雪と安定性の新しいモデルを紹介します。私たちの貢献は2つの主要なコンポーネントに分かれており、それぞれが地上の降雪の厚い層の外観をモデル化するために不可欠です。私たちの累積モデルは、特定の表面が受け取る雪の量を決定し、フレークフラッター、フレークダスティング、および吹雪などの現象を考慮します。粒子を上空に向かって発射して積雪量を計算し、各ソースサーフェスに独自のサンプリング密度、精度、計算時間を個別に制御させます。重要度の順序付けは、サンプリング情報を最小限に抑えながら視覚情報を最大化し、任意の時点で中断できるグローバルな結果をスムーズに改善します。雪が地面に着くと、私たちの安定性モデルは、一連の小さな同時雪崩で、物質を物理的に不安定な領域から遠ざけます。非常に急な表面、障害物、エッジ、風の通過を処理する単純な局所安定性テストを使用します。当社の安定性アルゴリズムは、小麦粉、砂、流れる水のような他の材料も処理します。

そのプロジェクトページには、説明とサンプル画像が含まれています。PDFはこちらです。

古い論文はSimulation Dust Accumulationで、1995年にIEEE Computer Graphics&Applicationsで発行されました。

この論文では、ダストのモデリング手法について説明します。経験的方法を使用して、オブジェクトの表面へのダストの蓄積の影響を視覚的にシミュレートします。まず、表面の特性である表面の傾きとべたつきに基づいて、ダスト量を予測します。この予測された量は、いくつかの外部要因に従って調整されます:風への表面の露出と他のオブジェクトによる削り取り。計算されたダスト量は、レンダリング時にノイズ関数によって最終的に摂動され、ぼやけた視覚効果を与えます。

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