10 thủ thuật để mô phỏng chất lỏng FLIP trong Houdini tốt hơn
Houdini cung cấp một bộ công cụ mạnh mẽ cho mô phỏng chất lỏng. Tuy nhiên, thách thức lớn luôn là việc làm sao cho chất lỏng trông chân thực nhất, đặc biệt là đối với những dự án trình chiếu lớn. Trong bài viết này, hãy cùng khám phá một số thủ thuật từ họa viên đến từ FuseFX Kevin Pinga, để biết cách tạo ra các mô phỏng chất lỏng FLIP trong Houdini nhanh hơn, linh hoạt hơn.
1. Source chất lỏng bằng POP Source, không dùng FLIP Source
Có một phương pháp và cũng là mặc định để source chất lỏng cho FLIP trong Houdini là sử dụng node FLIP Source. Nó sẽ tạo một VDB được đọc bởi node Volume Source trong DOPs. Cách này hoạt động tốt khi bạn source từ một hình dạng lớn không rõ ràng; tuy nhiên, nó có thể tốn khá nhiều tài nguyên và tốn thời gian trước khi bạn chuyển sang giai đoạn mô phỏng.
Thay vào đó, bạn nên sử dụng trực tiếp SOP geometry dựa trên đa giác thông thường mà không cần chuyển đổi sang VDB. Nguồn này có thể được đọc bởi node POP Source được nối vào Sourcing input của chính FLIP solver, giống như cách bạn import source cho mô phỏng particle thông thường.
Phương pháp này trực quan hơn vì bạn đã quen với các điều khiển trên node POP Source thông qua thời gian làm việc với các particle thông thường. Bạn có thể điều khiển và giám sát particle một cách dễ dàng và độc lập với Particle Separation của chính đối tượng FLIP trong Houdini.
2. Sử dụng các POP nodes với FLIP fluids
FLIP trong Houdini về cơ bản là một loạt các POP với một số bước tăng cường volumetric ở giữa. Tuy nhiên, cơ sở của nó chỉ là các particle, có nghĩa là tất cả các nodes POP trong DOPs có thể được sử dụng cho FLIP fluids. Đây là lý do tại sao chúng ta có thể source bằng cách sử dụng node POP Source trong mẹo trước.
Node POP Force là một yếu tố chính để tạo ra chuyển động thú vị khi làm việc với các particle thông thường. Vì vậy, chúng ta cũng có thể sử dụng nó với FLIP fluids. Sử dụng nó để giới thiệu dù chỉ một lượng nhỏ noise cũng có thể tạo ra chất lỏng trông hấp dẫn hơn. Noise tần số thấp cũng có thể hữu ích để tạo ra chi tiết mà không cần phải tăng số lượng particle hoặc tách particle của bạn. (Hãy cẩn thận không nên thêm quá nhiều noise, vì điều này có thể khiến mô phỏng trông không thực tế.)
Một node POP khác khá hữu ích trong mô phỏng FLIP là POP Speed Limit. Được kết hợp với node POP Drag, nó hoạt động để kiểm soát các particle vận tốc cao rất tuyệt, mà nếu không thì có thể các particle đó sẽ vượt ra ngoài tầm kiểm soát.
3. Sử dụng Bounds qL để đặt giới hạn FLIP của bạn
Node Bounds qL là một công cụ rất hữu ích với nhiều tính năng đơn giản. Nó là một phần của bộ công cụ Houdini mã nguồn mở lớn hơn được gọi là qLib. Trong hầu hết các studio, qLib được cài đặt mặc định. Nếu nó không nằm trong môi trường sản xuất cá nhân của bạn, bạn có thể tự cài đặt bằng cách làm theo hướng dẫn trên GitHub.
Kevin Pinga chia sẻ rằng anh ấy sử dụng Bounds qL chủ yếu để đặt giới hạn volume cho các mô phỏng FLIP trong Houdini và Pyro. Đây là một bước tiến so với node Bound tiêu chuẩn vì nó bao gồm một tùy chọn để tạo giới hạn dựa trên đầu vào hoạt ảnh.
Tính năng hữu ích nhất là Output: Values checkbox, nó mở khóa các giá trị của kích thước và tâm của hộp giới hạn. Sau đó, các giá trị này có thể được sao chép vào bất kỳ tham số nào trong tab Volume Limits của FLIP solver hoặc bất kỳ hoạt động nào khác yêu cầu hộp giới hạn. Có thông tin hộp giới hạn tập trung rồi sẽ giúp tránh lỗi người dùng và giúp tạo nhiều thiết lập thủ tục hơn.
4. Kích hoạt các thuộc tính hữu ích trong FLIP solver
Có ba thông số chính trên FLIP solver mà bạn nên bật trong sim FLIP của mình: ID, age và vorticity. Chúng có thể được sử dụng để thực hiện các chỉnh sửa sau mô phỏng và tất cả đều có thể được tìm thấy trong FLIP solver bên dưới tab Behavior and Vorticity.
Hầu hết các họa viên đều đã quen thuộc với thuộc tính ID và mức độ mạnh mẽ của nó. Kích thước dữ liệu của bạn có thể bị ảnh hưởng nhỏ khi lưu vào bộ nhớ đệm một thuộc tính bổ sung, nhưng bạn nên cung cấp thông tin đó.
Bạn có thể kiểm soát diện mạo của sim theo thời gian bằng cách bật thuộc tính age qua Checkbox Age Particles (cũng xuất thuộc tính life). Điều này đặc biệt hữu ích nếu bạn có source phát ra liên tục.
Thuộc tính vorticity rất tiện lợi cho việc sourcing các mô phỏng thứ cấp như nước trắng và rất tốt cho thao tác đổ bóng.
5. Thực hiện các chỉnh sửa sau mô phỏng để cứu các sim bị lỗi
Luôn có xu hướng phụ thuộc nhiều vào kết quả cuối cùng của một mô phỏng FLIP trong Houdini. Mặc dù đây là một quy trình làm việc lý tưởng, nhưng do hạn chế về thời gian, bạn không phải lúc nào cũng có thể mô phỏng lại để khắc phục sự cố. Trong những trường hợp như thế này, việc chạy các chỉnh sửa sau mô phỏng trên chính các FLIP particle có thể giúp ‘cứu’ sim.
Bạn cũng nên thêm thuộc tính ID để có thể sử dụng nút Retime để định thời gian lại cho sim.
Pinga có nói rằng anh ấy gặp phải một vấn đề phổ biến khác khi chạy mô phỏng độ phân giải trung bình. Đó là kích thước của các giọt chất lỏng khá tốt ở các khu vực có mật độ cao của mô phỏng, nhưng quá lớn ở các khu vực thưa thớt hơn. Trong những trường hợp như thế này, có một cách đơn giản là sử dụng hàm pcfind: có thể giúp đánh dấu các khu vực thưa thớt và giảm giá trị pscale của chúng.
Dưới đây là đoạn mã được sử dụng trong wrangle:
int pc[] = pcfind(0,’P’,@P,chf(‘max_dist’),chi(‘max_pts’));
@pscale *= float(len(pc))/ch(‘max_pts’);
6. Sử dụng xyzdist để xử lý các bề mặt va chạm có độ phân giải cao
Đây là một tinh chỉnh sau mô phỏng khác. Cùng với primuv(), xyzdist() cho đến nay vẫn hữu ích nhất.
Trong context VEX hoặc VOPs, xyzdist() sẽ tính toán khoảng cách đến điểm nội suy gần nhất trên bề mặt. Khi kết hợp với primuv(), bạn có thể trích xuất bất kỳ thuộc tính nào từ các UVs tham số của đối tượng!
Trong trường hợp của ví dụ trên, chúng ta trích xuất vị trí của bề mặt va chạm có độ phân giải cao và sử dụng nó để đẩy các particle về phía bề mặt. Trong một số trường hợp, bạn cũng có thể chạy trực tiếp trên bề mặt được chia lưới, đặc biệt là trong các bức ảnh mà bề mặt va chạm có thể nhìn xuyên thấu (ví dụ: đổ chất lỏng vào một tấm kính trong). Việc kẹp khoảng cách thành một giá trị thực sự nhỏ sẽ giúp bạn tăng tốc độ tính toán.
Đây là đoạn mã được sử dụng:
//initializing variables
int p_prim;
vector p_puv;
//lấy khoảng cách và vị trí tham số của điểm gần nhất
float dist = xyzdist(1,@P,p_prim,p_puv);
vector P2= primuv(1,”P”,p_prim,p_puv);
//trộn P của các điểm, bị ảnh hưởng bởi khoảng cách được mapped
@P = fit(dist,chf(“min_dist”),chf(“max_dist”),P2,@P);
Trong sản xuất, có một cách sử dụng thực tế hơn. Đó là bạn sử dụng một collider có độ phân giải thấp hơn trong quá trình mô phỏng, sau đó chạy function này trong wrangle sau mô phỏng để làm cho chất lỏng trông giống như nó đang tương tác với một collider có độ phân giải cao.
7. Loại bỏ các particle có vấn đề với ID
Đây là một thủ thuật đơn giản nhưng hiệu quả khi bạn có một mô phỏng gần hoàn thành đến 98%, nhưng 2% particle còn lại không hoạt động. Nếu bạn đã lưu trữ thuộc tính ID được đề cập trong các mẹo trước, bạn có thể sử dụng thuộc tính đó để loại bỏ các particle có vấn đề. Nếu không có ID, bạn sẽ không thể đánh dấu các particle cần xóa vì số điểm thay đổi từ khung này sang khung khác.
Bạn có thể thực hiện điều này bằng cách chuyển sang chế độ chọn điểm và nhấn [9] trên numpad. Thao tác này sẽ hiển thị Group Selection. Để chọn theo ID, hãy nhấp vào biểu tượng bánh răng cưa và chọn Attributes > id. Giờ đây bạn có thể chỉ cần chọn các particle bạn muốn loại bỏ trong viewport và nhấn [Delete]. Node Blast sẽ được tạo tự động tham chiếu đến ID điểm thay vì số điểm.
8. Sử dụng reseeding để tăng cường các vùng thưa thớt
Trong quá trình sản xuất, đôi khi bạn sẽ gặp một vấn đề, trong đó kết xuất cuối cùng trông không chính xác vì nó không có đủ particle. Điều này là do sử dụng sim FLIP có độ phân giải trung bình.
Trong những trường hợp như thế này, bạn nên bật các thông số reseeding thay vì thay đổi sự phân tách particle của bạn. Theo mặc định, tính năng reseeding đã được bật, nhưng việc tăng thông số Surface Oversampling có thể giúp tăng số lượng particle ở các khu vực thưa thớt bằng cách rải các particle ra. Bằng cách này, bạn có thể giữ mô phỏng trông đồng đều nhưng vẫn có đủ particle để tránh việc chất lỏng được chia lưới trông không chính xác.
9. Sử dụng FLIP sim gốc trực tiếp như một element khác
Một cách truyền thống để tạo ra nước trắng là mô phỏng chất lỏng FLIP, sau đó chạy Whitewater solver trên đó. Tuy nhiên, bước thứ hai không phải lúc nào cũng cần thiết, đặc biệt đối với các chất lỏng chuyển động nhanh như nước bắn tung tóe và tia nước (hãy nghĩ đến một vòi chữa cháy bị hỏng hoặc nước phía dưới trong bồn tắm nước nóng). Ngoài ra, để có được chất lỏng trông chính xác khi chia lưới các hạt cũng khá khó khăn.
Tuy nhiên, bạn có thể lấy chính FLIP sim và kết xuất trực tiếp bằng trình đổ bóng trắng. Bạn có thể tự kết xuất các particle hoặc phát chúng thành VDB và kết xuất kết quả dưới dạng một volume.
10. Tối ưu hóa sim và bộ nhớ đệm
Một trong những thách thức với sim FLIP độ phân giải cao là xử lý lượng lớn dữ liệu mà chúng tạo ra. Một phương pháp phổ biến là xóa tất cả các thuộc tính mà bạn không cần trước khi lưu vào bộ nhớ đệm bất kỳ phần nào của mô phỏng.
Một điều khác mà bạn có thể làm để giúp giảm dung lượng bộ nhớ của mình là loại bỏ các particle bên ngoài bộ nhớ của camera. Ngoài ra, nếu bạn có geometry sẵn sàng kết xuất, bạn nên lưu nó vào bộ nhớ cache và bật checkbox Delay Load Geometry. Thay vì để Mantra nhúng geometry vào tệp IFD, thay vào đó, nó sẽ được tham chiếu đến tệp trên đĩa. Điều này sẽ giúp giảm thời gian tải và cũng giảm đáng kể thời gian tạo IFD và kích thước tệp.
Kết luận cuối cùng
Trên đây là một số thủ thuật của Kevin Pinga cho việc mô phỏng chất lỏng với FLIP trong Houdini. Các mẹo và thủ thuật này có thể giúp bạn quản lý mô phỏng chất lỏng của mình hiệu quả hơn khi cố gắng cung cấp các fluid shots một cách kịp thời, trong khi vẫn duy trì chất lượng ở mức cao.
iRender tự hào là một trong số rất ít trang trại kết xuất hỗ trợ kết xuất Houdini với cấu hình card RTX3090 mạnh mẽ. Từ RTX3090 đơn, đến RTX 3090 kép và thậm chí 4 x RTX3090, chúng tôi luôn có đủ máy và cấu hình để phục vụ dự án của bạn.
Chỉ cần 6 bước đơn giản, sau đó bạn có thể kết nối với máy chủ từ xa mạnh mẽ của chúng tôi, cài đặt Houdini và công cụ kết xuất (như Redshift, Octane, V-Ray hoặc Arnold, v.v.), thêm license của bạn rồi kết xuất/ sửa đổi dự án của bạn như ý muốn.
Không chỉ có những cấu hình mạnh mẽ, iRender còn cung cấp cho bạn nhiều dịch vụ hơn nữa. Từ NVLink cho những cảnh lớn, đến công cụ truyền tải miễn phí và tiện lợi Gpuhub sync. Giá cả tại iRender cũng rất linh hoạt với thuê theo giờ (dùng đến đâu trả tiền đến đấy), thuê theo ngày/ tuần/ tháng với mức giảm giá 10-20%. Ngoài ra, bạn sẽ có sự hỗ trợ 24/7 từ đội ngũ của chúng tôi, những người sẽ giúp bạn bất cứ khi nào bạn gặp vấn đề với dịch vụ.
Hãy xem qua một số benchmark chúng tôi đã thực hiện cho Houdini cùng Redshift và Octane:
Đăng ký tài khoản ngay hôm nay để trải nghiệm dịch vụ của chúng tôi. Hoặc liên hệ với chúng tôi qua Zalo: 0916806116 để được tư vấn và hỗ trợ.
Cảm ơn bạn & Happy Rendering!
Nguồn: cgchannel.com
*Lưu ý: tất cả hình ảnh trong bài đều được lấy từ cgchannel.com