最新動(dòng)態(tài)

《黑神話榮獲大獎(jiǎng)!游戲中超逼真的物理引擎是如何打造的?簡(jiǎn)直難以置信……》

2025-02-18

  轉(zhuǎn)自:科普中國(guó)

  今年,國(guó)產(chǎn)游戲《黑神話·悟空》在國(guó)際上獲得了多項(xiàng)大獎(jiǎng)。最近,游戲再次更新,吸引了不少玩家重新下載體驗(yàn)這款充滿挑戰(zhàn)的游戲。

  許多玩家在暢游過(guò)程中不禁好奇,游戲中逼真的物理效果,比如水中的漣漪、雪地上的腳印等是如何實(shí)現(xiàn)的?這些現(xiàn)象背后的原理是什么?它們又給物理學(xué)帶來(lái)了哪些啟示?讓我們一起探索游戲中的物理世界。

  碰撞檢測(cè):構(gòu)建虛擬世界的“硬物體”

  在經(jīng)典物理中,碰撞是最常見(jiàn)的事件之一。為了使游戲更加真實(shí),開(kāi)發(fā)者必須首先解決碰撞問(wèn)題。

  我們來(lái)看看現(xiàn)實(shí)世界中的碰撞是如何發(fā)生的。

  F 表示物體所受的凈力,m 為物體的質(zhì)量,a 為加速度。通過(guò)計(jì)算每一時(shí)刻物體所受合力和合力矩,我們可以了解現(xiàn)實(shí)生活中物體的物理狀態(tài)。同樣地,在游戲中,物理引擎使用這種方法來(lái)更新物體的速度和位置。

Unity 3D 中模擬碰撞

  計(jì)算機(jī)通常采用數(shù)值積分方法實(shí)現(xiàn)這一過(guò)程,如歐拉法、龍格-庫(kù)塔法或更穩(wěn)定的半隱式積分器。游戲中優(yōu)先考慮計(jì)算效率與穩(wěn)定性,以確保每幀刷新時(shí)都能快速得到近似準(zhǔn)確的物體位置和狀態(tài)。

  現(xiàn)實(shí)中,物理現(xiàn)象是連續(xù)的,但游戲需要根據(jù)每個(gè)物體的狀態(tài)逐幀更新位置。因此,物理模擬的幀率越高,結(jié)果越精確。

  例如,兩個(gè)小球?qū)ψ矔r(shí),根據(jù)其速度大小、方向、材質(zhì)和碰撞深度計(jì)算結(jié)果并更新?tīng)顟B(tài)。然而,在現(xiàn)實(shí)世界中,剛性物體不會(huì)發(fā)生重疊,真正的碰撞發(fā)生在接觸瞬間或從接觸到形變結(jié)束的過(guò)程中。

游戲中重疊產(chǎn)生碰撞的例子

  由于物理引擎逐幀更新位置,無(wú)法保證碰撞時(shí)間點(diǎn)正好在一幀上,也無(wú)法完全動(dòng)態(tài)模擬兩球接觸至分離的每一個(gè)細(xì)微變化,導(dǎo)致一些復(fù)雜的碰撞看起來(lái)反直覺(jué)。

  現(xiàn)代游戲引擎通過(guò)將游戲幀率與物理計(jì)算幀率分開(kāi)來(lái)避免這個(gè)問(wèn)題。此外,影響碰撞的因素還包括幀率以外的其他因素。

  實(shí)際游戲中,模型為了美觀往往非常復(fù)雜,包含數(shù)千個(gè)三角面。如果直接用這些模型進(jìn)行碰撞計(jì)算,計(jì)算量會(huì)大幅增加,甚至可能產(chǎn)生不準(zhǔn)確的結(jié)果。因此,需要簡(jiǎn)化物體的物理外形,這就是所謂的碰撞體積。

  除此之外,材質(zhì)、摩擦力、空氣阻力、擠壓現(xiàn)象等也是碰撞中需要考慮的問(wèn)題。

  約束:受限的自由度

  除了剛體碰撞外,游戲中還涉及許多部件的連接與轉(zhuǎn)動(dòng),這依賴于約束這一物理概念。例如,游戲角色抓取物體時(shí),手與物體之間就產(chǎn)生了約束。

  在物理引擎中,約束用于限制物體的運(yùn)動(dòng)范圍和相對(duì)位置。它們廣泛應(yīng)用于角色骨骼動(dòng)畫、機(jī)械臂、車輪等場(chǎng)景。若處理不當(dāng),可能會(huì)導(dǎo)致奇怪的游戲畫面。

  在經(jīng)典力學(xué)中,約束是描述系統(tǒng)中物體或物體之間相互關(guān)系的條件。約束力學(xué)研究如何在一個(gè)多物體系統(tǒng)中考慮運(yùn)動(dòng)的限制條件。根據(jù)自由度的不同,物體之間的相對(duì)運(yùn)動(dòng)受到不同類型的限制。

  在物理引擎中,約束通常通過(guò)數(shù)學(xué)方程描述,并基于經(jīng)典力學(xué)中的拉格朗日力學(xué)和牛頓力學(xué)求解。

  約束力決定了物體之間的相對(duì)運(yùn)動(dòng),通過(guò)改變物體的加速度來(lái)限制其自由度,從而確保運(yùn)動(dòng)符合約束條件。例如,關(guān)節(jié)是一種允許旋轉(zhuǎn)同時(shí)限制其他自由度的約束形式,其原理涉及轉(zhuǎn)動(dòng)慣量和角動(dòng)量守恒。

  在游戲中,約束也存在計(jì)算量限制的問(wèn)題,通常使用預(yù)設(shè)好的通用約束,如以下幾種:

PhysX 中的 Joints 例子

  布料與流體模擬:物體的變形與流動(dòng)

  在游戲中,柔體、布料和流體的模擬用于呈現(xiàn)物體的形變和流動(dòng)行為。這些模擬不僅遵循經(jīng)典物理定律,還依賴于數(shù)值計(jì)算方法,以展示細(xì)膩真實(shí)的物理效果,如人物在水中跑動(dòng)激起的漣漪、揮動(dòng)武器時(shí)帶動(dòng)附近草木的擺動(dòng)。

  柔體是指在外力作用下會(huì)發(fā)生形變的物體,相比于剛體,它們不是完全不可變形的。柔體模擬的目標(biāo)是準(zhǔn)確描述物體在受力時(shí)的變形行為。

  柔體的形變與應(yīng)力和應(yīng)變密切相關(guān)。應(yīng)力描述了外力作用下物體內(nèi)部力的分布,通常用應(yīng)力張量表示;應(yīng)變則描述了物體因外力而發(fā)生的形狀或體積變化。

  最常用的模型是胡克定律,它描述了材料在小變形下的線性彈性行為:

質(zhì)點(diǎn)模型示意圖

  質(zhì)點(diǎn)模型是計(jì)算簡(jiǎn)單的柔體模擬方法之一。在這個(gè)模型中,物體被離散化為若干個(gè)質(zhì)點(diǎn),每個(gè)質(zhì)點(diǎn)通過(guò)彈簧相互連接,模擬材料的彈性行為。每個(gè)質(zhì)點(diǎn)的運(yùn)動(dòng)方程由牛頓第二定律給出。

Bullet 引擎展示的布料效果

  對(duì)于更復(fù)雜的物體形變,可以使用有限元法。該方法通過(guò)將物體劃分為許多小單元(如三角形或四面體),并通過(guò)求解每個(gè)單元的應(yīng)力和應(yīng)變來(lái)模擬物體的整體行為。

  流體模擬是物理引擎中最具挑戰(zhàn)性的任務(wù)之一,尤其是在真實(shí)感方面。流體行為受到連續(xù)介質(zhì)力學(xué)的影響,特別是流體動(dòng)力學(xué)和熱力學(xué)。

  流體的運(yùn)動(dòng)遵循納維-斯托克斯方程,這是描述粘性流體流動(dòng)的基礎(chǔ)方程:

  方程左邊為慣性項(xiàng),描述流體的動(dòng)量變化;右邊第一項(xiàng)是壓力項(xiàng),描述由于壓力梯度產(chǎn)生的力;第二項(xiàng)是黏性項(xiàng),描述流體內(nèi)部的摩擦力;第三項(xiàng)是體積黏性項(xiàng);最后一項(xiàng)是外力。

  對(duì)于不可壓縮流體有:

  進(jìn)而可以忽略體積黏性項(xiàng),在游戲中甚至可以忽略黏性項(xiàng),并只考慮二維情況,以簡(jiǎn)化計(jì)算:

  但這會(huì)導(dǎo)致游戲中水面難以顯示較遠(yuǎn)范圍的漣漪,相當(dāng)于忽略了長(zhǎng)波長(zhǎng)部分的流體波動(dòng)。

黑神話中打斗時(shí)的水面波紋

  游戲中和科研中模擬的區(qū)別

  無(wú)論是游戲開(kāi)發(fā)還是科研領(lǐng)域,都需要模擬物體的運(yùn)動(dòng)和相互作用。然而,兩者在目標(biāo)、精度、計(jì)算方法、約束和求解策略等方面有著明顯的不同。

  游戲中的模擬側(cè)重于實(shí)時(shí)交互性和視覺(jué)真實(shí)感。雖然物體按照牛頓力學(xué)運(yùn)動(dòng),但模擬的精度和細(xì)節(jié)往往會(huì)有所簡(jiǎn)化,以提高用戶體驗(yàn)和計(jì)算速度。模擬結(jié)果主要用于增強(qiáng)沉浸感,而非精確預(yù)測(cè)。

  科研中的模擬目標(biāo)通常是精確建模和性能評(píng)估,用于分析物體的力學(xué)行為、設(shè)計(jì)優(yōu)化或?qū)嶒?yàn)驗(yàn)證??蒲心M提供可靠的結(jié)果,用于實(shí)際應(yīng)用、理論研究或驗(yàn)證物理現(xiàn)象。

  盡管游戲和科研都基于相同的物理原理,但游戲中的模擬通常會(huì)做很大程度的簡(jiǎn)化,以確保每一幀能夠高效計(jì)算物體的運(yùn)動(dòng)。

  希望大家現(xiàn)在對(duì)游戲中的物理有了更深的理解。最后給大家一個(gè)黑神話中的游戲畫面,大家可以思考其中蘊(yùn)含的物理模擬過(guò)程。