Theo trực giác, bụi lắng xuống các bề mặt với tốc độ cao hơn ở những khu vực có luồng không khí chậm hơn. Điều này có nghĩa là thay vì một bề mặt tập hợp một lớp bụi đồng đều, sẽ có nhiều hơn ở các góc - góc của một căn phòng / kệ, các góc được hình thành bởi sự đặt các vật thể trên một bề mặt, các vị trí trên bề mặt.
Tôi có thể tăng sự chân thực chỉ bằng cách làm giảm độ dày / mật độ của bụi với khoảng cách từ một vật thể và kết hợp hiệu ứng đó cho một số vật thể bao gồm cả các bức tường. Điều này tự nhiên đưa ra thứ tự độ dày dự kiến - các cạnh của sàn có nhiều bụi hơn so với trung tâm, các góc mà các cạnh gặp nhau có nhiều bụi hơn là trung tâm của các cạnh. Tuy nhiên, sự gia tăng của chủ nghĩa hiện thực từ việc đặt hàng đúng vẫn để lại vấn đề làm cho tỷ lệ đúng. Có nhiều bụi ở những nơi bạn mong đợi có nhiều bụi hơn, nhưng không nhất thiết phải đúng số lượng nhiều hơn.
Is there an established method of approximating a realistic ratio of thickness between different points on a surface? I don't need this to be completely physically accurate (that would need to take into account objects that move through the environment during the long period taken for dust to accumulate). I'm just looking for average behaviour that will look believable to the human eye.
Khi tìm kiếm trực tuyến, tôi hầu như đã tìm thấy các mô hình khí quyển cho bụi lơ lửng, thay vì cách mô hình lắng đọng bụi trên bề mặt.
Nỗ lực của tôi - phân phối tuyến tính và cấp số nhân
Dưới đây là một số mã trong Python 3 sử dụng gối (ngã ba PIL) thể hiện một vài bản phân phối mà tôi đã thử nghiệm:
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'
)
Hãy tưởng tượng nhìn từ trên cao xuống một cái kệ màu trắng có đặt ly uống nước trên đó. Một thời gian sau, kính được tháo ra để lại các vùng hình tròn không có bụi và phân phối bụi trên phần còn lại của kệ. Bụi bị ảnh hưởng bởi các vị trí của kính và các bức tường phía sau và bên. Mặt trước của kệ (dưới cùng của hình ảnh) là mở, không có tường để tăng bụi.
Đầu ra
(Bấm vào để xem hình ảnh lớn hơn)
Giảm tuyến tính mật độ bụi cộng với mức bụi không đổi của nền:
Giảm theo cấp số nhân mật độ bụi (mức nền bằng 0):
Tôi dự kiến phiên bản theo cấp số nhân sẽ gần với thực tế hơn và tôi thích kết quả một cách trực quan hơn. Tuy nhiên, tôi vẫn không biết điều này có đủ gần không.
Theo đề xuất của Alan Wolfe về phân phối bình thường, tôi cũng đã thêm hình ảnh bằng exp(-distance ** 2)
nhiều tỷ lệ khác nhau.
Tôi cũng khá thích điều này, nhưng tôi vẫn không thể đoán được cái nào trong số này và hàm mũ ( exp(-distance)
) là tốt nhất.
Tôi đang tìm kiếm phản hồi theo hai cách:
- Có bất kỳ phân phối nào trông đúng / tự nhiên với bạn không? Tôi muốn đầu vào từ một phạm vi rộng hơn của mắt người, lý tưởng với các vấn đề / sự không nhất quán cụ thể.
- Có một giải thích vật lý nào có thể biện minh cho việc sử dụng một trong những phân phối này, hoặc điều đó sẽ gợi ý một cách phân phối tốt hơn?