
最新動態(tài)
《黑神話榮獲大獎!游戲中超逼真的物理引擎是如何打造的?簡直難以置信……》
2025-02-18轉(zhuǎn)自:科普中國
今年,國產(chǎn)游戲《黑神話·悟空》在國際上獲得了多項大獎。最近,游戲再次更新,吸引了不少玩家重新下載體驗這款充滿挑戰(zhàn)的游戲。
許多玩家在暢游過程中不禁好奇,游戲中逼真的物理效果,比如水中的漣漪、雪地上的腳印等是如何實現(xiàn)的?這些現(xiàn)象背后的原理是什么?它們又給物理學(xué)帶來了哪些啟示?讓我們一起探索游戲中的物理世界。
碰撞檢測:構(gòu)建虛擬世界的“硬物體”
在經(jīng)典物理中,碰撞是最常見的事件之一。為了使游戲更加真實,開發(fā)者必須首先解決碰撞問題。
我們來看看現(xiàn)實世界中的碰撞是如何發(fā)生的。

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

計算機通常采用數(shù)值積分方法實現(xiàn)這一過程,如歐拉法、龍格-庫塔法或更穩(wěn)定的半隱式積分器。游戲中優(yōu)先考慮計算效率與穩(wěn)定性,以確保每幀刷新時都能快速得到近似準確的物體位置和狀態(tài)。
現(xiàn)實中,物理現(xiàn)象是連續(xù)的,但游戲需要根據(jù)每個物體的狀態(tài)逐幀更新位置。因此,物理模擬的幀率越高,結(jié)果越精確。
例如,兩個小球?qū)ψ矔r,根據(jù)其速度大小、方向、材質(zhì)和碰撞深度計算結(jié)果并更新狀態(tài)。然而,在現(xiàn)實世界中,剛性物體不會發(fā)生重疊,真正的碰撞發(fā)生在接觸瞬間或從接觸到形變結(jié)束的過程中。

由于物理引擎逐幀更新位置,無法保證碰撞時間點正好在一幀上,也無法完全動態(tài)模擬兩球接觸至分離的每一個細微變化,導(dǎo)致一些復(fù)雜的碰撞看起來反直覺。
現(xiàn)代游戲引擎通過將游戲幀率與物理計算幀率分開來避免這個問題。此外,影響碰撞的因素還包括幀率以外的其他因素。
實際游戲中,模型為了美觀往往非常復(fù)雜,包含數(shù)千個三角面。如果直接用這些模型進行碰撞計算,計算量會大幅增加,甚至可能產(chǎn)生不準確的結(jié)果。因此,需要簡化物體的物理外形,這就是所謂的碰撞體積。
除此之外,材質(zhì)、摩擦力、空氣阻力、擠壓現(xiàn)象等也是碰撞中需要考慮的問題。
約束:受限的自由度
除了剛體碰撞外,游戲中還涉及許多部件的連接與轉(zhuǎn)動,這依賴于約束這一物理概念。例如,游戲角色抓取物體時,手與物體之間就產(chǎn)生了約束。
在物理引擎中,約束用于限制物體的運動范圍和相對位置。它們廣泛應(yīng)用于角色骨骼動畫、機械臂、車輪等場景。若處理不當,可能會導(dǎo)致奇怪的游戲畫面。
在經(jīng)典力學(xué)中,約束是描述系統(tǒng)中物體或物體之間相互關(guān)系的條件。約束力學(xué)研究如何在一個多物體系統(tǒng)中考慮運動的限制條件。根據(jù)自由度的不同,物體之間的相對運動受到不同類型的限制。
在物理引擎中,約束通常通過數(shù)學(xué)方程描述,并基于經(jīng)典力學(xué)中的拉格朗日力學(xué)和牛頓力學(xué)求解。
約束力決定了物體之間的相對運動,通過改變物體的加速度來限制其自由度,從而確保運動符合約束條件。例如,關(guān)節(jié)是一種允許旋轉(zhuǎn)同時限制其他自由度的約束形式,其原理涉及轉(zhuǎn)動慣量和角動量守恒。
在游戲中,約束也存在計算量限制的問題,通常使用預(yù)設(shè)好的通用約束,如以下幾種:

布料與流體模擬:物體的變形與流動
在游戲中,柔體、布料和流體的模擬用于呈現(xiàn)物體的形變和流動行為。這些模擬不僅遵循經(jīng)典物理定律,還依賴于數(shù)值計算方法,以展示細膩真實的物理效果,如人物在水中跑動激起的漣漪、揮動武器時帶動附近草木的擺動。
柔體是指在外力作用下會發(fā)生形變的物體,相比于剛體,它們不是完全不可變形的。柔體模擬的目標是準確描述物體在受力時的變形行為。
柔體的形變與應(yīng)力和應(yīng)變密切相關(guān)。應(yīng)力描述了外力作用下物體內(nèi)部力的分布,通常用應(yīng)力張量表示;應(yīng)變則描述了物體因外力而發(fā)生的形狀或體積變化。
最常用的模型是胡克定律,它描述了材料在小變形下的線性彈性行為:


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

對于更復(fù)雜的物體形變,可以使用有限元法。該方法通過將物體劃分為許多小單元(如三角形或四面體),并通過求解每個單元的應(yīng)力和應(yīng)變來模擬物體的整體行為。
流體模擬是物理引擎中最具挑戰(zhàn)性的任務(wù)之一,尤其是在真實感方面。流體行為受到連續(xù)介質(zhì)力學(xué)的影響,特別是流體動力學(xué)和熱力學(xué)。
流體的運動遵循納維-斯托克斯方程,這是描述粘性流體流動的基礎(chǔ)方程:

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

進而可以忽略體積黏性項,在游戲中甚至可以忽略黏性項,并只考慮二維情況,以簡化計算:

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

游戲中和科研中模擬的區(qū)別
無論是游戲開發(fā)還是科研領(lǐng)域,都需要模擬物體的運動和相互作用。然而,兩者在目標、精度、計算方法、約束和求解策略等方面有著明顯的不同。
游戲中的模擬側(cè)重于實時交互性和視覺真實感。雖然物體按照牛頓力學(xué)運動,但模擬的精度和細節(jié)往往會有所簡化,以提高用戶體驗和計算速度。模擬結(jié)果主要用于增強沉浸感,而非精確預(yù)測。
科研中的模擬目標通常是精確建模和性能評估,用于分析物體的力學(xué)行為、設(shè)計優(yōu)化或?qū)嶒烌炞C??蒲心M提供可靠的結(jié)果,用于實際應(yīng)用、理論研究或驗證物理現(xiàn)象。
盡管游戲和科研都基于相同的物理原理,但游戲中的模擬通常會做很大程度的簡化,以確保每一幀能夠高效計算物體的運動。

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