当前课程知识点:游戏程序设计 > 第十二章 《游戏物理模拟》 > 12.3 物理引擎原理(下) > 12.3 物理引擎原理(下)
这个包括就是
碰撞检测的一个就是这种流程呢
其实就是
它应该是分两部
一部分的是
就是说那个粗略阶段
就是说我们先拿
拿这些物理体的包围盒
或者包围球来做一个快速的相交测试
这个呢
这个在这张图里面呢
其实讲到其中的一个就是一个步骤
就是说把他
在一个轴上进行一个快速的过滤
这个过滤的就是
把他们的那个
这个球投到投影到一个轴上
通过这个轴来快速去
去判断它
它并不能绝对判断它一定相交
但是它可以判断它是否一定不相交
这个含义就是说
就是说我不能判断它一定相交
但是我判断不相交通过这个方式来
去筛掉一部分
就是说其实我们之前讲了些算法
一些优化的这个过程也是这样
就是说你在
你要做很多事情
但是呢
我可以
我可以通过某种方法判断这些事情
一定不做对吧
那我就没必要做
那其实
这就是一个优化的一个过程
和一个方法
刚才讲的是那个就是粗略阶段
然后呢
这个讲一个就是NarrowPhase
这个精确阶段
就是这里面要讲一个就是说物理引擎里面
非常重要的东西
就是那个碰撞检测矩阵
碰撞检测矩阵它其实是说把
不同物体之间
或不同Shape之间的碰撞方法
对吧然后呢
组成一张二维表就是二维关系
在这里边的这个是Bullet
它给出的
就是说它有box
然后sphere
然后convex
还有以及就是说简单的
这种就是说
那个像Capsule这种(几何体)
那种我带曲面的那个几何体
还有这个compound的呢
其实是组合体其实也
也是由一些基本的
就是图元组成的
还有最后就是复杂的
就是像triangle mesh这种
这里面其实也包含这个
刚才讲的那个Heightfield
就是那个
物理引擎的那个地形的那个东西
在这里面的就是你通过它的X和Y呢
就是你可以选定
就是可以找到对应的算法
这里面你看像这个我们就是说
带曲面的这个像convex cylinder
然后cone以及capsule
它其实之间的碰撞的都是用的是
GGK就是我上堂课讲到的东西
像这种就是比如说任意的一个包围体呢
比如说像box啊
sphere
这种它跟trangle mesh 去
去那个碰撞
它用的是
他这里面叫concaveconvex方法
实际上你可以简单理解就是我讲的
之前就是
讲的就是这种
就是说几何体与三角形碰撞虽然没讲
但是其实他们本质上也可以
用GGK来代替的
所以这个GGK其实
是你简单可以理解是其实是也是
整个就是说
物理引擎和3D几何碰撞里面的一个
非常核心的一个
所以说呢
如果大家后面
如果要从事这方面的工作的话
其实是可以
我觉得建议去
还是深入去了解下这个GGK里面的方法
我写的代码里面其实只是GGK一个
非常简单的一个实现
没有做太多的优化
我现在就是
对物理引擎的一点了
它其实就是说
就说
其实碰撞检测呢
它其实是刚才讲的
那个就是说
那个场景管理里面呢
其实也是只是一种加速方法而已
它其实并没有说
就是说改变它那个
整个物理的那个
计算的那个结果
他只是一个加速
我有个问题
就是说其实在我们做
不管做游戏还是在做那个物理引擎里面
它其实有一个问题
就是说
当很多物体聚在一起的时候
他那个
它的算法复杂度
就是说
一般来说算法辅助都说其实是N方的
就不考虑树形加速的优化
刚才讲的Octree(一种场景管理结构)去优化的话
它其实是那个N方
也就是说
如果说你的那个物体增加了十倍
在一个封闭空间内增加十倍那你的
计算量的很可能是增加的
是十的平方就是一百倍
就是这个它的那个是相当于几何
几何级数的增长
也就说你再强的计算机
你都会很容易去触摸它的瓶颈
其实在这里面物理里面也存在这个问题
所以你发现很多时候大家在玩游戏的过程中
也发现很多时候就是那个角色一多了之后
它可能就变卡了
其实我们做游戏呢
就是可能我觉得三分之一的时间
开发商的钱都在跟那个性能做赛跑
就是说不断的去优化
觉得可能加了一些东西
加了一些特效
加了一些角色加了一些可能
游戏场景的东西一下子就变卡了
因为游戏
他跟就是渲染这块跟那个
而他还
跟电影行业不一样
电影行业它可以通过
就是它相当于是离线的
他可以通过我加钱
我加设备来把他的结果预算出来
但是对于游戏来说
对游戏来说它
其实是对帧率非常敏感的
一但帧率差了之后
会对人的这个就是
玩家的体验非常差
然后就会觉得你这个技术能力啊
或者说做的非常糟 体验会非常糟糕
然后呢
整个那个游戏的那个
就是每一帧给到物理这边的时间
也非常短
可能我
我们预估基本上可能就是
应该是不要超过五毫秒
或者说十几毫秒
因为在五毫秒内其实要解决
解决大量的物理问题
其实这个呢
也是其实也是就是
我觉得作为一个开发的一个难点
因为开发到后期的时候
你可能作为一个游戏开发或者说
或者说这种
游戏开发你出去的时候
你是在于实现功能
但后期时候你发现都是在去
想办法去优化不断的去优化性能
优化过程中的就是
不损效果优化(无损优化)
还有一种就是说
我大不了用更差一点效果
比如说我角色的碰撞模拟
我实现不了角色
身上每一个
手啊手臂的碰撞
那我就用一个球
或者说用一个胶囊体来作为代替吧
就是类似
就是说
怎么说呢
就是说
有点像是
JPG里面的压缩方法对吧
就是说我尽量的去压缩
或者去删除掉一些
就是对于人类来说
对于人类的那种理解
它不太敏感的东西
不太敏感的东西
去把它删掉
对碰撞来说可能穿差一点点啊
然后也没有关系
只要角色别浮在空中对吧
然后角色正常的移动啊
这可能玩家也能接受
这个也是整个
这个也是一个就是说
整个这个行业
或者这个技术在发展中的一个一条路吧
就是会不断的
从就是说
会从一个简单的效果
逐步逐步
效果越来越好
越来越好
然后呢
功能就可能越加的深入
然后涉及的技术就会越来越深
其实物理学里边呢
其实这里面分了一个就是
运动学
就是动力学和运动学就是
让角色那个胶囊体呢
其实它其实是一个运动学
因为它其实仅仅只有碰撞
然后呢
它其实你们在玩游戏的时候呢
其实是感觉不出角色的质量的
一般来说
角色与角色之间它们
不能说你推我我推你
就是说没有说我的质量比你大
然后呢
我推你比较容易
就是说一般现在的游戏还做不到这样子
基本上都是我碰到你就停止
或者怪物直接把你推开
但是你不能推开怪物
就是说还做不到
就是说更真实的效果
最简单的其实就是一个质点
就是我们可以从
我现在可以从质点开始讲起就是质点的
其实就是质量
有他的那个
质量其实是这个物体的
或者这个质点的一个
一个质点固有属性
然后它涉及到它的那个加速度
就影响到它那个
比较受力之后加速度的大小
在游戏里面去模拟质点其实
一般来说是用于
比如说一些粒子特效的效果
比如说仙女散花
或者说一些就是仙女棒她发出了一些
星星点点啊
那这些星星点点
其实就是用最简单的质点模拟就是
初始给它一个速度
然后呢
不断的迭代
然后呢
到一定时间消亡
然后这个实际上会成这个运动轨迹
运动轨迹的那就是一个这个
有很多个这样的粒子组成的效果
那就成了一个特效
在这里面呢
可能这些那个
视频和那个图片我就没有准备了
就简单讲一下
比如说你要实现一个简单的这个质点模拟呢
其实很简单
这个代码呢
也就这几行就是
就是你在它每一帧
运行的时候能去设置一下它的力
然后通过力求出加速度
然后通过加速度去
求他的▲的那个速度的改变量
然后通过它的速度
再去求着它下一站的那个
位置的改变量
这样子就可以模拟一个简单的质点了
对刚体来说呢
其实刚体呢
他不仅有
就是说一般来说呢
我们在处理时候呢
就是运动学上的会把它
做成
就是就是说
基于那个质量和速度
还有未知的一个质点啊
但是呢
因为他是刚体
他是一个几何体
它还具有就是三维空间中
另外一个
就是你觉可以就叫定向
定向也可以解释也就它有旋转
它有它的姿势
这个姿势是指着它旋转的姿势
然后那个
这刚体的碰撞之后
它还有一些弹性示数啊
类似于
就是完全弹性碰撞
完全非弹性以及
介乎于两者之间的那种碰撞效果
其实刚体就是在空中的运动
其实是比较简单的
然后
这个代码里面无非就是把他的那个
角速度以及那个角度啊
这种
预算来给加进去
真正那个比较复杂
就是复杂的的预算的就是就是
就是讲到上一课相关的这个碰撞检测
就是说如何去求解两个刚体
它们之间是否有发生了碰撞
然后呢
碰撞了之后呢
还有一件事情就是
你不能说碰撞你不管了
你碰撞了之后呢
你不能简单的直接把它那个
比如说碰撞的方向反一下
因为它可能会碰撞的比较复杂
有很多物体连在一起
这时候你要去
做一个约束约束就是
就是碰撞的约束
就是说我这个约束呢
是希望它刚好能碰到
刚好能接触
但是呢
也不是简单的弹开
因为有的时候可能
物体叠在一起之后
它可能会
就是会被类似于叫错开的那种
或者说这叫slider、sliding,就是滑行的一些效果
这时候呢
就是物理里面
其实做一个这种约束
就是说我
我两个之间的那个
物体之间的就是
在当前状态下加上一个约束
通过约束来求解它们的相对位置
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题