2 điểm bởi GN⁺ 2025-02-08 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2025-02-08
Ý 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

    • Tạo sinh theo thủ tục phù hợp với song song hóa, nhưng trong miền vô hạn thì việc song song hóa rất khó
    • Chỉ ra rằng chủ đề này chưa được khám phá nhiều
    • Khen ngợi công trình của Nick McD, đồng thời nhắc rằng công trình của anh ấy cũng có các ràng buộc về miền do thiết kế mô phỏng
    • Đề xuất tạo sinh theo thủ tục ranh giới lưu vực nước để có thể song song hóa và mô phỏng toàn bộ lưu vực cùng một lú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

    • Chia sẻ kinh nghiệm tự triển khai động lực học chất lỏng dựa trên GPU của mình vào năm 2011
    • Giải thích rằng chất lỏng (máu) được mô phỏng 2D trên bề mặt (mô), rồi được chiếu lên lưới có tính đến trọng lực và độ dốc bề 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

    • Chặt cây để lấy gỗ, nhưng sau một lượng nhất định thì cần thời gian hồi
    • Gợi ý rằng với các trò chơi không cần thao tác địa hình, cách này có thể tốt hơn
  • Đề 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ử

    • Tìm cách chặn nước để dùng cho động cơ và đồng ruộng là một phần thiết yếu của lối chơi
  • 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

    • Nhắc rằng đã tự triển khai Perlin noise từ đầu và dùng nó để tạo địa hình
  • 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

    • Giải thích rằng việc thay đổi các giá trị mô hình có thể tạo ra hiệu ứng lớ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

    • Giải thích rằng có thể khắc phục bằng cách lấy trung bình giá trị của các mũi tên dòng chảy với các mũi tên lân cận
  • 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

    • Nhắc rằng dự án đã dừng lại vì không hiểu rõ về xói mòn
  • Đề cập ý tưởng mô phỏng nước trong game Creeper World rồi thả bom sau đó