Tạo mưa 2D (và Động lực học)


11

Tôi đang thử nghiệm điều kiện thời tiết trong một trò chơi của tôi và tôi rất ấn tượng với cách Star Star xử lý cơn mưa. Về cơ bản, khi mưa rơi xuống đất, nó sẽ phân tán theo chiều ngang (và được hấp thụ bởi mặt đất) hoặc tạo ra những đống nước (khi những hạt mưa rơi xuống bên trong một lỗ trên mặt đất).

Video này thể hiện rõ điều này: http://imgur.com/gallery/CKCGKbG

Tôi biết làm thế nào để mưa rơi và kiểm tra nơi nó rơi xuống đất, nhưng đó là nơi tôi bị mắc kẹt. Câu hỏi của tôi là: làm thế nào điều này có thể được tạo ra? Và làm thế nào người ta có thể mô hình hóa dòng nước một cách hoàn hảo, mà không làm giảm hiệu suất?

Cảm ơn trước!


1
Chìa khóa là hệ thống động lực học chất lỏng. Tôi nghi ngờ rằng khi một hạt mưa rơi xuống đất, nó sẽ tạo ra một lượng nước nhỏ tại vị trí đó sau đó được xử lý bởi hệ thống động lực học chất lỏng như bình thường. Trên các bề mặt phẳng, nó chống lại sự bốc hơi, nhưng khi các dốc khiến nước tập trung trong một khu vực, dòng chảy mạnh hơn sự bốc hơi và các vũng nước bắt đầu hình thành.
Philipp

Câu trả lời:


9

Hệ thống nước của Starbound thực sự là ô tô di động dựa trên nền gạch 2D. Mỗi ô trên màn hình không chứa lớp gạch phía trước, có khả năng giữ nước. Lượng nước được tính toán thông qua automata di động.

Thông tin thêm về kỹ thuật này ở đây:

http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php

http://www.jgallant.com/2d-l liquid-simulator-with-cellular-automaton-in-unity/

Đối với những giọt mưa, đó là những hạt. Họ phục vụ chủ yếu để giả rằng thực sự có nước từ trên trời rơi xuống. Nước tích tụ chỉ vì trò chơi biết rằng trời đang mưa. Những giọt riêng lẻ không liên quan gì đến sự hình thành thực tế của các hồ nước.

Cách họ lấy nó để tích lũy, là bằng cách xác định nơi có lỗ trên lớp trên cùng của mặt đất. Nếu có một khu vực có thể tích tụ nước, các tế bào trong khu vực đó sẽ tăng mức nước tương ứng.

Starbound cũng xử lý áp lực nước và kỹ thuật kết xuất của chúng khá tuyệt vời. Họ có triển khai 2D tốt nhất về vật lý mô phỏng nước bằng cách sử dụng automata di động mà tôi từng thấy.

Dưới đây là một cái nhìn nguyên thủy của một động cơ vật lý lỏng, sử dụng kỹ thuật automata di động đã đề cập ở trên. Phần kết xuất trở nên phức tạp hơn một chút, vì nước của bạn được biểu thị bằng một giá trị số.

http://www.jgallant.com/images/pressuretest.gif

Trong ví dụ này, một cải tiến rất đơn giản sẽ là ẩn các tế bào nước có ít hơn 1 đơn vị nước trong ngói nếu không có gạch đặc bên dưới nó. Nhưng sau đó, bạn đang che giấu dòng nước. Thay vì che giấu nó, bạn sẽ phải xác định nước chảy như thế nào, và sau đó rút nước phun thích hợp vào vị trí của nó.


2
Để thêm vào thực tế là các hạt mưa làm giả hiệu ứng rơi nước: các giọt nước nhỏ bắn lên bề mặt cũng không liên quan đến các hạt mưa thực tế mà là một hiệu ứng riêng biệt. Sự kết hợp làm cho nó trông giống như những giọt nước làm cho bắn tung tóe.
Felsir

Wow, đó chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng tôi sẽ phải dùng đến một số hệ thống chất lỏng quá phức tạp dựa trên các hạt, nhưng các hệ thống lưới dường như cũng hoạt động tốt. Mặc dù, để thêm áp lực nước, tôi đoán bạn chỉ cần một mảng thứ hai lưu trữ các giá trị áp suất và chảy từ áp suất cao đến những nơi có áp suất thấp? Nếu vậy, điều đó vẫn không quá khó đối với máy tính.
Pandaqi

Không, tất cả những gì bạn cần làm với áp lực, là thêm một quy tắc, chẳng hạn như một ô được phép chứa hơn 1 đơn vị chất lỏng đầy đủ. Nếu gạch đó có nhiều hơn 1 đơn vị chất lỏng đầy đủ và không thể chảy theo bộ quy tắc thông thường - thì hãy làm cho nó chảy lên trên. Điều chỉnh sao cho nó cho phép nhiều nước chảy hơn dựa trên giá trị áp suất của gạch đó.
jgallant

3

Có rất nhiều cách để tiếp cận điều này. Như mọi khi 'nó phụ thuộc'

Và vì vậy tôi đoán một cách sẽ là theo cách này .. Đưa ra một cách tùy tiện 'nhúng xuống đất' Phủ một 'hộp nước' giới hạn nó. Mặt đất và hộp nước được vẽ theo lớp để mặt đất được hiển thị trước, hộp nước sau.

mỗi khi một giọt nước rơi xuống mặt đất, hãy thêm một giọt vào hộp nước. Khi hộp nước đạt đến số ma thuật, thêm một dòng nước. Vì vậy, nói 10 giọt đất trong ngâm, điều này thêm một dòng vào hộp nước.

Vì vậy, nói rằng hộp nước là 32X32 pixel. Thêm một dòng màu nước từ 0,31- 31,31. 10 giọt nữa, vẽ một đường từ 0,30 - 31,30. Vì vậy, khi giọt tích lũy, bạn xây dựng hộp nước từ dưới lên cho đến khi đầy.

Hy vọng rằng có ý nghĩa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.