LARK 在 Blender 中完全實(shí)現(xiàn)流體模擬效果
LARK 向我們介紹了 Private Beach 項(xiàng)目背后的工作流程,分享了他們?cè)趧?chuàng)建該項(xiàng)目時(shí)面臨的挑戰(zhàn),并為那些想要嘗試進(jìn)行流體模擬的人提供了一些有用的提示。



介紹
LARK是來(lái)自日本的視頻編輯。我的主要工作不使用 3DCG,而是在工作項(xiàng)目之間自己研究它。從我開(kāi)始認(rèn)真學(xué)習(xí)到現(xiàn)在已經(jīng)一年多一點(diǎn)了。多虧了開(kāi)拓者,Blender 有很多 CG 軟件的資料,所以我喜歡即使是自學(xué)也很容易創(chuàng)作作品的事實(shí)。

參考和目標(biāo)
我一直對(duì)3DCG中表現(xiàn)出來(lái)的各種藝術(shù)很感興趣,特別喜歡那種可以反復(fù)觀看的模擬類(lèi)型。出于這個(gè)原因,我在開(kāi)始使用 Blender 后不久就購(gòu)買(mǎi)了 FlipFluid 插件,并創(chuàng)建了一些測(cè)試場(chǎng)景。但是,我發(fā)現(xiàn)模擬烘焙和渲染需要很多時(shí)間,即使是小場(chǎng)景也是如此,所以我并沒(méi)有經(jīng)常創(chuàng)建基于模擬的作品。然而,我一直渴望使用流體模擬來(lái)創(chuàng)建結(jié)合河流、海洋和湖泊等實(shí)際風(fēng)景的場(chǎng)景。這一次,我能夠找到時(shí)間,所以我決定著手一個(gè)我已經(jīng)考慮了一段時(shí)間的想法。
我的第一步是確定我是否真的可以使用 FlipFluid 來(lái)創(chuàng)建我想要的那種場(chǎng)景。為此,我在 YouTube 上查找了各種人的作品示例,并整理了一份我認(rèn)為是理想模擬的作品列表。深思熟慮后,我決定以“創(chuàng)造一個(gè)照片般逼真的海灘”為目標(biāo),并開(kāi)始收集參考資料。
過(guò)去,我曾嘗試將一些想法作為一個(gè)大型項(xiàng)目付諸實(shí)踐。雖然當(dāng)時(shí)我在這個(gè)過(guò)程中失敗了,所以對(duì)于一個(gè)新項(xiàng)目,我的首要任務(wù)是能夠很好地完成它。因此,我想制作一個(gè)相對(duì)較小的等距場(chǎng)景,并收集適合圖像的圖像。下面你可以看到我收集的實(shí)際參考圖像。

設(shè)置場(chǎng)景
第一步是開(kāi)始處理場(chǎng)景的粗略布局。正在進(jìn)行的工作留下的圖像不多,您在下圖中看到的是早期的布局。如您所見(jiàn),我只是粗略地放置了原始對(duì)象。我把一個(gè)模糊的圖像變成了一個(gè)具體的形式。有一些方法可以使用真人素材在 Photobash 中繪制粗糙的圖片或創(chuàng)建粗糙的圖像,但我并不擅長(zhǎng)這兩種方式,所以我從一開(kāi)始就使用了 Blender。

這個(gè)階段的場(chǎng)景規(guī)模比最終的要大得多。此外,最初,我計(jì)劃擁有更多的對(duì)象。但是,當(dāng)我嘗試與布局并行運(yùn)行簡(jiǎn)單的流體模擬時(shí),我遇到了模擬計(jì)算時(shí)間的問(wèn)題。如果要模擬接近現(xiàn)實(shí)的波浪,自然也需要調(diào)整比例。這個(gè)場(chǎng)景的規(guī)模相當(dāng)大,垂直方向有100多米,但即使是低分辨率的模擬測(cè)試也需要大量的時(shí)間,我不得不等待相當(dāng)長(zhǎng)的時(shí)間才能看到波浪是如何產(chǎn)生的結(jié)果。由于很難在時(shí)間框架內(nèi)完成這個(gè)項(xiàng)目,我決定改變項(xiàng)目的方向,轉(zhuǎn)而制作更小的場(chǎng)景。
下面你可以看到我經(jīng)過(guò)幾次調(diào)整后創(chuàng)建的最終場(chǎng)景。原始場(chǎng)景中的大部分元素都被移除了,只剩下一個(gè)簡(jiǎn)單的海灘。此外,我決定制作一個(gè)看起來(lái)像裝在箱子里的海灘的桌面內(nèi)飾。
我也審查了工作流程。首先,我專(zhuān)注于創(chuàng)建“理想波”,然后在更改布局的同時(shí)運(yùn)行測(cè)試模擬。根據(jù)模擬結(jié)果,我微調(diào)了巖石的位置和海灘的地形。

使用 FLIP 流體進(jìn)行波浪模擬
Flip Fluids 是該工作流程的核心,它與標(biāo)準(zhǔn) Blender Mantaflow 不同,因?yàn)樗鼘?zhuān)門(mén)用于流體模擬。當(dāng)我第一次開(kāi)始使用 Blender 時(shí),我用 Mantaflow 做了幾個(gè)關(guān)于流體的教程,但我很困惑 UI 和計(jì)算結(jié)果因 Blender 版本而有很大差異。此外,Mantaflow 還可以模擬煙霧和火焰等非流體,但也正因?yàn)槿绱?,它的設(shè)置繁多,比較難理解。在這方面,F(xiàn)lip Fluids 的設(shè)置很多,看起來(lái)很復(fù)雜,但是一旦習(xí)慣了,UI 就很容易理解,而且最重要的是,官方的教程視頻和文檔非常豐富。而且即使升級(jí),UI 也基本保持不變。因此,您可以參考過(guò)去的教程并按原樣使用它們。
在下圖中,左圖顯示了側(cè)邊欄中顯示的菜單,右圖顯示了屬性面板中顯示的菜單。

用戶可以下載的示例場(chǎng)景是針對(duì)各種案例設(shè)計(jì)的,并分發(fā)了實(shí)際的項(xiàng)目數(shù)據(jù),以便您仔細(xì)檢查內(nèi)容。我特別喜歡命令行工具,它在后臺(tái)進(jìn)行模擬烘焙和渲染,而不使用 Blender UI。多虧了這一點(diǎn),即使在重負(fù)載下,Blender 也很少崩潰,讓您在整夜處理時(shí)高枕無(wú)憂。

波浪
對(duì)于實(shí)際的流體模擬部分,我使用了 Remington Creative 上傳的 YouTube 視頻作為很好的參考。該視頻內(nèi)容豐富,作者總結(jié)了他如何使用 FLIP Fluids 創(chuàng)建理想波浪的細(xì)節(jié)。當(dāng)然,這并不是介紹可以照原樣使用的數(shù)值,而是一種思維方式,所以需要根據(jù)自己的實(shí)際情況調(diào)整數(shù)值。我提到的另一件事是 CG Geek 的教程。?第一部分和第二部分相當(dāng)長(zhǎng),作者使用的是舊版本的 Blender,但教程仍然很有幫助。
此外,雖然它不是一個(gè)教程,但 Artell Blender 的作品非常好,看起來(lái)對(duì)我來(lái)說(shuō)是理想的海灘,這是我這個(gè)項(xiàng)目的最終目標(biāo)。
除了使用 Blender 和 FLIP Fluids 之外,我不知道其他流體模擬,因此其他軟件的情況可能會(huì)有所不同,但至少對(duì)于這項(xiàng)工作,不需要詳細(xì)再現(xiàn)現(xiàn)實(shí)世界的現(xiàn)象來(lái)創(chuàng)建波浪。
如果您使用的是 Blender,您可以通過(guò)準(zhǔn)備四個(gè)主要對(duì)象來(lái)執(zhí)行流體模擬計(jì)算:
域——指定計(jì)算的范圍;
流體——定義用于計(jì)算的水的框;
以海灘為基地(障礙);
用于創(chuàng)建波浪的對(duì)象(Wave Object)。
恐怕很難理解,但這就是圖中的樣子:

當(dāng)您開(kāi)始模擬時(shí),流體會(huì)根據(jù)線框顯示中名為 Fluid 的對(duì)象的大小生成,用于創(chuàng)建波浪的對(duì)象(Wave Object)會(huì)在現(xiàn)場(chǎng)上下動(dòng)畫(huà)以將流體推出。在一定數(shù)量的幀之后,海浪會(huì)產(chǎn)生并發(fā)射到海灘上。波浪在現(xiàn)實(shí)中出現(xiàn)的方式是由于更復(fù)雜的自然現(xiàn)象和地形的形狀,但可以像這樣以簡(jiǎn)化的形式再現(xiàn)。海灘物體需要有一定的高度來(lái)阻止產(chǎn)生的波浪,所以它被做成了一個(gè)陡峭的斜坡,而不是像真正的海灘那樣的緩坡。
您可以在 FLIP Fluids 設(shè)置中設(shè)置海灘對(duì)象的摩擦系數(shù)。摩擦系數(shù)使得被發(fā)射的海浪可以逐漸減速并停止,而不是沿著海灘滑動(dòng)并到達(dá)海灘的盡頭。
海灘的地形與能否創(chuàng)造出理想的海浪形狀和運(yùn)動(dòng)有很大關(guān)系,因此通過(guò)反復(fù)的測(cè)試模擬,對(duì)海灘的形狀進(jìn)行了多次修改。
順便說(shuō)一句,模擬中的地形對(duì)象(障礙物)必須是封閉網(wǎng)格,而不是非流形。在標(biāo)準(zhǔn) Mantaflow 的情況下,您可以模擬沒(méi)有厚度的平面物體,但在 FLIP Fluids 中,如果物體不夠厚,則無(wú)法檢測(cè)到障礙物,并且會(huì)漏水。
下圖顯示了從下方看到的海灘物體。你可以看到它沒(méi)有附加任何面,所以它不是一個(gè)封閉的網(wǎng)格,這會(huì)導(dǎo)致模擬中的錯(cuò)誤。

要使用 FLIP Fluids 生成氣泡,您只需選中 Whitewater 并選擇所需的元素。您可以通過(guò)調(diào)整此處的值來(lái)控制產(chǎn)生的氣泡量等。我在灰塵上嘗試了幾次,但無(wú)法確定它是否正在生成,所以我取消選中它。

如果在這種狀態(tài)下運(yùn)行模擬,流體碰撞會(huì)產(chǎn)生白水。

最初,我在沙灘上沒(méi)有放置任何東西來(lái)測(cè)試模擬,但是感覺(jué)海浪單調(diào),所以我在沙灘上放置了巖石作為障礙物,并設(shè)置了摩擦系數(shù)。通過(guò)這樣做,當(dāng)波浪撞擊巖石時(shí)也會(huì)產(chǎn)生白水。

還為海灘本身設(shè)置了摩擦系數(shù),但將 Whitewater Influence 值調(diào)整為更大的值,以便在波浪發(fā)射時(shí)產(chǎn)生更多的 Whitewater。我微調(diào)了幾次,因?yàn)楫a(chǎn)生的白水過(guò)多會(huì)導(dǎo)致泡沫狀態(tài),好像洗滌劑中混合了它。正如你所看到的,白水的產(chǎn)生量可以通過(guò)每個(gè)對(duì)象的參數(shù)來(lái)控制,但是例如,如果你想顯著增加數(shù)量,你可以通過(guò)增加模擬本身的分辨率來(lái)產(chǎn)生更多的氣泡。
然而,計(jì)算量會(huì)成比例地增加,所以我在簡(jiǎn)單的測(cè)試和更高分辨率的詳細(xì)模擬之間交替進(jìn)行,以瞄準(zhǔn)產(chǎn)生理想波浪和白水的狀態(tài)。?我還必須將材料應(yīng)用于波浪和生成的白水。
FLIP Fluids 具有材料預(yù)設(shè),因此您只需從設(shè)置部分中選擇它們即可使用它們。

在這個(gè)場(chǎng)景中,我沒(méi)有使用標(biāo)準(zhǔn)的海洋體積材質(zhì),因?yàn)樗木G色太濃了,與場(chǎng)景不匹配,因?yàn)槲移诖氖菬釒{(lán)色的大海。?我本可以使用著色器編輯器來(lái)更改色調(diào),但我使用了我之前提到的 Remington Creative 分發(fā)的 RealWater 材質(zhì)。

主要挑戰(zhàn)
創(chuàng)建氣泡是照片般逼真的波浪的基本元素,是制作這個(gè)場(chǎng)景時(shí)的挑戰(zhàn)之一。它們不能以理想的比例過(guò)多或過(guò)少生成,因此需要重復(fù)多次模擬。我還參考了各種人的教程和文檔,但我花了很多時(shí)間來(lái)驗(yàn)證每個(gè)設(shè)置如何影響另一個(gè)設(shè)置。
最大的問(wèn)題之一也是必須模擬的大量幀。這次我選擇海洋作為我的主題是一個(gè)特別的問(wèn)題,因?yàn)樗枰辽?300 額外的幀才能產(chǎn)生美麗的波浪,而且每次我模擬測(cè)試都需要很多時(shí)間。
這一次,我將最終模擬分辨率設(shè)置為 350,但更改此部分中的值會(huì)顯著改變結(jié)果。這也是我不得不重復(fù)測(cè)試的原因之一。如官方文檔中所述,增加分辨率會(huì)創(chuàng)建新對(duì)象。因此,需要重新計(jì)算,結(jié)果與之前的模擬結(jié)果有很大差異。

我還遇到了在正常渲染過(guò)程中看不到白水的問(wèn)題,這是通過(guò)按 F12 鍵完成的。這似乎是Blender引起的問(wèn)題,而不是插件引起的,并且在將大量幾何體同步到渲染器時(shí)出現(xiàn)錯(cuò)誤,因此白水消失了。由于在這種狀態(tài)下我根本無(wú)法檢查關(guān)鍵的白水,所以我使用前面提到的 FLIP Fluids 命令行工具來(lái)渲染它,而不是通常的渲染。?通過(guò)這樣做,我可以避免上述問(wèn)題并正確渲染。?但是,由于在將結(jié)果導(dǎo)出為靜止圖像之前無(wú)法檢查結(jié)果,因此每次檢查都使用它們非常麻煩。
左邊的圖像是通過(guò)正常渲染氣泡消失的狀態(tài)。

我還為海灘使用了 WetMap,使其看起來(lái)更逼真。WetMap 用于控制地面的濕度,通過(guò)使用 Blender 的 Dynamic Paint 功能,我可以檢測(cè)流體模擬的接地部分并生成黑白圖。在下圖中,您可以看到 WetMap 的連續(xù)編號(hào)文件的一部分。

我使用生成的 WetMap 作為一個(gè)因素。Base Color 和 Roughness 值相應(yīng)更改,海灘顏色變得稍暗,并且由于潮濕而開(kāi)始被反射。

這是在材質(zhì)視圖中渲染的視口圖像,用于查看 WetMap 的工作原理。要檢查一下,每次進(jìn)行產(chǎn)品渲染的時(shí)間都不夠,所以 Blender 的視口渲染功能很有幫助。

這里遇到了一個(gè)Blender在通過(guò)Dynamic Paint函數(shù)烘焙WetMap時(shí)經(jīng)常會(huì)崩潰的問(wèn)題。這似乎是自 Blender 2.8 以來(lái)一直存在的錯(cuò)誤,但在通過(guò)動(dòng)態(tài)繪畫(huà)功能進(jìn)行烘焙時(shí)。如果你不最小化 Blender 的窗口,軟件很可能會(huì)崩潰。它仍然發(fā)生在 3.0 中,因此我浪費(fèi)了很多時(shí)間。如果一定要給以后想嘗試流體模擬的人一些建議,我會(huì)推薦一個(gè)規(guī)模較小、檢查時(shí)間不長(zhǎng)、不需要初步框架的主題。此外,由于啟用 Whitewater 時(shí)計(jì)算速度會(huì)大大降低,因此您可能希望在嘗試以較低分辨率進(jìn)行大致流體運(yùn)動(dòng)后啟用 Whitewater。但是,小規(guī)模有自己的困難,所以我建議你閱讀官方教程。
如果可能,還建議使用高性能 PC。模擬烘焙是在 CPU 而不是 GPU 上完成的,更高分辨率的場(chǎng)景需要大量?jī)?nèi)存。請(qǐng)注意,與不需要太多 PC 規(guī)格的建模和紋理任務(wù)不同,流體模擬可能不允許您根據(jù) PC 規(guī)格創(chuàng)建所需的內(nèi)容。
作為參考,我的電腦規(guī)格如下:
銳龍9 5950X
64GB 內(nèi)存
RTX 3090

燈光
對(duì)于場(chǎng)景的照明,我嘗試了各種方法,例如通過(guò)從完全黑暗的狀態(tài)放置燈光來(lái)從頭調(diào)整照明,或者在 Blender 中使用 Sky Texture 的 Nishita,但最終我使用了 Poly 分發(fā)的 Secluded Beach HDRI 避風(fēng)港。
顧名思義,它是一個(gè)沿海HDRI,因此非常適合這個(gè)場(chǎng)景。?我旋轉(zhuǎn)了 HDRI 來(lái)調(diào)整陰影的位置并增強(qiáng)亮度,以創(chuàng)造具有強(qiáng)烈對(duì)比度的“夏日陽(yáng)光感覺(jué)”。

對(duì)比度太強(qiáng)以至于陰影變暗,所以我放了一些燈來(lái)照亮該區(qū)域。我一共渲染了600F,從300F到900F,海浪最漂亮的地方。經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)玻璃部分容易出現(xiàn)噪點(diǎn),所以我將采樣數(shù)設(shè)置為1024,渲染后去噪。

渲染
該項(xiàng)目是在 Blender 3.0 中創(chuàng)建的,我期待使用最新版本的 CyclesX 進(jìn)行快速渲染,但實(shí)際上,渲染前的初始化和同步部分花費(fèi)了大量時(shí)間,每幀最多 2 分鐘。我嘗試了幾種方法來(lái)處理它們,但沒(méi)有任何改進(jìn),我決定在夜間使用 FLIP Fluids 的命令行工具進(jìn)行渲染,幾天后我設(shè)法完成了它。我使用 Blender 的合成設(shè)置來(lái)測(cè)試顏色校正等,但沒(méi)有在最終產(chǎn)品中使用它。?我最終在我經(jīng)常使用的 After Effects 中導(dǎo)入了按順序編號(hào)的文件,以進(jìn)行細(xì)微調(diào)整并添加模糊。?之后,我在 Premiere Pro 中進(jìn)行了最后的色彩校正。?這一次,我在整個(gè)SNS上都使用了鮮艷的色彩來(lái)吸引眼球。

概括
雖然這幅作品的規(guī)模比最初的形象要小很多,但我覺(jué)得我能夠創(chuàng)造出我想象中的豐富波浪。與我以前的作品不同,我很高興有這么多人看到我的新項(xiàng)目。
但是,我有一些遺憾。?其中之一是,由于試圖使海浪更具風(fēng)景和吸引力,導(dǎo)致海浪撞擊海灘的時(shí)間變得太短。?此外,我無(wú)法添加棕櫚樹(shù)在風(fēng)中搖曳的動(dòng)畫(huà)、海浪聲和其他可以增強(qiáng)作品的元素。?我想在未來(lái)的作品中利用我通過(guò)這次制作獲得的經(jīng)驗(yàn)。
目前,Blender 是我的主要工具,但作為一個(gè)模擬愛(ài)好者,我想在未來(lái)使用 Houdini。

