首页 » 技术分享 » 游戏开发入门(六)游戏物理引擎

游戏开发入门(六)游戏物理引擎

 

视频链接:游戏开发入门(六)游戏物理引擎(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

转载自原文链接, 如需删除请联系管理员。

原文链接:游戏开发入门(六)游戏物理引擎,转载请注明来源!

4