天天看點

遊戲開發入門(六)遊戲實體引擎

視訊連結:遊戲開發入門(六)遊戲實體引擎(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

繼續閱讀