直感的には、空気の流れが遅い場所では、ほこりが表面に付着する割合が高くなります。これは、表面にほこりの層が集まる代わりに、コーナーに多くなることを意味します-部屋/棚のコーナー、表面上のオブジェクトの配置によって形成されるコーナー、表面の凹み。
ほこりの厚さ/密度をオブジェクトからの距離に応じて減少させ、壁を含むいくつかのオブジェクトにその効果を組み合わせるだけで、現実感を増すことができます。これにより、予想される厚さの順序が自然に得られます。床のエッジには中央よりも多くのほこりがあり、エッジが交わるコーナーには、中央よりも多くのほこりがあります。ただし、順序を正しくすることによるリアリズムの増加には、比率を正しくするという問題が残っています。ほこりが多いと予想される場所にはほこりが多くありますが、必ずしも適切な量ではありません。
サーフェス上の異なるポイント間の現実的な厚さの比率を概算する確立された方法はありますか?私はこれを完全に物理的に正確にする必要はありません(塵が蓄積するのにかかる長い時間の間に環境を移動するオブジェクトを考慮する必要があります)。私は人間の目には信じられないような平均的な行動を探しています。
オンラインで検索したところ、表面へのダストの堆積をモデル化する方法ではなく、浮遊ダストの大気モデルがほとんど見つかりました。
私の試み-線形および指数分布
以下は、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つを使用することを正当化する、またはより良い分布を示唆する物理的な解釈はありますか?