Signed Distance Field Trong VFX & Animation Là Gì

Sáng nay thấy trong inbox có người hỏi SDF giải nghĩa mức học thuật là gì, một câu hỏi hay thì thích trả lời trong giới hạn hiểu biết của bản thân. Trình bày luôn vào group yeufx và discord Trà Chanh VFX qui tụ anh chị em vfx & animation trong production.

SDF hay Signed Distance Function là tập hợp của Ω (w latin – omega) tính theo đơn vị đo lường trong một không gian cho biết khoảng cách giữa một điểm x cho trước và biên (boundary) của Ω với dấu hiệu cho biết rằng x có nằm bên trong Ω hay không.

Để hiểu 2D thì có lẽ sẽ dễ hơn rằng SDF giúp biết được khoảng cách từ một biên của một hình dạng (tròn, vuông, tam giác, chữ nhât …) tới 1 điểm trên mặt phẳng và xem điểm đó có nằm bên trong của hình dạng đó hay không (đính kèm hình)

tính SDF là điểm P nằm bên trong hay bên ngoài hình dạng tròn

Ví dụ thường tính 1 điểm trên mặt phẳng này, người ta sẽ tính như thế này. 

tính điểm xanh lá cây nằm bên trong hay bên ngoài tam giác tạo bởi 2 đoạn xanh lá cây và đoạn màu đỏ là đường biên. Hình ảnh này của một người dùng hỏi trong group FB làm về lập trình Max Script và Python

I have a triangle and a point both flattened on a surface. I want to loop through the edges and calculate whether the point is inside of the edge or outside of the edge.

And we can simply calculate this by:
vector1 = v.30 - v.76
vector2 = point - v.76
cross = cross (vector1, vector2)
dot = dot (cross, normal)
And dot product can tell me whether it’s inside (dot ≤ 0) or outside (dot ≥ 0)

—-

Tối gian lại theo mặt phẳng 2D, đây là cách giải một SDF không qua máy tính mà bằng tay biểu diễn bằng đoạn thẳng

SDF - Signed Distance Field / Function Ứng Dụng

SDF – Signed Distance Function gần như là phương pháp thường xuyên sử dụng của tôi, nhỏ hơn 0 là nằm bên trong object, lớn hơn là bên ngoài, nhỏ hơn hay lớn hơn bao xa thì tôi tính gradient của đường biên tới vị trí điểm biết trước.

hình ảnh thể hiện SDF trong Houdini từ trang CGWiki

Tôi làm cho mọi thứ từ tối ưu file procedural ví dụ như camera culling, hay tôi cull volumetric làm cháy nổ, hay tôi tính velocity magnitude có thoát ra ngoài obstacle hay không, thỉnh thoảng tôi kết hợp với intersect bằng phương pháp ray marching học lóm được với source code đâu đó online internet vô cùng basic của một cái đầu thông minh nào đó, giúp tôi có thể làm những thứ đơn giản như kiểu làm cho cái thuyền mesh geometry nổi trên mặt nước là mesh geometry deform mà không cần phải dùng tới rigging system nào.

Chế tác trong năm nay làm tôi vui vẻ nhất là tìm ra được cách tạo ra AOV volume velocity cho render Arnold có volumetric motion velocity AOV, điều này giúp cho volumetric có motion blur khi render (một số user đã không biết, nghĩ rằng chỉ cần convert volume thành mesh và dùng velocity của mesh, tuy nhiên vì bản chất volume fog là density có scalar value nên khi convert qua mesh nó sẽ không thể convert 1:1 data, và cái velocity build ra sẽ không chuẩn khi render), và dĩ nhiên cách làm này đã ứng dụng SDF mạnh mẽ. Liên kết đến bài viết tạo Arnold AOV volume motion vector velocity nhằm sử dụng trong hậu kỳ.

Tài Liệu SDF Cơ Bản Từ Internet

Với Houdini, Xem thêm cơ bản SDF
Houdini SDF theo Junichiro Horikawa

Ứng Dụng Houdini Cơ Bản Hơn

Dưới đây là hình ảnh của code VEX bên trong Houdini mà tôi thường hay dùng là tính SDF biên của một set vật thể nằm ngoài hay trong một volume.

Hoặc lấy khoảng cách gradient của set vật thể tới biên, giúp tôi làm được rất nhiều việc với real-time optimize cho một scene trong Houdini thông qua Open VDB (Houdini có volume native và Open VDB, thường Open VDB luôn nhanh hơn vì cách tính toán tối ưu chỉ có lưu data ở những vị trí mà có data, xem thêm vì sao Open VDB nhanh hơn khi simulation)

Ứng Dụng Trong Tech Art

Mấy người tech art thì còn úng dụng vào làm shader (tiếng Nga)

Hay dân làm sân khấu thì ứng dụng vào interactive motion design trong TouchDesigner để trình diễn trên sân khấu, cái phầ mềm Touch Designer đang nổi tiếng lắm nha, chuyên trị motion graphics trên sân khấu cho video jockey, interactive motion design, từ nhạc từ sự kiện tới đủ kiểu …

Ứng Dụng Trong Blender

Với Ray Marching thì ngay cả Blender cũng dùng được để cull geometry từ tia bắn ra (dạng ray tracing) từ camera.

Course Học Miễn Phí Nội Dung Hay, Làm Shader Cho Game

Cả 2 video đều miễn phí và dài hơn 3 tiếng tức tổng gần 7 tiếng nội dung video hoàn toàn miễn phí, nội dung chất lượng.
Part 1: dài hơn 3 tiếng: https://youtu.be/kfM-yu0iQBk

Part 2: cũng cỡ đó https://youtu.be/mL8U8tIiRRg
Và cuối cùng là vì nó có thể làm được nên cũng không biết gọi ông author này là kỹ sư hay artist luôn, ổng vẽ ra một cái bức chân dung CGI hoàn toàn bằng toán, sử dụng rất nhiều signed distance function.

Post Author: Vu Pham