视频链接:游戏开发入门(七)特效系统(6节课 时常:约2小时20分钟) 该视频课程与其他本系列的课程不太一样,因为在很多游戏或者很多引擎中并没有一个专门的“特效系统”,而是把各种特效存放在不同的模块里面,比如粒子特效放在粒子系统里,材质UV特效放到动画逻辑里面。 这堂课所讲的内容表面上是讲解特效的相关内容,有一些分析感觉价值好像也不大,不过深入来说他更像是如何利用自己的经验来为项目开发一个高效的工具。 对于一个没有任何经验的入门者来说,里后半部分面的很多内容可能无法亲身体会,可能会令人觉得鸡肋。所以建议大家除了理解基本的特效内容外,尽可能抱着如何去分析抽象一个功能的戏心态去学习,效果会更好一些。
另外,博主做笔记的时候也加入了一些自己的看法,可以参考。
笔记与总结(请先学习视频内容): 1.什么是特效?
在我工作的环境内,特效基本上就是指粒子特效。但更通用的定义应该是指为了体现出游戏中的某些特殊效果增加一些在现实中不常见的表现。这些表现包括但不限制于场景光影特效,UI表现特效,技能特效,雨水,沙尘等等。 2.特效在项目使用中的问题
没有一个完善,通用的特效系统,导致每个项目在运行时都需要手动重新搭建一个适合自己项目的类似系统,或者完全不构建系统,进而造成开发效率的降低。然而对于当前市面上的大部分游戏,特效的应用极为广泛,构建一个特效系统确实是有意义的。特效系统的定义不确定性以及难以抽象的特点,也是导致没有出现特效系统的原因之一。 3.如何抽象一个特效系统的功能? a.分析实际项目中的“特效”有哪些? - UI特效(在某些情况下与材质特效是相同的)
- 粒子特效(动作,技能,附魔等) 材质特效(角色颜色变化等)
- 后处理(景深,光晕等,课程前面没有这方面内容,不过后面在系统设计的时候提到了镜头管理,镜头管理一般包含摄像机处理与后处理)
b.这些“特效对游戏的作用”是什么? - 强化反馈(UI新手引导特效)
- 增强视觉表现(技能表现)
- 特殊效果表现(boss不同阶段的形态与颜色,植被燃烧消失,景深效果)
c.这些“特效”用到的资源是什么形式?(格式因引擎而异) - 图片
- shader文件(一般来说,现在引擎里面的所有渲染内容都与shader有关,因为考虑到有一些传统游戏框架这里把shader单独拿出来作为一种形式)
- 粒子文件
- 集成于引擎中,没有单独的文件(拖尾渲染,后处理)
d.分析共同点 - 纯表现
- 从开始到结束一般没有交互,不接收输入
- 随时间产生变化
e.总结
多种表现效果在同一个固定时间区间内的非线性排列 - 固定时间轴动画驱动
- 支持多样化的表现效果元素混合编辑功能
- 提供对多种表现效果元素在同一时间轴内的非线性排列功能
4.一般UI特效的实现方式 - 逐帧动画(N张图片循环播放,资源多,占空间大)
- UV动画
5.一般技能特效(如刀光)的实现 - Mesh面片+ UV动画(需要先生成一个透明的面片)
- Trail拖尾特效(引擎提供,不需要实时生成Mesh网格)
- Particle粒子特效(粒子消耗一般来说比较高)
6.灵魂吸附的效果实现
Particle粒子,每帧更新其位置 7.走路时灰尘的实现
一般在引擎的动画编辑界面里都可以在动作的某一帧直接添加粒子效果(或者其他事件通知),在该位置添加制作好的灰尘效果调整位置偏移即可。如果想与身体位置保存一致,还需要将其绑定到固定的骨骼关节上 8.一个简单的无抽象的特效系统与一个复杂特效系统的比较
由于项目开发周期与成本的原因,我们要根据情况来判断是否需要构建一个复杂的系统
简单: - 固定时间轴动画驱动
实现方式:放弃该功能,直接以某个固定事件的开始作为起始时间(很多游戏里都是这么做的) - 支持多样化的表现效果元素混合编辑功能
实现方式:不提供统一功能,直接使用表现效果元素本身的编辑环境制作 - 提供对多种表现效果元素在同一时间轴内的非线性排列功能
实现方式:通过配置表,直接配置各表现元素相对1中的固定开始时间
简单无抽象的特效系统问题: - 每次添加新的玩法时,都需要加入新的固定事件去驱动,同时处理相关逻辑
- 各中特效是分开的,不方便管理,同时需要在多个小工具之间来回切换
- 配置内容随着项目的进行不断添加,造成修改成本增加,同时有些配置还需要到特定的游戏环境里面测试
复杂: - 固定时间轴动画驱动
实现方法:提供统一的基于时间轴的特效控制系统,抽象化每一个驱动元素(类似一个视频剪辑软件的效果, 所谓的驱动元素就是经过封装一个可管理的特效片段,可以直接处理引擎中相关联的特效元素) - 支持多样化的表现效果元素混合编辑功能
实现方法:单独提供每一种表现元素的驱动元素,归纳到特效控制系统统一管理(类别视频中的视频轨道和音频轨道,多种轨道可以各自处理各自的内容) - 提供对多种表现效果元素在同一时间轴内的非线性排列功能
实现方法:提供驱动元素在特效控制系统中的非线性编辑功能(非线性就是指随着时间变化不是线性的,可以先快后面的这种效果) - 所见即所得的编辑环境
实现方法:提供基于UI的编辑环境 - 多种不同表现元素的整体预览
实现方法:UI编辑环境下可以拉起所有的可视化元素的基础系统(比如正常引擎编辑后可以立刻看到修改后的粒子效果,你需要让这个效果立刻显示到你的特效系统里面) - 迅速快捷的修改反馈
实现方法:所有表现元素参数支持序列化方案,驱动元素支持实时修改反馈 - 提供较为统一的基础编辑环境
实现方法:驱动元素接口统一化设计。(方便从一个引擎移植到另一个引擎)
9.判断一个游戏系统设计的好坏因素
a.系统负荷的大小(会不会因为过于复杂而造成过多的额外成本)
b.是否方便多人开发
c.是否方便测试
d.要方便特定的使用人群使用 10.关于编程的一点小经验
不要做过多的设计,因为你的代码总有可以优化的地方,实际情况下实践的测试反馈往往比纯构思要好的多 11.关于序列化
序列化功能是将对类象以字节流的形式输出,游戏中的存档功能几乎都是使用序列化去做的。 12.与特效系统紧密相关的内容
视频中前面分析了特效系统,但是实际上他的特效系统不仅仅包含特效,还有镜头管理与音效管理两个内容。
其实授课者师将游戏中基本的表现内容都整合到其特效系统里面了,可能是因为镜头,音效都与特效紧密联系,如果拆分开来势必导致表现不匹配,操作复杂等各种问题。 13.一个合格的系统公交应该有的功能
a.代码编辑
b.可视化资源编辑窗口
c.提供大量的表现效果功能
d.提供了整套编辑元素序列化方案
e.提供资源管理方案
d.同意的构建流程
f.可预览的运行环境 最后对整个课程做一个简单的总结:其实整个视频就是引导你分析并完成了一个增加美术策划开发效率的一个工具,该工具与具体的引擎无关。
在不同的项目里面大家对工具的需求都是不同的,所以经常会有引擎组的人员去负责相关工具的开发。视频中的特效系统工具看来还基于Unity的,如果换到一个不太成熟的引擎估计很难移植。另外,任何一个工具可能在一些项目中很有意义,单不代表任何项目都适合。
|