Quá Trình Mò Làm VDB Volume Motion Velocity Thành AOV Trong Houdini Arnold Làm Motion Blur

Sản xuất thiết kế khung hình cinematic, VFX cho phim, cho game luôn cần motion blur, có mới nhìn chân thực. Giờ nó trở thành một thứ phải có trong mọi phần mềm render CPU, GPU, và ngay cả Unreal Engine, Unity. Tuy nhiên sẵn có là chỉ đúng với “geometry mesh” hình khối, còn là chưa sẵn đối với dữ liệu Volumetric, cụ thể là cần render motion blur cho các vụ nổ, cho khói, cho hiệu ứng FX ví dụ nhân vật Soul của Pixar phải có hẳn cả một nền tảng công nghệ riêng để tạo ra velocity từ bộ khung lattice trên volume, từ đó có data displacement motion blur cho volumetric, ứng dụng cho REVES Renderman.

Sau khi có dữ liệu displacement motion velocity này sẽ dùng hậu kỳ để tạo motion blur (vì render trực tiếp motion blur cho đẹp, hình ảnh sạch là rất mất thời gian) – gọi đây là True Motion Blur (tức là motion blur tương tự như in-camera ghi lại). Trường hợp Houdini FX là phần mềm chuyên trị VFX khói lữa nước kỹ xảo, cũng không ngoại lệ, để có motion blur từ Mantra render volumetric, người dùng phải đi hỏi quanh cách làm (để link video hướng dẫn cách làm dưới cuối bài, phương án mới nhất 2021).

Tôi dùng Autodesk Arnold để render trong Houdini. Nhiều ngày bị ám ảnh với cái vụ motion blur bằng Motion Vector AOV (render pass) cho render Autodesk Arnold, SideFX Houdini. Kết quả dưới đây là thành tựu nhỏ cá nhân, kỹ thuật về tạo motion vector AOV cho Volume VDB, để sau đó dùng chính render pass này phục vụ cho công cụ After Effects hay Foundry Nuke làm motion blur lên hình ảnh.

Hình ảnh này cho thấy dùng compositing hậu kỳ để thực hiện việc motion blur, chỉ mất hơn 3 giờ để render cả hình ảnh beauty và render pass volume motion vector từ vụ nổ trên. Còn nếu render trực tiếp motion blur trong Houdini Arnold mặc dù với chỉ sampler của Camera AA là 1, có thời gian lên hơn 7 giờ.

Cả hai phương thức đều render độ phân giải 2K DCI 2048 x 1080. Zoom hình gần hơn.

Ngay cả trên hình GIF cũng thấy hình ảnh sử dụng phương thức hậu kỳ dùng volume motion vector tạo motion blur sẽ có kết quả sạch hơn so với hinh ảnh motion blur render trực tiếp từ Houdini Arnold, rất nhiều noise, render hơn 7 tiếng.

cận cảnh hình tĩnh so sánh hậu kỳ và render trực tiếp nhiều noise do Arnold chống răng cưa không đủ sampler. Click vào hình để phóng to ra.

Việc có motion vector từ hình ảnh CGI luôn là mặc định trong giới thực hiện vfx, cinematic hay chính những pass motion vector này cũng tối quan trọng trong làm video games để có thể tạo được vertex animation, tạo hiệu ứng smears, và nhiều kỹ thuật real-time vfx. Ngoài việc render riêng biệt giúp sản xuất nhanh hơn, thì còn là vấn đề tùy chỉnh mạnh mẽ hơn trong phần biên tập hậu kỳ (post process compositing), chủ động hơn.

Trong các phần mềm hậu kỳ luôn có sẵn những cách giả motion blur như ReelSmart Motion Blur, Optical Flow, Kronos. Mỗi cái có thế mạnh và khiếm khuyết và làm việc với data thấy được – tức pixel. Nên nếu pixel quá nhanh hay quá nhỏ, sẽ thấy motion blur chuyển động chưa hợp lý hoặc bị bỏ qua. Compositor phải làm việc hiệu chỉnh

(A hèm, nếu kết quả cuối cùng coi trên smartphone thì thôi khỏi bàn nữa hen)

Kỹ thuật tạo pass motion vector cho VOLUME VDB này tôi đã mày mò tự thực hành làm được  – không phải là lên mạng lượm tutorial ra làm xong khoe của mình hay đem vào show reel nha. Ở đây kể lại quá trình tìm tòi, thực hành, cũng share làm sao làm được, một thứ thú vị thêm vào FX.

Ngay cả trên Linkedin khi đăng post chủ đề này, tưởng giản đơn hóa ra lại có hơn 6000 view, hơn 160 tương tác, trên Twitter cũng nhận được lượng tương tác bất ngờ với một tài khoản bình thường, hơn 10,000 impresssion, 2451 view cái media (tức là view cái motion blur đó các bạn, trời trời), retweet 21 phát, tổng tương tác trực tiếp lên tới 956 phát.

Với số lượng tương tác khá khá chỉ cho một đề tài VDB volume motion vector. Trên LinkedIn, không có ai chạy ad cho cái hình gif chụp màn hình hậu kỳ motion blur đâu nha quí vị.

Và đó là còn chưa nói số lượng follow rồi “add connection” trên thế giới từ các studio VFX lớn tăng vùn vụt mà trình độ  của tôi về FX  thì ao giếng thôi, chỉ là một kẻ với ước mơ thích làm phim hoạt hình điện ảnh có lợi nhuận, gần đây do covid nên có thời gian chăm chú học Houdini và làm FX destruction, water, simualtion phenamenon vfx … hết covid mau cho anh đi kiếm tiền, đi nhậu, và đi chơi tung tăng nào !!

Cả quá trình làm được thực tế cũng chỉ mất 2 3 ngày do đã rất quen với việc thực hành production, tập trung tìm tòi và cụ thể vấn đề để có kết quả sớm nhất. Việc simulation thì đơn giản vì mật độ của cái explosion này chỉ vài chục triệu voxel, còn render Arnold thì thử sai liên tục sequence animation có kết quả liền liền để sửa sai ngay do dùng simulation/render farm AWS Deadline on-premise tự setup, có thể mở rộng liên tục expand scale khi cần lên cloud của Amazon qua TLS/SSL tải dữ liệu từ mặt trăng về bắn qua sao thổ. Tui nói chơi thôi, đừng tin hihihi.

(Thực tế, với kiểu co giãn render farm này có thể từ nội bộ server trong doanh nghiệp, mượn thêm cloud render farm online chỉ khi nào cần và dồn vào render liên tục, hết xong là không cần phải duy trì tiếp, ví dụ The Mill render 170 shot hiệu ứng nước trong 6 tuần)

Render Pass Cho Houdini Arnold Render

Cách thực hiện theo Arvid Schneider hướng dẫn tôi trên Discord là cách anh đã dùng cho project deep dive, đó là sử dụng Volume VDB để lấy discplacement data, render riêng ra thành một sequence và dùng NUKE để compositing (theo cách của Arvid là dùng IDistort theo UV, cũng là cách Arvid tạo ra force field trong project Deep Dive). Kết quả tôi làm motion blur cho volume lúc đó như hình dưới đây, chưa có animation sequence.

Sau đó, tôi cùng đồng bọn đã chỉnh sửa lại, các trục trặc nảy sinh khi thực hiện animation, motion blur data bị hỏng không khớp với hình ảnh,  nhận được sự trợ giúp của Jaron Wilding, anh bạn người Úc này là FXTA – hiện đang trợ lý giảng dạy và là hỗ trợ mọi mặt về kỹ thuật trong xử lý các vấn đề của học viên học tại các lớp của trường Rebelway. Kết quả đã có ngay dưới đây, phải nói là rất ưng cái bụng.

Tôi đánh giá Jaron Wilding là một người rất tài năng, đã giúp xử lý trong 2 năm qua rất nhiều những ca siêu khó về kỹ thuật ngay cả phim đang trong sản xuất, do người học ở Rebelway đại đa số là các artist đã có nhiều kinh nghiệm sản xuất thực tế trong các lĩnh vực của họ, nay muốn học thêm FX hay các course liên quan tại Rebelway. Nhưng kết quả Jaron làm được đó vì tính chất bảo mật nên không được ghi nhận vào các kết quả đó, thật đáng tiếc.

Trường Rebelway chuyên về dạy nâng cao tạo FX sử dụng Houdini, Unreal Engine, Nuke đạt kỹ năng ứng dụng cho production thực tế, tôi đã tham gia học nhiều lớp về master destruction, water fx, magic, fx lvl2, infographics design… cho phim cho game. Có cả vài bạn Việt Nam học ở đây.

Giao diện màn hình tôi xử lý với render motion vector cho volume trong Arnold. Kết quả của Volume Motion Vector là cả displacement velocity.

Motion vector data thông thường sẽ hiển thị cho người dùng trong các chương trình compositing là màu đỏ (R) đại diện trục X và màu xanh lá cây (G) đại diện trục Y trên frame hình pixel, đây thực tế là RGB – loại dữ liệu vector, còn trục Z là màu xanh dương B, đại diện cho đại lượng của velocity (nhanh chậm). Đen là đối tượng không di chuyển.

Có hai hướng nhận diện motion vector là forward (vector frame kế tiếp – Next frame) và backward (vector với frame trước – Previous frame). Forward thường được sử dụng hơn so với backward, nếu không không biết đang sử dụng hướng nào thì cứ để là forward.

Để xử lý được dữ liệu motion vector này, không đơn giản chỉ để nguyên là dùng được ngay, cần phải xử lý lại data volumetric trực tiếp trong Houdini sau khi simulation. Tôi đã xử lý nhào trộn magik trong node Volume Wrangle, sau đó mới đem đi render – COOK IT.

Tại Sao Cần Volume Motion Vector Để Làm Motion Blur




Tôi thấy trên thế giới hiện nay dường như không ai muốn hướng dẫn thực hiện việc này ?! Bản thân tôi vào hỏi trong cái group FB Houdini Artist cũng chỉ có mỗi một FX TD của studio Blur vào nói gợi ý “Lấy cái vel đi !” – ờ, mà xử lý lấy ra sao cho đến lúc dùng compositing thực tế? Tôi có hỏi thêm nhưng không nhận được trả lời, chắc do tôi xấu xí, không được mát mắt.

Tôi công nhận cái món giấu nghề này ở trong cộng đồng làm FX và TD trên thế giới khá nổi bật nha. Tôi may mắn được Arvid chỉ nữa đường và kết hợp với Jaron để giải quyết xong vấn đề.

ở trên vimeo, trong quá trình tìm kiếm cách làm, tôi nhận thấy, có những người đã 6 năm, họ vẫn không muốn hướng dẫn về vụ này.

Với After Effects tôi có thể xử lý exposure ngay lên cái pass beauty vì đó là hình ảnh 32bit color depth nên tôi không ngại mất dữ liệu, sau đó sử dụng Reelsmart Motion Blur để tạo displacement cho hình ảnh có motion blur từ motion vector dựa theo displacement.

Đây là kết quả tôi đã làm và dùng render pass này cho After Effects




Và xử lý trên Nuke




Đây là 30 giây tutorial breakdown làm sao tạo volume motion vector từ Houdini Arnold render




Kỹ Thuật Volume Velocity Thành Pass Chính Là Bí Quyết FX Production Của Riêng Studio | Gây Tạo Ảnh Hưởng Trên Mạng Xã Hội

Khá nhiều các Vfx Supervisor và TD trên LinkedIn khi thấy tôi share phiên bản đầu tiên, đã tỏ ý đùa cợt rằng đây có vẻ là cách tốt nhất để làm ra lông tóc, còn phía VFX sup của Rodeo FX thì có ý chỉ ra rằng đây chỉ là cái hình still, animation đê !

rất là động viên

Hiện hay đã có update post, để cho thấy kết quả animation render đúng hơn (cũng là có hỏi ý thêm anh em trong group FB YeuFX xem ổn chưa), dĩ nhiên các bạn sup đó chắc chắn là đã quá kinh nghiệm bào sâu nên việc họ nhận ra ngay từ đầu quá dễ. Tuy nhiên sẽ không có gợi ý (cuộc đời mà !). Những điều này cho thấy, volume motion vector pass (AOV) thực sự là một đề tài đáng quan tâm trong giới sản xuất làm phim cinematic vfx.

Nói có sách mách có chứng, các bồ có thể thấy dưới đây hình chụp data social của tui sau hai ngày, số lượng người xem đã lên tới hơn 6000 views, 165 tương tác cho cái hình Gif của đợt làm đầu tiên ở trên. Và đại đa số các tương tác đều đến từ các major studios lớn trên thế giới, chúng ta có MPC, ILM, Scanline, Sony … và số lượng tương tác từ đó không nhỏ dành cho một post tôi nghĩ, cũng chỉ là vấn đề kỹ thuật trong Houdini.

dữ liệu social từ post của tôi về việc volume motion vector mà tôi thực hành

Và đây là dữ liệu mà cái post cùng chung nội dung đó trên twitter. Chú ý, tôi không dự định làm social hay các động thái marketing social, đây chỉ là thói quen khi thực hiện các thử nghiệm, học tập, tôi luôn lưu lại trên social vì khi đi giao dịch với khách hàng hoặc nói chuyện với ai đó, tôi cầ n dữ liệu, đây là cách tôi làm với các data này. Nên việc có lượng tương tác lớn này làm tôi rất đỗi kinh ngạc và phát hiện ra đây không phải là một đề tài đơn giản. Công thức salad trộn dầu giấm bí mật của các studio VFX cấp hành tinh ?

Không biết anh em dùng Redshift, Octane thì render volume motion vector thế nào nhỉ ?

Ai đó cho tôi biết câu trả lời đi, hy vọng không bị mắc nhục vì chỉ cần vào check cái box là có ngay volume motion vector đẹp long lanh denoise. Redshift xịn xò GPU mà.

Đây Là Cách Tạo Volume Motion Vector Với Render Mantra

Còn đây chia sẻ với các bồ cách người ta hướng dẫn build render pass motion vector cho Volume từ Houdini Mantra (Karma tôi không rõ, bữa giờ chỉ vô bấm 1 2 lần rồi đi ra, ko thèm mò luôn, Solaris loằn ngoằn quá :p). Phương án này hiện nay vẫn là cách kiếm nhau mà hỏi, search internet thì nó ra khác phiên bản, không phải cứ làm theo y xì là được, mà oan cái Matra không phải built-in sẵn trong render cho các image plane, trên FB Group Houdini Artist các user vẫn phải đi hỏi và nhờ hướng dẫn, tài liệu của Side FX không thấy hướng dẫn.

Đây là video mới nhất Houdini 18+ từ lúc viết bài này, hướng dẫn từ một user trong group thấy quá nhiều người đi hỏi. Đó giờ chưa bao giờ dễ dàng trừ phi được hướng dẫn lại bởi TD có kinh nghiệm.




Từ khi có các pass này thì các bồ dễ dàng thực hiện motion blur trên phần mềm hậu kỳ. Đối với mesh solid thông thường thì việc có motion blur render pass (AOV) là bình thường của các phần mềm render, tuy nhiên với volume thì lại là một trường hợp đặc biệt. Nó không sẵn có và không dễ làm. Video trên đã giúp thực hiện với Mantra.

Displacement Volume Motion Blur

Dưới đây một số thông tin lượm lặt về vấn đề lấy và ghi nhận dữ liệu displacement motion blur với VDB volumetric.

Việc lấy được dữ liệu này cũng gần như in được dữ liệu displacement, mà ngay cả trang CGWiki (một trang web gần như từ điển dành cho dân FX art tist và TD sử dụng Houdini tham khảo, học tập)  cũng có đề cập ở đây:

Deforming volumes seems like it should be simple, then you try it and realise it’s not. There’s frustratingly cool in-house tools like REVES at Pixar that seem to handle it effortlessly, but what do the rest of us do?

Từ Cgwiki

giải thuật xử lý volume motion blur hiệu quả Reves của riêng Pixar nghiên cứu phát triển

Về phía Renderman thì Pixar có một phương án cho volume deformation data là dùng một cái khung lattice sau đó bao lấy volumetric, và chính cái khung này cũng sẽ giữ lại các field và dữ liệu giúp cho tạo ra data displacement volume motion blur

một trong các paper của Pixar phát hành khi nói về làm volumetric cho đám đông trong phim SOUL 2020 Paper: Rasterizing Volumes and Surfaces for Crowds on Soul

Link Paper Rasterizing Volumes And Surfaces For Crowds On Soul

Đọc thêm về nghiên cứu gốc volumetric của Pixar cho REVES này ở đây: https://bit.ly/35diqFJ

Trong RenderMan 24 vừa mới phát hành, phần kỹ thuật REVES này cũng được nhắc đến, tức Pixar RenderMan cung cấp 2 kỹ thuật để thực hiện motion blur cho volume, đó là Eulerian và Reves. Bản chất Pixar khuyên dùng Eulerian thay vì sử dụng Reves vì tính năng Reves rất ngốn tài nguyên, đòi hỏi rất nhiều setup chuẩn bị cho việc dùng cũng như render rất lâu. (link tới tài liệu: https://rmanwiki.pixar.com/display/REN24/PxrVolume#PxrVolume-VelocityandMotionBlur)

The “Reves” technique, which was the algorithm used for deformation motion blurred volumes prior to 23.5, is more accurate than the Eulerian technique and has a faster convergence time after the renderer has started. Unfortunately, it has a very high preprocessing cost, very high memory requirements, and is inherently a biased technique. As such, it requires the micropolygon length to be set to low numbers (exacerbating both the time and memory costs) in order to avoid visible biasing which manifest as blurry volumes. In most cases, the Eulerian technique should be preferred unless the velocity boundary conditions mentioned above cannot be satisfied for some reason.

Trích từ tài liệu RenderMan 24 - Velocity and Motion Blur
Hiện tại RenderMan 24 đã phát hành, có thể sử dụng miễn phí chức năng render Volume này ngay trong các phần mềm như Maya, Houdini, Katana và đặc biệt là miễn phí trên Blender, link cung cấp thông tin ở đây về việc ra mắt RenderMan 24 cùng các tài liệu tính năng

Post Author: Vu Pham