Vấn đề của nước
- Hầu hết trò chơi không cho phép chỉnh sửa địa hình, và điều đó là hợp lý. Không phải trò chơi nào cũng cần điều này.
- Trong các trò chơi có nước, cần phải cân nhắc cách xử lý dòng chảy của nước.
- Các mô hình đơn giản hiện có không đủ thỏa đáng, và cần nghiên cứu để tìm ra mô hình tốt hơn.
Thiết lập
- Mô phỏng phải hoạt động trên lưới, và tốt nhất là dùng cùng lưới với địa hình.
- Quy mô trung bình của mô phỏng nên vào khoảng 1 mét.
- Có thể giả định nước là một trường độ cao nằm trên địa hình, và không chảy theo phương thẳng đứng.
- Nước phải có thể chảy, và không được tự biến mất một cách kỳ diệu do lỗi mô phỏng.
- Mô phỏng cần có độ ổn định có thể kiểm soát và phải chạy nhanh.
Những hướng không giải quyết được vấn đề
- Smoothed Particle Hydrodynamics cho kết quả rất ấn tượng, nhưng nó giải quyết một bài toán khác.
- Stable Fluids của Jos Stam xử lý toàn bộ thể tích chất lỏng và không nhanh.
Phương trình nước nông
- Phương trình nước nông thực hiện phép trung bình theo phương thẳng đứng để còn lại các phương trình 2D.
- Phần "nông" giả định rằng kích thước thẳng đứng điển hình của cột nước nhỏ hơn rất nhiều so với quy mô theo phương ngang.
Lưới
- Trong động lực học chất lỏng, lưới là yếu tố quan trọng và thông thường người ta dùng staggered grids.
- staggered grids lưu chiều cao/mật độ nước v.v. trong các ô vuông, còn vận tốc được lưu ở các cạnh giữa các ô.
Phương pháp ống ảo
- Mô phỏng dòng chảy của nước bằng cách giả định các ô nước được nối với nhau bằng các ống ảo.
- Gồm ba bước: gia tốc dòng chảy, scale dòng chảy ra, và cập nhật cột nước.
Gia tốc dòng chảy
- Gia tốc dòng chảy dựa trên chênh lệch mực nước giữa các ô nước lân cận.
- Thêm ma sát để mô phỏng hội tụ về trạng thái ổn định.
Cập nhật cột nước
- Với mỗi ô nước, thêm hoặc bớt nước tùy theo các dòng chảy lân cận.
Scale dòng chảy ra
- Điều chỉnh dòng chảy ra để lượng nước trong ô không trở thành số âm.
Độ cao địa hình
- Thêm độ cao địa hình để nước di chuyển phía trên địa hình.
Điều kiện biên
- Cần xem xét điều gì xảy ra ở ranh giới của mô phỏng.
- Đặt các giá trị dòng chảy ở biên để xác định các điều kiện như tường, dòng vào, dòng ra, v.v.
Độ nhớt
- Thêm độ nhớt để các lớp nước mỏng khó di chuyển hơn.
Toàn bộ mã mô phỏng
- Mã mô phỏng gồm 4 vòng lặp
for trên một vài mảng 2D.
Nhược điểm của mô hình
- Không có quán tính và khuếch tán vận tốc, nên khi dòng nước nhanh chảy vào hồ, nó sẽ lan ra theo mọi hướng.
Bonus: lưới lục giác/tam giác
- Có thể mô phỏng nước bằng lưới tam giác, và có thể xem đây là đối ngẫu của lưới lục giác.
1 bình luận
Ý kiến trên Hacker News
Đề cập đến vấn đề trong mô phỏng chất lỏng khi nước tích tụ và ảnh hưởng đến các ô lân cận. Đây là một trong những lý do khiến việc song song hóa trở nên khó khăn trong các trò chơi được tạo sinh theo thủ tục
Đề cập đến nguy cơ dễ lãng phí thời gian khi phát triển mô phỏng chất lỏng vì chỉ mải ngắm kết quả đẹp mắt
Đề cập rằng cách thu thập tài nguyên trong Animal Crossing hiệu quả mà không cần thao tác địa hình
Đề cập rằng vật lý nước trong game Timberborn là một yếu tố quan trọng của trò chơi và rất đáng thử
Chia sẻ trải nghiệm thử nghiệm thuật toán được triển khai trong không gian 3D bằng o3-mini-high
Giới thiệu một mô phỏng lũ dùng cho giáo dục, sử dụng WebGL để tính giá trị ô dựa trên các ô lân cận
Đề xuất cách giải quyết vấn đề thiếu quán tính và khuếch tán vận tốc trong mô phỏng nước
Chia sẻ sự tò mò về một mô phỏng xói mòn bắt đầu như một dự án cá nhân
Đề cập ý tưởng mô phỏng nước trong game Creeper World rồi thả bom sau đó