遊戲開發入門(六)遊戲物理引擎

視頻鏈接:遊戲開發入門(六)遊戲物理引擎(4節課 時常:約1小時20分鐘 第5節無內容)
該視頻主要針對遊戲中的物理概念以及應用等方面進行簡單的講解,並不會深入的去分析物理公式與推導細節。


筆記與總結(請先學習視頻內容):

1.遊戲應用物理的目的就是爲了真實

2.物理引擎:
可以認爲屬於遊戲引擎的一個構成部分,但是可以獨立剝離開來。遊戲中的物理模擬的計算都是通過物理引擎根據真實世界物理定律來計算與實現的。市面上主流的物理引擎現在有兩款,Havok與PhysX,其他的還有Open Dynamics Engine,Newton Game Dynamics,Tokamak Game Physics

3.物理引擎帶來的表現上的優勢

  • a.增加動畫表現的豐富性,減少美術的工作量(柔體物理)
  • b.增加遊戲的真實性
  • c.快速模擬各種現實中常見的情形(如鞦韆,用代碼現寫一個成本高的離譜)
  • d.減少邏輯代碼的工作量(比如正常情況下,玩家遇到障礙會停止,在物理世界這是很自然的,但是在非物理世界卻很難處理)

4.如何賦予遊戲對象物理?
給遊戲模型創建一個物理包圍盒,該包圍盒與模型始終保持位置一致,物理引擎作用與該物理包圍盒,進而就能影響整個遊戲對象了。

5.物理類型與應用

  • a.剛體物理 剛體是指在運動中和受力作用後,形狀和大小不變,而且內部各點的相對位置不變的物體。在遊戲中,剛體物理的應用最爲廣泛。常見的地形,建築,玩家等基本上都賦予的是剛體物理,遊戲中的弓箭,實體子彈也都是通過物理引擎來模擬計算的。其中涉及到速度、加速度、力旋轉、動量、摩擦、衝量等
  • b.破碎物理 一個對象受到一定力會破碎,理論上破碎效果可以通過動畫師來製作動畫,但是想根據不同力的大小產生不同的表現效果,那動畫的工作量就顯得過於繁重,破碎物理可以完美的解決這個問題。
  • c.粒子物理 遊戲中的煙塵,雪花,雨水等,這些粒子在很多遊戲中並沒有添加物理(因爲開銷比較大),不過添加物理後可以很方便的處理很多問題,比如雨水穿過房頂的問題
  • d.流體物理 遊戲中的瀑布,一些河流等。我們常見的海水一般並不是使用流體物理來做的,因爲使用UV動畫來處理可以極大的減少運算開銷,而且現在的貼圖效果表現也很不錯

6.物理引擎的起源與應用
軍事戰爭,其實這個很容易理解,國外的有些戰爭題材的遊戲稍加修改就可以被用來模擬訓練。既然物理引擎的目的就是仿真,那麼他的仿真程度越高,其可以應用的場景就越多。

7.遊戲中常見的物理現象

  • a.重力,浮力 雖然這是現實世界中最常見的現象,但是很多遊戲中並沒有通過物理引擎去模擬重力,而是採用相對簡單的邏輯代碼模擬
  • b.碰撞 碰撞是最爲常見的現象,任何角色在移動過程中碰到障礙都要停止移動,或者互相給力產生位移
  • c.變形 包括布料,頭髮等容易產生形變的物體
  • d.流體移動 液體的模擬 目前來看一般只有大型遊戲或者有特殊需求的遊戲纔會使用,開銷比較大
  • e.破碎 事先對物體進行破碎處理,將其模型與物理綁定拆分成多個碎片,受力後分散
  • f.受物理約束的移動 考慮到摩天輪、鐘擺、鞦韆等在現實世界中受約束的模擬,我們可以對這些物體做特殊處理,這種處理就是物理約束

8.Unity中的物理引擎(與Unreal相同)
NVIDIA的PhysX引擎
Unity中物理是以組件的形式存在的,把組件賦予一個OBject就可以賦予其對應的特性。
物理組件大概分爲6種:RigidBody剛體,Colider碰撞盒,Joint約束關節(前三個是剛體組件),Cloth布料(柔體組件),constant force恆力,CharacterController角色控制器

9.關於剛體物理常見的應用

  • a.給各個對象添加碰撞實體(球形SphereCollider,長方體BoxCollider,膠囊體CapsuleCollider,輪子WheelCollider,三角網格MeshCollider,地形TerrainCollider),根據這些碰撞實體去進行物理模擬運算
  • b.設置各種鉸鏈約束(joint)
  • c.Ragdoll布娃娃系統 一般針對玩家角色,用來模擬死亡後效果
  • d.碰撞篩選 可以選擇特定標記的碰撞盒之間相互碰撞,不標記就不會產生碰撞

10.關於剛體與碰撞盒的關係
剛體是賦予物體物理屬性的實體(質量,重力,摩擦係數等),而碰撞盒是用來模擬物理之間產生碰撞以及碰撞結果的只有剛體沒有碰撞盒,就會互相穿過。只有碰撞盒沒有剛體,那麼碰撞的力無法正確計算,也沒有意義

11.Trigger
觸發器是遊戲中經常用到的一個技術,簡單來說就是設定一個區域,玩家或者NPC進去該區域觸發某個事件

12.關於Joint的理解
在Unity裏面叫做關節(鉸鏈),一般在物理引擎中其實現原理就是物理約束。本質上就是給其6個自由度中的某幾個自由度做限制,比如該物體只能在XoY平面移動。在Unity裏面提供了默認的幾個常用的關節類型(unreal中需要自己配置約束),可以方便的實現諸如彈簧、鐘擺等效果。

13.物理材質
物理材質就是模擬現實中物體的材質,他的主要功能有兩個,第一個是表示當前碰撞體的物理表面類型,進而可以根據類型去做特殊處理,第二個是配置摩擦力等參數,可以模擬現實中不同材質物體運動碰撞的效果。

14.Character controller
他在Unity中的概念與unreal等其他引擎的差距很大。Unity中是指一個只受玩家作用,而不受其他碰撞體影響的一個偏物理概念。unreal中單純是指一個控制玩家角色的控制器。

15.布料系統的實現原理

  • a.彈簧系統 一般採用的是彈簧—質點模型
    https://www.cnblogs.com/shushen/p/5473264.html
    http://blog.csdn.net/silangquan/article/details/15746855
  • b.Long Range Attachment 個人感覺這一點不算什麼技術原理,理解彈簧質點模型就可以了
  • c.碰撞檢測 布料是由多個頂點構成的,爲了保證不會穿模,需要保證每一個點都能產生正確的碰撞
  • d.動畫融合 如果物理模擬的結果不是很理想,可以讓美術手動做一個動畫,然後按照一定權重相結合。
  • e.風擾動 類似植物,可以主動添加一個風擾動來模擬布料飄動的效果
  • f.重力和阻尼 阻尼越大,其飄動所需要的力就越大

上一篇:遊戲開發入門(五)遊戲動畫系統
下一篇:遊戲開發入門(七)特效系統

原文鏈接(轉載請標明):http://blog.csdn.net/u012999985/article/details/79224911

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章