国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

游戲引擎中的物理系統(tǒng)

這篇具有很好參考價值的文章主要介紹了游戲引擎中的物理系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、物理對象與形狀

1.1 對象 Actor

一般來說,游戲中的對象(Actor)分為以下四類:

  • 靜態(tài)對象 Static Actor
  • 動態(tài)對象 Dynamic Actor ---- 可能受到力/扭矩/沖量的影響
  • 檢測器 Trigger
  • Kinematic Actor 運動學對象 ---- 忽略物理法則,由游戲邏輯直接控制(可能表現(xiàn)的反物理)

1.2 形狀 Shape

由于真實世界中很多物體形狀極其復雜,所以游戲中會先設定較為簡單的對象。常見的物理對象的形狀有如下:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
每一種形狀都有常用的實際游戲?qū)ο?,比如Height Fields用來做地形等。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

當我們利用這些對象去組成實際需要的物體對象時,有兩個原則:

  1. 形狀接近就好,不一定要完美
  2. 簡單性。要盡量用簡單的對象去拼接(比如盡量少用三角網(wǎng)格),且越少越好。

此外,一些比較重要的物理概念:

  • 質(zhì)量和密度 Mass and Density
  • 質(zhì)心(做載具時很重要)Center of Mass
  • 摩擦和恢復(彈性) Friction & Restitution

二、 力與運動

2.1 力 Forces

一般我們把力分成兩種:

  • Force 可以理解為直接的重力、拉力、摩擦力等
  • Impulse 沖量,比如說爆炸導致的沖擊力等(雖然其實沖量就是力x時間(恒力條件下))

2.2 運動 Movement

經(jīng)典的定理(游戲中需要用數(shù)學表示):

牛頓第一定律 無外力 —> 勻速直線運動
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
牛頓第二定律 F = ma (質(zhì)量的本質(zhì)是改變物體物理狀態(tài)的傾向性)
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
當這個力是恒力時:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
當這個力是變力時:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
其中上圖中 v ( t ′ )中的 t 是二次積分(位移和時間關(guān)系公式就是二次的)

具體以圓周運動為例,如果簡單去模擬物體隨時間變化,并不是很困難。

但實際游戲中時間不是連續(xù)的,而是由一幀幀實現(xiàn)的,所以通常需要解決的問題是在已知當前物體位置和速度的前提下獲取之后某時刻的物體位置和速度信息。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

2.2.1 顯示歐拉法 Explicit (Forward) Euler’s Method

最簡單的估計方法,假設在這個時間片里力是恒定的

每一時刻仍按照傳統(tǒng)的牛頓力學方法去計算:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
這種方法下,由于實際游戲中的時間片Δt不可能和現(xiàn)實中一樣小,所以會導致能量不守恒(變多)(如圖中右側(cè)所示,實際位移是偏多的),誤差越來越大,物體逐漸甩出去。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

2.2.2 隱式歐拉法 Implicit (Backward) Euler’s Method

與顯示近似,不過將力的值和速度的值以未來(終點)為參考,如下圖:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
其中未來的值是假設能夠通過解析解強行算出來的。
和顯示方法類似,該方法的問題是能量會衰減,但由于這個衰減相對較慢,所以用戶可能會認為是摩擦力、空氣阻力等其他力的影響導致,從而使得這個衰減在游戲?qū)嶋H中相對不明顯。
從另一個角度來說,我們在游戲引擎中設計中認為衰減肯定是好過增多的,前者頂多最后停下來,但后者會不可控會爆炸。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

通過一系列復雜計算可以證明這種隱式方法是無條件穩(wěn)定的。

但其缺點是:

  • 計算成本高(計算未來值)
  • 運動非線性時難以計算
  • 能量衰減。
2.2.3 半隱式歐拉法 Semi-implicit Euler’s Method

綜合前兩者的特點:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
計算未來速度時用當前的力,計算未來位移時用未來的速度。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

前提假設:力是不變的(很危險的假設,因為實際上力跟物體位置是相關(guān)的)。
優(yōu)點是:

  • 條件性穩(wěn)定
  • 計算簡單有效
  • 隨著時間的推移能夠保存能量

缺點是:

  • 做一些sin cos等運動時,積分出來的周期會比正確值長一點點,所以在相位上會有偏移差。

牛頓第三定律 F = -F’ (相互作用的兩個物體之間的作用力和反作用力總是大小相等,方向相反,作用在同一條直線上。)

三、 剛體動力學

前面所說的所有內(nèi)容都是把物體看作一個質(zhì)點的前提,然而事實上真實世界中大部分物體是有形狀的。
一般來說,我們在引入旋轉(zhuǎn)時大都針對剛體(因為柔體太難了),因為剛體就是假設物體的所有粒子之間綁定相對不動。
所以我們在剛體動力學中常常會比普通的線性計算(圖中右側(cè))多一些概念,同一行概念有對應性:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
具體相關(guān)概念建議看視頻或講義。

動量守恒:在宇宙中任意一個位置做實驗的得到的結(jié)果是一樣的–空間一致性
角動量守恒:在一個位置的任意一個方向做的實驗得到的結(jié)果是一樣的–朝向一致性
課外拓展:諾特定理

四、 碰撞檢測

碰撞檢測一般分為兩個階段:

  • Broad phase 初篩 – 利用AABB等找到剛體有沒有相交
  • Narrow phase – 獲取進一步信息(碰撞點、方向、深度等)

4.1 Broad Phase

一般常見的有兩種方法:

BVH Tree – 更新成本低,適合動態(tài)場景。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

Sort and Sweep – 先排序再逐個掃描,效率高,更符合大部分為靜態(tài)物體小部分為動態(tài)物體的現(xiàn)實。更好。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

4.2 Narrow Phase

4.2.1 Basic Shape Intersection Test

比較簡單,把所有物體看作球或膠囊狀去判斷相交即可。

4.2.2 Minkowski Difference-based Methods

首先需要知道m(xù)inkowski Sum(閔可夫斯基和)的概念,以兩個三角形各自圍成的點集為例,兩個點集相加的結(jié)果是指所有A點集的點加上所有B點集的點,幾何表示如下:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
拓展到兩個凸包也是一樣道理。

然后同理,還有minkowski Difference(閔可夫斯基差)
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
簡單講就是化A-B為A+(-B)。而-B是利用對原點的對稱獲得。
這樣一來就獲得了一個很重要的結(jié)論(方法):
如果兩個凸包有重疊,則它們的閔可夫斯基差必定包含原點
我們把閔可夫斯基差這些點形成的形狀叫slmplex(單純形)

由此問題轉(zhuǎn)換為了如何判斷兩個凸包的閔可夫斯基差包含原點。
具體可查看我的文章:多邊形碰撞檢測算法

4.2.3 Separating Axis Theorem

如果兩個物體分離,則肯定能找到空間中一根軸把它們分隔開,不然就是相交。
簡單做法是把凸包A的每條邊和凸包B的每條邊當分隔線試試,比如對凸包A的邊a,把所有頂點投影到這條邊上去進行判斷有沒有重疊。如果所有邊做分隔線都有重疊,那就是兩個凸包相交。
在這個基礎上,優(yōu)化方法是取凸包A的某條邊a做軸時,直接將凸包B的所有頂點投影到a的垂線上,因為這樣可以保證凸包A的所有頂點都在垂線上a的一側(cè),所以只需要判斷凸包B上所有頂點在垂線上的投影是否在另一側(cè)就行。
延伸到3D空間,需要多加步驟:
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
簡單講就是如果只判斷面的法線作為分隔線的可行性的話,會出現(xiàn)圖中下面前兩種情況,并誤以為是兩個物體相交,所以需要再加上一個檢測來判斷第三種情況。

五、碰撞解決

如果兩個物體發(fā)生了碰撞,并且相交了怎么辦?
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎
最簡單的早期是方法是加一個與重疊反方向的penalty force,但是會導致物體突然分隔開,很假。
現(xiàn)在比較合適流行的方法是利用拉格朗日力學中對速度的約束的方法。簡單講大概類似于給碰撞物體加個沖量從而影響下速度,看是不是還碰撞,不斷重復直到可以接受?;蛘叩螖?shù)過多不管了。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎

六、 場景請求

6.1 Raycast

通過發(fā)射一條光來判斷場景中的某個點能否直接看到/射擊到。

當這束光有多個撞擊點時,有三種處理方式:

  • 都進行計算處理、
  • 只處理最近的、
  • any hits(不管哪個,反正有撞擊就行)

6.2 Sweep

比如判斷人有沒有被擋住時是把人的整個膠囊體進行掃描判斷的,只要有一部分被擋住就是被擋住了。

6.3 Overlap

比如判斷手雷爆炸時能炸到哪些人。
游戲引擎中的物理系統(tǒng),游戲引擎,游戲引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-846042.html

七、 效率、準確性與確定性

  • Sleeping
    物理引擎中常把場景的不同物品或部分分成所謂不同的island,而引擎設計中很重要的一部分是讓沒有變化或不需要參與計算的island進入sleep,所以如何讓更多island進入sleep從而減少計算量是一個關(guān)鍵問題。
  • Continuous Collision Detection(CCD)
    當一個快速運動的對象碰撞一個比較薄的物體時容易發(fā)生錯誤直接穿過去(因為前后兩次計算時發(fā)現(xiàn)都沒有碰撞,但其實不可以)
    一種比較質(zhì)樸的方法就是把墻等物體做的厚一點。
    更規(guī)范的做法就是CCD:先計算一個安全時間(在這個時間內(nèi)兩個物體不會碰撞),然后開始一點點詳細計算會不會碰撞,知道它們的距離小于一定閾值。
  • Deterministic 確定性
    游戲引擎設計時需要保證確定性,即同樣的代碼操作下跑起來是要盡可能一樣的,而不會受那么多復雜計算和浮點問題的影響導致不同(從而在Online Gaming)中出現(xiàn)兩方不一樣的問題。

到了這里,關(guān)于游戲引擎中的物理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Unity Physics2D 2d物理引擎游戲 筆記

    Unity Physics2D 2d物理引擎游戲 筆記

    2d 材質(zhì) 里面可以設置 摩擦力 和 彈力 Simulated:是否在當前的物理環(huán)境中模擬,取消勾選該框類似于Disable Rigidbody,但使用這個參數(shù)更加高效,因為Disable會銷毀內(nèi)部產(chǎn)生的GameObject,而取消勾選Simulated只是禁用。 Kinematic 動力學剛體 動力學剛體不受重力和力的影響,而受用戶的

    2023年04月24日
    瀏覽(93)
  • 游戲編程中的AI與物理模擬——用Unreal Engine創(chuàng)建驚艷的游戲世界

    作者:禪與計算機程序設計藝術(shù) 作為游戲開發(fā)者,我們經(jīng)常需要在游戲中加入一些視覺、聽覺或者觸覺等交互性元素,并且給用戶提供更具個性化的游戲體驗。游戲制作人員也喜歡利用人工智能(AI)來輔助游戲制作過程,例如制作游戲中的怪物和敵人具有潛在的危險性,能

    2024年02月07日
    瀏覽(25)
  • 游戲引擎架構(gòu)-游戲支持的系統(tǒng)

    游戲引擎架構(gòu)-游戲支持的系統(tǒng)

    本篇知識點來源于《游戲引擎架構(gòu)》第五章,此章節(jié)主要討論多數(shù)游戲引擎中都會出現(xiàn)的底層支持系統(tǒng)。 C++靜態(tài)初始化次序是無法使用的,原因是我們無法預引擎子系統(tǒng)的構(gòu)造函數(shù)調(diào)用次序和析構(gòu)函數(shù)調(diào)用次序。比如我要啟動引擎的A,B,C系統(tǒng),無法保證這些系統(tǒng)是按照規(guī)定

    2024年01月16日
    瀏覽(22)
  • 游戲引擎架構(gòu)-資源及文件系統(tǒng)

    本篇知識點來源于《游戲引擎架構(gòu)》第六章,主要討論現(xiàn)代三維游戲引擎中典型資源管理器的運作方式。 對于大部分資產(chǎn)來說,游戲引擎并不會使用其原本的格式。資產(chǎn)需要經(jīng)過一些資產(chǎn)調(diào)節(jié)管道,把資產(chǎn)轉(zhuǎn)換為引擎所需的格式。當流經(jīng)資產(chǎn)調(diào)節(jié)管道時,每個資源都需要用一

    2024年01月18日
    瀏覽(20)
  • Hazel游戲引擎(008-009)事件系統(tǒng)

    Hazel游戲引擎(008-009)事件系統(tǒng)

    文中若有代碼、術(shù)語等錯誤,歡迎指正 此節(jié)目的 理清順序和設計才能更好的編碼 設計如圖 聲明 圖是我自己縫合的,流程與大意沒錯,但是不符合軟件工程對應圖的規(guī)范。 大致是根據(jù)視頻草稿圖與大意畫的 使用時序圖簡單表示 使用類圖詳細表示 在軟件工程中,類圖沒有消

    2024年02月01日
    瀏覽(41)
  • PCIDSS中的物理安全要求和存儲系統(tǒng)保護

    作者:禪與計算機程序設計藝術(shù) 作為一名人工智能專家,程序員和軟件架構(gòu)師,我一直致力于保護計算機系統(tǒng)的物理安全性和存儲系統(tǒng)的安全性。在本文中,我將討論PCI DSS中的物理安全要求和存儲系統(tǒng)保護的相關(guān)知識,幫助讀者更好地了解和應用這些技術(shù)。 引言 隨著計算機

    2024年02月16日
    瀏覽(18)
  • 游戲引擎的cpu/gpu粒子系統(tǒng)設計思想

    游戲引擎的cpu/gpu粒子系統(tǒng)設計思想

    網(wǎng)上有很多篇粒子系統(tǒng)源碼解析,但是只是簡單的接口羅列,沒有從最原理出發(fā)去講清楚粒子系統(tǒng)的來龍去脈,我將從粒子系統(tǒng)的本質(zhì)去講清楚它的設計理念,當理解了它的理念以后,很多粒子遇到的問題就會迎刃解決了,這篇文章主講粒子的實現(xiàn)和一些框架級的優(yōu)化方式,

    2024年02月12日
    瀏覽(18)
  • Games104現(xiàn)代游戲引擎筆記 面向數(shù)據(jù)編程與任務系統(tǒng)

    Games104現(xiàn)代游戲引擎筆記 面向數(shù)據(jù)編程與任務系統(tǒng)

    核達到了上限,無法越做越快,只能通過更多的核來解決問題 Process 進程 有獨立的存儲單元,系統(tǒng)去管理,需要通過特殊機制去交換信息 Thread 線程 在進程之內(nèi),共享了內(nèi)存。線程之間會分享很多內(nèi)存,這些內(nèi)存就是數(shù)據(jù)交換的通道。 管理Tasking的方法 Preemptive Multitasking 搶占

    2024年02月04日
    瀏覽(21)
  • 幾何引擎 & 約束求解器 & 3D仿真物理引擎 & 圖形引擎

    幾何引擎 & 約束求解器 & 3D仿真物理引擎 & 圖形引擎

    四大技術(shù)圖譜就像四座護法金剛,形成了深不可測的技術(shù)鴻溝。這對于任何一個工業(yè)軟件企業(yè),十年發(fā)展的沉淀,那還只是開始。這條路,太漫長了。 Software Vendor Domain 3D-kernel 4MCAD IntelliCAD 4M S.A., Greece CAD, AEC Open CASCADE Technology Adams MSC Software, USA CAE Parasolid ADEM ADEM, Russia-Israel

    2024年02月08日
    瀏覽(47)
  • Unity基礎課程之物理引擎6-關(guān)于物理材質(zhì)的使用和理解

    Unity基礎課程之物理引擎6-關(guān)于物理材質(zhì)的使用和理解

    ?每個物體都有著不同的摩擦力。光滑的冰面摩擦力很小,而地毯表面的摩擦力則很大。另外每種材料也有著不同的彈性,橡皮表面的彈性大,硬質(zhì)地面的彈性小。在Unity中這些現(xiàn)象都符合日常的理念。雖然從原理上講,物體的摩擦力和彈性有著更復雜的內(nèi)涵,例如普通的鋼板

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包