GameDesign 板


LINE

因為之前在一個Unity討論區被問到 從何學起遊戲物理模擬(game physics simulation) 和動態程序動畫(procedural animation) 發現要回的東西在太多了,不如寫成一篇文,也便於分享給更多人,就po在這邊囉 :) 首先,基礎要會的是3D數學,包含向量、幾何、線性代數 網路上能找到些不錯的單一主題教學 在此我推薦兩本把各種主題有系統性地集合起來的書 3D Math Primer For Graphics and Game Development https://www.amazon.com/dp/1556229119/ Essential Mathematics for Games and Interactive Applications https://www.amazon.com/dp/0123742978/ 我自己也有寫一些主題&撇步式的遊戲數學文章 http://allenchou.net/game-math-series/ 再來,處理物理模擬的第一步是碰撞偵測(collision detection) 所謂碰撞偵測不是字面上的 "處理物件在物理上的碰撞" 而是回答這個是非題: "兩個物件在空間上是否有重疊" 若有空間重疊重疊,在物理模擬上稱做碰撞(collision) 有時候在遊戲中只要能夠回答這個是非題就夠了 以下這本人稱橘色書("The Orange Book")算是碰撞偵測的聖經吧 涵蓋了各種基礎(primitive)3D形狀組合的一對一碰撞偵測法,還有各種優化技巧 Real-Time Collision Detection https://www.amazon.com/dp/1558607323/ 除了各種基礎形狀之間的碰撞偵測外 還有個GJK(Gilbert-Johnson-Keerthi)演算法 是個很常用的泛用型凸(convex)形狀碰撞偵測演算法 以下這本書主要是在介紹GJK Collision Detection in Interactive 3D Environments https://www.amazon.com/dp/155860801X 不過上面這本書讀起來有點硬 GJK其實沒有那麼艱澀難懂,我自己也有寫一個物理引擎系列教學文 有篇是在介紹GJK,算是那本書的重點整理吧 http://allenchou.net/game-physics-series/ 知道兩個物件有碰撞之後 要讓他們分開的步驟稱為碰撞解析(collision resolution) 第一步是需要找到碰撞接觸點(collision contact)和接觸撞法線(contact normal) 一般是找能夠將兩個物體透過最短移動距離分開的接觸撞點與法線 GJK只會給你物體"是否有碰撞"的一個布林值答案 需要利用額外的計算才能找到碰撞點和碰撞法線 其中一個演算法叫做EPA (Expanding Polytope Algorithm) 我也有寫過個EPA簡介 http://allenchou.net/2013/12/game-physics-contact-generation-epa/ 兩相互碰撞的物體間最適合用來解析的資料結構,不一定是單一接觸點與法線 而是多組接觸點與法線,如疊在一個箱子上的另外一個箱子 這種多組接觸點與碰線的集合稱為接觸流形(contact manifold) 跨禎(cross-frame)存在的接觸流形稱為恆存接觸流形(persistent contact manifold) 有助於模擬暖身(simulation warmstarting)以增進穩定性 我寫過個如何跨禎將單一接觸點與法線 融合進恆存接觸流形的重點整理 http://allenchou.net/2014/01/game-physics-stability-warm-starting/ 我的遊戲物理系列文算是我個人的學習筆記 裡面涵蓋了從零做起遊戲物理引擎模擬所需的技術 包含基礎動力學、廣階(broadphase)優化、碰撞偵測、碰撞解析、穩定性 這是目錄 http://allenchou.net/game-physics-series/ 遊戲物理模擬方式有很多種,我採用的是目前各大物理引擎常用的方式 如Box2D、Bullet、Havok等 名為制限式鋼體物理模擬(constraint-based rigid body physics simulation) 說到Box2D,其作者Erin Catto(現為Bilzzard首席物理工程師) 在GDC做了很多次非常棒的演講,我非常推薦看看這些演講 學會術語之後,就能看懂Box2D裡面各種變數名稱與註解 用這些資源搭配解讀Box2D的程式碼來學習非常有效 https://box2d.org/downloads/ 接下來是動態程序動畫 凡是利用程式動態產生的動畫或物件互動都屬於此類 像是單純的球池模擬、鎖鏈甩動、目標追隨 我推薦以下兩本涵蓋了很多範例和模組化概念的書 雖然程式語言是ActionScript 3.0,但概念是共通的 Foundation Actionscript 3.0 Animation: Making Things Move! https://www.amazon.com/dp/1590597915/ AdvancED ActionScript 3.0 Animation https://www.amazon.com/dp/1430216085/ 動態程序動畫能夠讓遊戲有動態互動感 很多人愛稱這種感覺為 "多汁(juicy)" 最常用的加汁技巧為漸變(tweening) 把數值隨著時間從初始值漸漸移動到到目標值都可稱作漸變 用來漸變的數學曲線稱作漸變曲線(easing curves) 用這幾個關鍵字在網路上可以找到很多學習資源 另外一個加汁技巧,我稱為數值彈簧(numeric springing) 不像漸變,數值彈簧是持續的物理模擬,能有效且圓滑地處理動態目標值 我有針對數值彈簧寫一個系列教學文 基礎 http://allenchou.net/2015/04/game-math-precise-control-over-numeric-springing/ 範例 http://allenchou.net/2015/04/game-math-numeric-springing-examples/ 補充 http://allenchou.net/2015/04/game-math-more-on-numeric-springing/ 數值彈簧概念 是基於Erin Catto的一篇泛用軟性制限(soft constraint)的教學衍伸出來的 http://box2d.org/files/GDC2011/GDC2011_Catto_Erin_Soft_Constraints.pdf 本教學與制限式物理引擎中的Baumgarte穩定性(stabilization)關係密切 算是用更精準的參數-- 震盪頻率(oscillation frequency)與震幅衰退率(oscillation amplitude decay rate) --來計算Baumgarte穩定性常數的方式 以上大概就是我所知道的相關資源了 本文提到的一些術語,若看不懂,順著上述資源學習研究就能循序理解 學會之後就可以自由應用了 Good luck & have fun! -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 160.33.168.6 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1562867439.A.831.html ※ 編輯: cjcat2266 (160.33.168.6 美國), 07/12/2019 02:01:34
1F:推 Bencrie: 推書單 07/12 02:09
※ 編輯: cjcat2266 (160.33.168.6 美國), 07/12/2019 04:45:21
2F:推 jfmf: 推分享 07/12 07:51
3F:推 BeStronger: 感謝分享! 07/12 08:49
※ 編輯: cjcat2266 (160.33.168.6 美國), 07/12/2019 09:10:48
4F:推 iverson7761: 推 07/12 11:11
5F:推 NCTU87: 推 07/12 11:36
6F:推 Pony5566: 先推 07/12 11:59
7F:推 zxshih: 推推>< 07/12 13:58
8F:推 art1: 推! 07/12 17:07
9F:推 eugenelinrmx: 推分享 07/12 17:27
10F:推 wangm4a1: 推 07/12 19:06
11F:推 rhox: 推 07/12 19:29
12F:推 allen2207153: 推 07/12 20:18
13F:推 coolrobin: 不推不行 07/12 21:37
14F:推 Lhmstu: 推 07/13 11:40
15F:推 willier15987: 推 07/13 13:25
16F:推 kirai: Push! 07/13 14:55
17F:推 leonardo0917: 未看先推 07/13 16:17
18F:推 riveranb: 超聖推 07/13 23:13
19F:推 shuain: 讚讚 07/14 00:47
20F:推 nyms: 朝聖推 07/14 15:04
21F:推 TWayne: 朝聖 07/15 09:33
22F:推 johnny94: 推推 07/16 10:13
23F:推 NX9999: 推推 07/16 22:00
24F:推 pumapupa: 朝聖推 07/17 13:34
25F:推 ShadowInWind: 朝聖 07/21 09:16
26F:推 a82611141: 推 07/22 18:14
27F:推 wewe10112: 推一個 07/25 11:41
28F:推 ConSeR: 推 優文 09/08 19:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP