Houdini Volume Và Vì Sao OpenVDB Nhanh Khi Simulation

Nhân tiện giải thích về OpenVDB trong Houdini vì sao nhanh hơn Volume native của hãng và cũng thực tế là OpenVDB trong Houdini cũng giúp simulation nhanh hơn cả volume hay OpenVDB của các phần mềm khác.
Ngoài việc OpenVDB được SideFX triển khai một team rất cẩn thận làm việc thì việc xem VFX/Animation đã là phần lõi của hãng từ ban đầu nên việc này luôn được hãng tối ưu liên tục làm sao nhanh nhất cho người dùng sử dụng. Hiểu nhanh ở đây là nhanh theo kiểu simulation.

Volume native

là dạng có sẵn trong Houdini chứa các giá trị kiểu số (numeric) vào trong một khối dữ liệu lớn (thường được hiểu là domain – như một số bạn làm FumeFX, PhoenixFD, Realflow), khối dữ liệu này sẽ được tinh chỉnh, thay đổi gọi là shaping (thay đổi hình dạng) và được đưa vào trong phần Dynamic Operator. Tuy nhiên về bản chất gốc, domain này luôn có dữ liệu cho dù mới khai báo, và chưa có gì trong đó, nên bộ nhớ luôn trong tình trạng có sẵn. Cũng như PhoenixFX hay FumeFX hiện nay khi thể hiện một vật di chuyển thì domain phải đủ lớn để bao trùm. Tức data về art direction = 0 bạn vẫn đang có 1 domain tự cày data chiếm sẵn dung lượng.

Phần tài liệu của Houdini về VOLUME: https://www.sidefx.com/docs/houdini/model/volumes.html

OpenVDB

thì khác, nó ghi nhận dữ liệu chỉ khi nào nó có dữ liệu và tất cả những vị trí nào không có dữ liệu sẽ ghi nhận là không có chứ không phải là một loại dữ liệu đại diện cho không có. Nên nhớ trong công nghệ thông tin, khi ghi có là 1 và 0 là không, tuy nhiên ở dạng hiển thị dữ liệu này thì 0 vẫn là có dữ liệu. Dữ liệu numeric là dạng dữ liệu như file hình trắng đen làm mask alpha – trắng có (1), đen không (0). Như vậy dữ liệu của OpenVDB về mặt cấu trúc kỹ thuật luôn rỗng ngay từ khi bắt đầu khởi tạo, nó hoàn toàn chiếm bộ nhớ rất ít cho đến khi được artist đưa dữ liệu vào, ví dụ chuyển hóa một khối cầu thành dạng VDB, những vùng nào bị khối cầu chiếm bên trong domain (luôn là hình khối bao vật thể) thì những vị trí đó sẽ có dữ liệu.

Những khối nhỏ tạo nên khối cầu sẽ được gọi là đơn vị Voxel. Mật độ của Voxel sẽ cho biết lượng dữ liệu nhiều hay ít. Trong Houdini, hiểu ngầm thì bất cứ chiều nào của một Volume VDB lớn hơn 500 voxel sẽ được biết là rất to. Domain là một thể tích chứa Voxel. Tại vị trí nào có chứa dữ liệu sẽ được ghi có và bên trong đó là các giá trị số âm, từ bề mặt của dữ liệu ra đến vị trí viền bao của domain sẽ là dương, ngay vị trí bề mặt sẽ hiểu là numeric 0, đây gọi là SDF – Signed Distance Field. Để có thể thay đổi được (shaping) một khối hình ngay bên trong Volume thì khác với các hiệu ứng trật tự SOP là thay đổi vị trí các điểm @P, với volume VDB ta phải thay đổi vị trí của SDF, động tác này gọi là Sample, tức là sẽ tác động lên các vị trí của Voxel.

Với Volume VDB khác với môi trường các điểm, thuộc tính để tạo hiệu chỉnh sẽ tác động là dựa trên các trường FIELD. Các trường này sẽ làm việc trên một không gian ba chiều tạo ra thể tích (VOLUME), chỉ khi tác động và hiệu chỉnh các trường thì mới có hiệu ứng từ Volume VDB. Các trường này sẽ gồm có:

Scalar field (density – mật độ), đây là một float field chứa các giá trị numeric, rất phù hợp để thể hiện khói và mật độ dày đặt.

Sign distance field (SDF), thường được dùng để thể hiện dạng lỏng, nó sẽ cho biết khoảng cách tới bề mặt của chất lỏng (ngoài là số dương, bên trong là số âm, và ngay bề mặt là 0, trong Flip Fluid của Houdini nó sẽ xác định qua chiều sâu depth. Nếu bay khỏi bề mặt là spray, hơi sương, ngay bề mặt là bọt sóng, và dưới bề mặt tức sâu bên trong là bong bóng nước).

Vector field chứa giá trị vector, đây là trường đa hướng ba chiều, ví dụ màu Cd.rCd.gCd.b nhưng Houdini thể hiện theo dạng thể tích. Hay xử lý velocity field (vel.*) để tạo hiệu ứng gas (khói, lữa), mỗi vị trí cho biết hướng vá độ lớn của velocity.

Các hiệu ứng này sẽ là: khói, nước, lữa. Các loại hiệu ứng đòi hỏi dịch chuyển theo khối và có hành vi trên cùng các field.

OpenVDB volumes được đưa vào Houdini kể từ phiên bản 12.5.

Để hiểu rõ hơn về Volume và cách làm việc với nó cơ bản (cũng như chuyên sâu) bạn nên tham khảo thêm tài liệu của CGWiki: http://www.tokeru.com/cgwiki/index.php?title=HoudiniVolumes

Ở đây có bài giảng của Applied Houdini rất dễ hiểu và dạng thực hành, làm việc được ngay với Houdini

Post Author: Vu Pham