Programming 板


LINE

※ [本文转录自 GameDesign 看板 #1T9tRlWn ] 作者: cjcat2266 (CJ Cat) 看板: GameDesign 标题: [情报] 游戏物理&动态程序动画 学习资源整理 时间: Fri Jul 12 01:50:23 2019 因为之前在一个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/cn.aspx?n=bbs/GameDesign/M.1562867439.A.831.html ※ 转录者: cjcat2266 (160.33.168.6 美国), 07/12/2019 04:36:28 ※ 编辑: cjcat2266 (160.33.168.6 美国), 07/12/2019 09:11:10
1F:推 jacky60302: 推推 感谢整理 223.137.66.42 10/31 17:04







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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP