原文链接:游戏开发入门(六)游戏物理引擎_游戏开发物理引擎-CSDN博客
游戏开发入门(七)特效系统_csdn 游戏效果开发-CSDN博客
1.游戏应用物理的目的就是为了真实
2.物理引擎:
可以认为属于游戏引擎的一个构成部分,但是可以独立剥离开来。游戏中的物理模拟的计算都是通过物理引擎根据真实世界物理定律来计算与实现的。市面上主流的物理引擎现在有两款,Havok与PhysX,其他的还有Open Dynamics Engine,Newton Game Dynamics,Tokamak Game Physics
3.物理引擎带来的表现上的优势
4.如何赋予游戏对象物理?
给游戏模型创建一个物理包围盒,该包围盒与模型始终保持位置一致,物理引擎作用与该物理包围盒,进而就能影响整个游戏对象了。
5.物理类型与应用
6.物理引擎的起源与应用
军事战争,其实这个很容易理解,国外的有些战争题材的游戏稍加修改就可以被用来模拟训练。既然物理引擎的目的就是仿真,那么他的仿真程度越高,其可以应用的场景就越多。
7.游戏中常见的物理现象
8.Unity中的物理引擎(与Unreal相同)
NVIDIA的PhysX引擎
Unity中物理是以组件的形式存在的,把组件赋予一个OBject就可以赋予其对应的特性。
物理组件大概分为6种:RigidBody刚体,Colider碰撞盒,Joint约束关节(前三个是刚体组件),Cloth布料(柔体组件),constant force恒力,CharacterController角色控制器
9.关于刚体物理常见的应用
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.重力和阻尼 阻尼越大,其飘动所需要的力就越大
1.什么是特效?
在我工作的环境内,特效基本上就是指粒子特效。但更通用的定义应该是指为了体现出游戏中的某些特殊效果增加一些在现实中不常见的表现。这些表现包括但不限制于场景光影特效,UI表现特效,技能特效,雨水,沙尘等等。
2.特效在项目使用中的问题
没有一个完善,通用的特效系统,导致每个项目在运行时都需要手动重新搭建一个适合自己项目的类似系统,或者完全不构建系统,进而造成开发效率的降低。然而对于当前市面上的大部分游戏,特效的应用极为广泛,构建一个特效系统确实是有意义的。特效系统的定义不确定性以及难以抽象的特点,也是导致没有出现特效系统的原因之一。
3.如何抽象一个特效系统的功能?
a.分析实际项目中的“特效”有哪些?
b.这些“特效对游戏的作用”是什么?
c.这些“特效”用到的资源是什么形式?(格式因引擎而异)
d.分析共同点
e.总结
多种表现效果在同一个固定时间区间内的非线性排列
4.一般UI特效的实现方式
5.一般技能特效(如刀光)的实现
6.灵魂吸附的效果实现
Particle粒子,每帧更新其位置
7.走路时灰尘的实现
一般在引擎的动画编辑界面里都可以在动作的某一帧直接添加粒子效果(或者其他事件通知),在该位置添加制作好的灰尘效果调整位置偏移即可。如果想与身体位置保存一致,还需要将其绑定到固定的骨骼关节上
8.一个简单的无抽象的特效系统与一个复杂特效系统的比较
由于项目开发周期与成本的原因,我们要根据情况来判断是否需要构建一个复杂的系统
简单:
简单无抽象的特效系统问题:
复杂:
固定时间轴动画驱动
实现方法:提供统一的基于时间轴的特效控制系统,抽象化每一个驱动元素(类似一个视频剪辑软件的效果, 所谓的驱动元素就是经过封装一个可管理的特效片段,可以直接处理引擎中相关联的特效元素)
支持多样化的表现效果元素混合编辑功能
实现方法:单独提供每一种表现元素的驱动元素,归纳到特效控制系统统一管理(类别视频中的视频轨道和音频轨道,多种轨道可以各自处理各自的内容)
提供对多种表现效果元素在同一时间轴内的非线性排列功能
实现方法:提供驱动元素在特效控制系统中的非线性编辑功能(非线性就是指随着时间变化不是线性的,可以先快后面的这种效果)
所见即所得的编辑环境
实现方法:提供基于UI的编辑环境
多种不同表现元素的整体预览
实现方法:UI编辑环境下可以拉起所有的可视化元素的基础系统(比如正常引擎编辑后可以立刻看到修改后的粒子效果,你需要让这个效果立刻显示到你的特效系统里面)
迅速快捷的修改反馈
实现方法:所有表现元素参数支持序列化方案,驱动元素支持实时修改反馈
提供较为统一的基础编辑环境
实现方法:驱动元素接口统一化设计。(方便从一个引擎移植到另一个引擎)
9.判断一个游戏系统设计的好坏因素
10.关于编程的一点小经验
不要做过多的设计,因为你的代码总有可以优化的地方,实际情况下实践的测试反馈往往比纯构思要好的多
11.关于序列化
序列化功能是将对类象以字节流的形式输出,游戏中的存档功能几乎都是使用序列化去做的。
12.与特效系统紧密相关的内容
视频中前面分析了特效系统,但是实际上他的特效系统不仅仅包含特效,还有镜头管理与音效管理两个内容。
其实授课者师将游戏中基本的表现内容都整合到其特效系统里面了,可能是因为镜头,音效都与特效紧密联系,如果拆分开来势必导致表现不匹配,操作复杂等各种问题。
13.一个合格的系统公交应该有的功能