知乎日報:3D動畫裡的流體一般是怎麼實現的?
3D 動畫中的流體一般是怎麼實現的,
- 是解微分方程嗎?還是用某種假的物理模型?或者就是直接控制反光什麼的讓流體感覺在流動?
關於微分方程數值解以及流體模擬技術上的細節, 我不多說, @Raymond @叛逆者 他們講得都有覆蓋了。
我特別要講一講針對於動畫和電影製作的話, 最有趣的莫過於“不滯於物”這四個字, 真正使用到的, 其實並不是這幾種方法中的任何其中一種, 而是所有的方法的集合,而其目的,則是圍繞著兩個核心:“真實性”與“可控性”
出於真實性的需求, 我們可能需要解微分方程,出於可控性的要求, 我們有時則不得不調整對方程數值解的依賴。
這是來自於一本早期的工業光魔製作的影片, the abyss。 也是很早的運用計算機成像技術製作特效的影片之一,像這樣的鏡頭, 並不是由數值演算法解算得到, 而是對於動畫師手調的 mesh 進行正確的材質渲染得到的, 但這個鏡頭中最值得注意的反而是這個虛擬的影像對於真實的演員的手指的倒影,這個倒影該如何製作呢? 是在虛擬製作的時候做了一個虛擬的手然後進行反射運算, 還是在實拍的時候放置一個反射球在對應位置之後在後期把反射給取出來調整進畫面? 哪一個成本更低呢?亦或是什麼更聰明的辦法?這才是好萊塢比全世界的電影製作厲害的地方,他們有太多解決細節問題的經驗了,而恰恰是這樣的細節把握, 大大增加影片的可信度的根本。這些經驗, 是買不到的, 也是研發不出來的。 只能是在不斷的嘗試不斷的失敗和成功中積累出來的, 都在談什麼叫工業化, 這就是工業化的其中一塊。
然後我們再來看看另外一本大家耳熟能詳的影片特效製作:
這裡有幾個很值得注意的問題, 既然我們可以用 CG 合成, 為何還要花錢造一個真實的水池? 為何虛擬拍攝屋的佈景要那樣放? 多放的那塊白布平添了更多的摳圖成本, 卻為何要在那裡? 單造一個水池還不夠, 為何還需要造浪裝置?所以這一點又完美體現了好萊塢影視製作中的工業化水準: 即使我一個鏡頭已經準備好是用 cg 合成了, 我也需要在虛擬實拍的佈景上儘可能地還原目標情景。
- 之所以需要一個真實的水池是因為在陽光的照射下, 水面會反射陽光, 可能在船體以及角色身上打下複雜的光斑, 這很難通過後期去添補。
- 之所以要造浪, 是需要船體的運動規律是符合在海中漂泊的情況, 如果離開了造浪器, 那鏡頭中船的運動就有瑕疵了。
- 之所以要掛白布, 是因為效果鏡頭中的對應方向是有一大片白雲的, 所以需要一塊白布去製造出更貼切的自然光漫反射或散射效果, 令角色身上的光影更為可信。
我再列舉一個大家很眼熟的鏡頭
來自於迪斯尼的冰雪奇緣中的 elsa 公主, 對於這本影片中所運用到的雪的模擬運算我不說, 我倒是特別想強調一下影片中 Elsa 公主放小法術時諸如畫面中這樣的流體模擬, 又是一個很好的“控制”>“真實”的例子, 在諸如這樣的需求中, 導演對流體運動的形態, 動量都有很顯式的要求, 而同時又希望其運動規律在一定程度上符合流體的運動規律。 在這種情景中, 如何開發出程式去高效地控制流體的運動, 做到所要即所得, 一點也不是容易的事。
最後還是總結一下, 3D 動畫裡的流體一般是怎麼實現的, 其實是沒有“一般”這個說法的, 所有的方案, 都要針對鏡頭來具體問題具體分析。 國內導演的特效化思路還是比較落後, 很多鏡頭, 並不只是“這個鏡頭特效能不能做”這麼直率單路的問題就能回答的, 而應該是說“這個鏡頭如果要特效來做,那麼應該怎樣做?”