2 điểm bởi GN⁺ 2023-12-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • Ghi chú và mã nguồn (GitHub) về toán học, thuật toán và các phương pháp liên quan đến việc mô phỏng chất lưu như lửa và khói theo thời gian thực

1. Mô phỏng chất lưu

  • Trước khi mô phỏng lửa, cần phải mô phỏng chất lưu
  • Nếu giả định chất lưu là không nén được và không nhớt thì bài toán sẽ được đơn giản hóa đáng kể

1.1 Động lực học chất lưu cơ bản

  • Chất lưu lấp đầy một miền DDD trong không gian, và tại thời gian ttt thì vận tốc của chất lưu là u(x,t)
  • Có thể biểu diễn trường vận tốc 2D u bằng một lưới N×N
  • Điều gì sẽ xảy ra nếu nhỏ một giọt thuốc nhuộm vào chất lưu?
  • Định nghĩa trường vô hướng ψ(x,t) biểu diễn mật độ của thuốc nhuộm, và việc nó di chuyển theo vận tốc của chất lưu được gọi là advection
  • Naive Method để tính advection là di chuyển từng điểm lưới và cập nhật điểm lưới gần nhất, nhưng cách này khó song song hóa và không ổn định

Phương trình đạo hàm riêng cho advection

  • Để suy ra advection một cách ổn định, cần một biểu thức PDE tường minh
  • Tổng khối lượng thuốc nhuộm trong miền không gian cố định WWW là ∫WψdV, và sự thay đổi khối lượng theo thời gian là ddt∫Wψ(x,t)dV
  • Theo định luật bảo toàn khối lượng, ta có ddt∫WψdV=−∫Sψu⋅ndA
  • Áp dụng định lý phân kỳ, ta được ∫W[∂ψ∂t+∇⋅(ψu)]dV=0, và với phần tử thể tích đơn vị W=dV thì suy ra ∂ψ∂t+∇⋅(ψu)=0
  • Đây là PDE tường minh mà chúng ta cần giải

Phương pháp ổn định cho advection

  • Quan sát kỹ eqn. (1), vế phải là đạo hàm theo hướng −u
  • Phương pháp này được gọi là Semi-Lagrangian advection, do Jos Stam phát minh năm 1999
  • Vì mỗi điểm lưới chỉ được cập nhật đúng một lần, nên nó rất dễ song song hóa và ổn định vô điều kiện

1.2 Phương trình Navier-Stokes

  • Chúng ta đã tìm được mô hình cho cách các thuộc tính vô hướng của chất lưu tiến hóa theo thời gian, nhưng bản thân dòng chảy của chất lưu thì sao?
  • Phương trình Navier-Stokes định nghĩa trường vận tốc u tại một điểm trong chất lưu thay đổi theo thời gian như thế nào
  • Vì giả định chất lưu là không nhớt nên μ=0, và trước mắt cũng có thể bỏ qua ngoại lực
  • Vì vậy, chỉ còn lại hai hạng: tự đối lưu (self-advection) và áp suất (pressure)
  • Nếu tính số các hạng này ở mỗi bước thời gian rồi cộng lại, ta có thể mô phỏng chất lưu

Giải áp suất

  • Không thể biết trường vận tốc mới có tuân theo ràng buộc không nén được hay không, nên hạng áp suất p phải điều chỉnh điều đó
  • Để làm vậy, cần giải phương trình Poisson
  • Để giải phương trình Poisson, có thể dùng các thuật toán lặp như phương pháp Jacobi
  • Phương pháp Jacobi có thể chạy song song trên GPU nên việc triển khai rất đơn giản

Tóm tắt: mô phỏng Navier-Stokes

  • Toán học của Navier-Stokes có thể hơi phức tạp, nhưng việc giải các phương trình để mô phỏng chất lưu có thể được tóm tắt thành một vài quy trình cập nhật chính

1.3 Giam giữ xoáy (Vorticity Confinement)

  • Việc dùng lưới để lưu trường vận tốc rất tiện lợi, nhưng khi nội suy giá trị giữa các điểm lưới sẽ phát sinh hiện tượng làm mượt số học ngoài ý muốn
  • Điều này làm các xoáy nhiễu loạn trong dòng chảy bị triệt tiêu, khiến dòng chất lưu thường trở nên quá mượt và "nhàm chán"
  • Giam giữ xoáy là quá trình khuếch đại phần xoáy bị mất đi này
  • Giam giữ xoáy được thiết kế để giải quyết trường dòng cực kỳ phức tạp của cánh quạt trực thăng
  • Độ xoáy được tính tại mỗi điểm bằng cách lấy curl của u, và để khuếch đại độ xoáy thì thêm dòng chảy tròn tại mỗi điểm

Nhiễu loạn Curl-Noise

  • Curl noise là một phương pháp tương tự giam giữ xoáy: thay vì đo và khuếch đại độ xoáy của trường vận tốc, nó dùng hàm nhiễu để tạo ra ngay từ đầu một trường độ xoáy vô hướng
  • Những chất lưu chuyển động nhanh và có độ nhiễu loạn rất cao là đối tượng hưởng lợi nhiều nhất từ giam giữ xoáy và curl noise

2. Mô phỏng lửa

  • Để mô phỏng lửa và khói, cần thêm các kênh biểu diễn nhiên liệu và nhiệt độ, rồi mô hình hóa quá trình cháy của nhiên liệu để tạo nhiệt
  • Đồng thời cũng phải xử lý việc các phần chất lưu có nhiều nhiệt sẽ bốc lên theo mô hình lực nổi nhiệt, và kết xuất ngọn lửa cho đúng

2.1 Mô hình cháy cơ bản

  • Về mặt hóa học, lửa phát sinh do phản ứng oxy hóa của vật liệu nhiên liệu, giải phóng nhiệt và ánh sáng
  • Định nghĩa trường vô hướng ρ biểu diễn mật độ nhiên liệu và trường vô hướng T biểu diễn nhiệt độ
  • Nhiên liệu cháy sẽ bổ sung nhiệt độ vào hệ thống, và nhiệt độ khuếch tán từ nơi nóng sang nơi lạnh
  • Đối lưu nhiệt được định nghĩa là sự kết hợp của hai quá trình này, và chúng ta đã có mô hình toán học để mô tả nó - advection!

Ý kiến của GN⁺:

  1. Bài viết này giải thích quy trình phức tạp để mô phỏng chất lưu như lửa và khói theo thời gian thực, một chủ đề rất quan trọng trong đồ họa máy tính và phát triển game.
  2. Với sự phát triển gần đây của GPU, các mô phỏng chất lưu phức tạp đã có thể được xử lý theo thời gian thực, góp phần tạo ra các trò chơi hấp dẫn về mặt thị giác và hiệu ứng đặc biệt trong điện ảnh.
  3. Bài viết đề cập đến các khái niệm toán học nâng cao như phương trình Navier-Stokes và giam giữ xoáy, nên cung cấp thông tin hữu ích cho các kỹ sư phần mềm mới vào nghề quan tâm đến lĩnh vực này.

1 bình luận

 
GN⁺ 2023-12-20
Ý kiến trên Hacker News
  • Với tư cách là một người có bằng tiến sĩ CFD (động lực học chất lưu tính toán), tôi phải thừa nhận rằng mình chưa từng nghe về phương pháp giam giữ xoáy hay nhiễu loạn curl-noise. Điều đó khiến tôi thực sự cảm nhận được rằng ngày nào cũng học thêm điều mới.
    • Trong CFD công nghiệp, vì phải xử lý số Reynolds cao nên việc áp dụng nhiễu để bù lại sự tiêu tán nhân tạo của phương pháp số là điều không mong muốn. Trên thực tế, nhiều người lại muốn có tiêu tán nhân tạo để ổn định các mô phỏng số Reynolds cao. Yêu cầu của lĩnh vực đồ họa máy tính tập trung nhiều hơn vào việc trông cho đúng hơn là độ chính xác vật lý.
  • Có nhắc đến mô phỏng lửa và khói cho game, cũng như mô phỏng chất lưu trên GPU. Nếu các hiệu ứng này phải chạy trong game, thì GPU chẳng phải đã rất bận rồi sao? Vừa giải bài toán CFD vừa render cùng lúc có vẻ là một khối lượng công việc rất lớn.
    • Tôi tự hỏi liệu có thể chạy các mô phỏng này trên iGPU để dGPU đảm nhận nhiều tác vụ liên quan đến render hơn hay không, hay iGPU quá yếu nên chuyển sang CPU sẽ tốt hơn.
  • Có ý kiến rằng một người khác tên là "10 Minute Physics" giải thích các chủ đề này rất hay.
  • Có một ý kiến từ người đã chuyển từ chuyên ngành toán sang kỹ sư phần mềm, nói rằng họ quan tâm đến mô phỏng CFD và muốn tìm hiểu lĩnh vực này dù đã lâu không đụng tới giải tích vectơ hay phương trình vi phân riêng phần nên kỹ năng toán đã mai một nhiều.
  • Gần đây có người xem một video triển khai mô phỏng chất lưu đơn giản và thấy nó rất thú vị.
  • EmberGen là một phần mềm đáng kinh ngạc có thể mô phỏng lửa và khói theo thời gian thực trên GPU tiêu dùng, đồng thời hỗ trợ quy trình làm việc dựa trên node nên rất dễ tạo hiệu ứng mới.
    • Quy trình làm việc đã được cải thiện để những công việc từng mất hàng giờ nay có thể hoàn thành chỉ trong vài phút.
    • Có người bày tỏ hơi thất vọng vì EmberGen không nhận được nhiều chú ý trên Hacker News. (Ý kiến từ một khách hàng hài lòng, không liên quan đến EmberGen/JangaFX)
  • Dù không phải nội dung chính của bài viết, có ý kiến cho rằng phần dẫn nhập nói rằng khi chọn mô phỏng thì phải từ bỏ quyền kiểm soát nghệ thuật và chịu một cuộc thương lượng đau đớn với lượng điều khiển thường quá tải là hơi sai lệch.
    • Với những cảnh then chốt như Balrog, họ sẽ không để mô phỏng quyết định mà muốn kiểm soát hoàn toàn từng khung hình.
    • Theo ví dụ fantasy của Tolkien, những cảnh phong cảnh như con sông uốn qua nhiều khúc quanh, có vài tảng đá và thỉnh thoảng cá nhảy lên sẽ phù hợp với mô phỏng hơn.
  • Dù có 64GB RAM, vẫn có người gặp vấn đề trang đó làm tab bị tắt hẳn.
  • Có một liên kết video đưa ra lời giải thích hay về lý do các vụ nổ trong đồ họa máy tính trông tệ.
  • Có người rất ấn tượng với template và hệ thống dựng trang của distill.pub, đồng thời tiếc rằng nó đã bị ngừng từ năm 2021 và không còn được duy trì nữa.