大家好,我是 AVGPlus 游戏引擎的开发者彬彬。上一篇开发者日志提到过,我们首次在 「LetsGal」(以下简称 "LG") 使用了自研的 Galgame 游戏引擎 AVGPlus.
除了基本的对话、存档、场景、立绘等基础系统之外,AVGPlus 在演出方面也下了很多功夫,这也是我们引擎的一个重要特色。本次很高兴来为大家介绍一下 AVGPlus 的粒子系统。
毕业于五山男子技校(华南理工大学)物理专业,大学期间逐渐发觉自己才疏学浅,被系内各路大神杀的片甲不留、嘴歪眼斜,自认为难以在此等众神云集的领域混出啥名堂,随潜心研究润学。
终于在毕业前一把鼻涕一把、泪连滚带爬的转了码,从此过上了上班工作下班也工作的快乐牲活。
〇、前言(碎碎念)
为什么第一份开发日志介绍的是粒子系统,而不是其他更核心的演出系统?由于粒子系统相对纯粹,他并不像其他诸如存档、对话等系统那样,互相之间的关系错综复杂,剪不断理还乱。
从这里开始,我认为至少对我来说算是 Easy Mode.
这套系统其实在年初就已经开发完成了,但直到今天才正式落成一篇能上的了厅堂的文章。
3月份时,我小范围内介绍过这套粒子系统的设计思路,并进行了成果展示。
当时写出来的文章,与其说是开发日志/技术分享,不如说更像是一份演讲大纲(而且当时确实是拿来做讲演的),处处充满了点到为止的意味。所以今天趁着休假无所事事,将这套演出系统的开发过程重新整理归纳,输出一份更加正式的文档,以供各位参考,欢迎各位斧正。
当然,在本篇中不会过多的涉及代码实现,主要有两个原因:
- AVGPlus 将作为一款开源引擎进行发布(截至成文日暂未放出),在此再大谈特谈代码实现,显得冗余累赘(也招人烦);
- 我认为对于介绍这套系统来说,描述清楚设计过程和设计思路,要比过多关注实现细节来的重要的多;
一、为什么需要粒子系统
一个优秀的嘎啦给幕,需要配合丰富的演出效果,除了人物本身的演出,一个值得关注的重点便是——环境效果。
一时半会找不到图,请脑补以下特效:
- 樱花飘落
- 落叶飞 散
- 大雨滂沱
- 大雪纷飞
- 沙石漫天
- 萤火虫飞舞
想必大家多多少少都在某些 Galgame 中接触过类似场景,相对应的,这些场景所对应的游戏情节也大多令玩家印象深刻。
假设,这些场景并没有使用这些动态的环境特效,而是只使用几张静态 CG,相信在表现力和视觉冲击力上也会有所折煞。而对于玩家来说,这款游戏大概又会缺少几个难以忘怀的记忆点。所以,这些环境特效存在的重要性非常简单直接——提高游戏画面的表现力,提高玩家的游戏沉浸感。
上述所提到的所有特效,归根到底都可以抽象成真实世界中的粒子行为。而粒子行为,必然也可以由统一的物理模型来进行真实验算。
粒子系统便由此氤氲而生了。
二、成品展示
我们第一个实际应用的案例,便是「LetsGal」项目,本小节会介绍一些在 LG 项目中运用的案例。
雪中路灯(大雪)
这是一个非常适合使用粒子特效的场景,搭配「雪下了很久……」的文本和积雪路灯的 CG,游戏演出对玩家沉浸感的提升超过一般的纯静态 CG.
雪中列车(小雪)
转场后 的小雪特效配合上 Pan Camera 系统(后续有机会会介绍),使用 AVGPlus 提供的多种工具组合特效,从而呈现出更加生动的环境效果。
当然,既然是粒子系统,那么允许展示的粒子就不只有雪花一种。按照你的喜好,你可以将上面演示的雪花替换为其他任何图片——雨点、花瓣、萤火虫,You name it!
落叶
来自于 AVGPlus 引擎自带的案例,下面是一个落叶 🍂 场景的 Demo 示例:
可以看到,相比雪花,落叶的行为要稍微复杂一点。不同的落叶都拥有不同的初速度、角速度,来实现落叶在空中飘忽不定缓缓下落的效果。
同时,如果你仔细观察,你也可以看到,落叶的飘落方向实际上是朝向摄像头的,部分落叶在最后还会有轻微 “撞上” 摄像头的效果。
三、系统的开发思路
开端
AVGPlus 存在数十套不同功能的子系统。每套系统也大致都会有过从最开始的「这不是能跑?」到后期「Bigger, Better, Stronger」的阶段
粒子系统,自然也是其中之一。
粒子系统最初的起点,是早期简单实现过一版雪花特效: