Skip to main content

· 18 min read

大家好,我是 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」的阶段

粒子系统,自然也是其中之一。

粒子系统最初的起点,是早期简单实现过一版雪花特效:

可以看到,第一版的效果实际上非常原始,只是简单的雪花图片飞过,透视和下落行为与实际我们能够观察到的雪花效果差距较大。

那么,怎样才能做到让我们的雪花与实际的雪花行为相似呢?

很简单,把现实中的物理系统照搬过来就行了!👍🏻

要来点动力学模型吗?

加公式,加更多的公式!加变量,加更多的变量!

我们直接在 AVGPlus 中实现了一套独立的分子动力学模型,可以实时计算所有粒子在给定环境&状态下任一时刻的行为。以下是我们的模型所参考的物理特性:

需要照搬的物理参数:

  • 物体质量
  • 位置坐标
  • 偏转角坐标
  • 速度向量
  • 角速度向量
  • 施加给粒子的外力向量
  • 施加给粒子的外力矩
  • 空气阻力系数
  • 环境引力/重力系数
  • 发生随机行走的概率
  • 随机行走向量

驱动这些参数的,除了经典的理论力学公式,我们还引入了简化的空气阻力计算,让你在显示雨点或是落叶时,都能有更真实的效果呈现。除此之外,我们也加入了随机行走的概念,这让我们的雪花或是落叶特效可以更真实的演绎出随风中乱流飘落的感觉。

当然,合理配置的行走参数,也可以帮助呈现在空中不定飞舞的萤火虫效果,至于模型的迭代方式,我们直接使用了 第一性原理(ab initio) 从头计算,这也是计算凝聚态领域的一个经典应用。

由于是 AVGPlus 独立自带的动力学模型,这套系统的体量非常轻巧。

相比直接引入专业的科学模型,我们只关注 Galgame 游戏中可能使用到的、最核心的粒子效果,那些相对复杂但冗余的计算我们不会涉及。

除此之外,由于是我们自己实现的模型,开发者能更加快速、高效的使用它所提供的各种特性,这一点在下文的「开发者能做什么」板块中会有所介绍。

周期性边界条件

对于下落物特效,我们可能随时都要生成上百乃至上千个独立运动的粒子。一个显而易见的问题——如何处理大量粒子的复用,并保证粒子特效演出效果的稳定。

这在凝聚态物理学中早有解决方案:

周期性边界条件(Periodic Boundary Conditions, PBC)

这是一个比较专业的物理名词。

用比较朴素易懂的语言来讲:

假设系统是一个盒子,那么当任何一个粒子从盒子的右边界离开盒子,就必然有一个粒子以相同的速度矢量从左边界进入盒子,这样就可以只用一小块区域来模拟一个超大系统的粒子行为。

大型粒子系统中的「盒子」

大型粒子系统中的「盒子」

实际应用在 AVGPlus 中,这里还会添加更多的细节处理,我们实际上在其中添加了更多的分布函数和映射公式来调整粒子演出效果,不过这部分比较枯燥乏味,在此就不展开讲了。

理论上,AVGPlus 是有能力将边界条件开放出来给用户,让用户自定义粒子生成区间。甚至也可以允许用户自定义分布函数,允许专业用户调试自己所期望的粒子分布效果。

不过,鉴于我们的开发时间紧任务重,并且这项开放功能也只是属于锦上添花,所以我们暂时没整(跑)。

如果以后有机会,可以考虑下开放这一自定义项。

伪 3D 渲染

当然,还有非常取巧,也是有特色的一点:

AVGPlus 的粒子系统并不是实现的 3D 渲染,而是 2D 仿 3D —— 我们的所有粒子实际上并没有在真正的 3D 空间中存在 Z 轴延伸,事实上,所有的粒子都是在同一平面的。

我们的所有粒子特性的计算使用的都是 3 维空间向量,在计算完成之后,我们通过一套投影公式,将 2D 平面上的粒子依据他们的全部属性,投射成他们在 3 维空间中摄像机视角下的样子。

为什么这样做?

很简单——如果一套投影公式就能解决粒子的渲染问题,那么只要粒子的物理属性是计算正确的,我们何必要在游戏内创建一个真实的 3D 环境呢?

四、开发者能做什么

一句话结论

任何符合宏观物理规律的粒子行为,你都可以使用这套系统来实现

没有实现粒子碰撞:不是不能,而是不想——几乎没有 Galgame 需要粒子碰撞这么特殊的演出效果。

没有实现复杂的流体力学效果:理由同上。

开发案例

再借由一个我们的测试 Demo,来展示开发者在实际使用 AVGPlus 粒子系统时可以使用的种种功能。我们来一起简单调试下上面展示过的落叶 🍂 场景:


直接修改粒子数量、环境重力、空气阻力


除了演示的配置项之外,合理的调整其它参数(例如风力,徐徐清风又或是猛烈的狂风)可以使你的特效更加灵活生动

所见即所得

你所做出的所有修改,在 AVGPlus 中都是即时生效的,所见即所得!

全部参数

下面是我们目前完整提供的全部可配置参数,你可以在面板上直接操控他们,并且当场看到修正后的效果:

全部可配置参数
注意

注意:少部分参数对数值非常敏感,过大的调整可能会导致你的粒子行为不可预测。

预设特效

当然,这么多复杂的参数,也许你一上手会感到头晕。我们预设了一些常见的粒子特效参数,供你开箱即用:

你在前面看到的【小雪】、【大雪】、【落叶】等演示效果,都会座位粒子系统的预设而存在。

导入导出

如果你希望把你调教出来的参数保存下来 or 分享给小伙伴,你也可以一键导入/导出你当前的特效参数:


导出后的参数,可以按照 AVGPlus 提供的接口规范,直接持久化到你的游戏工程中,你的小伙伴在拿到你的参数并一键导入后,也是可以当场即时生效的,大大加速了你们的炼丹工作(误)。

五、总结

粒子系统是一个非常有趣的系统,它可以让你在游戏中实现各种各样的特效,让你的游戏画面更加生动。但粒子系统的使用对绝大部分 Galgame 开发者来说也绝对不是一个简单易用的东西,后续我们会提供更好的编辑器和文档,也会提供更多开箱即用的预设,让大家专注剧情演出,而不是被技术细节所困扰。

· 12 min read

去年跨年,我和 Horogames 的制作人林叶在杭州吃了一顿饭之后,简单交换了各自的状态,后续浅聊,一拍即合,正式展开合作。

其实在写这篇文章的时候,我人在上海,同样和林叶刚吃完饭。算下时间,刚好半年。两顿饭都是林叶请客,都是一言难尽的杭帮菜。用他的话说,一顿最能代表杭州,一顿最能代表上海。

关于林叶

他是 Horogames 的创始人,两年前以制作人身份创作了 Galgame ——「Moon Fall (月球坠落时)」,目前已在 Steam 上发售了两年。LetsGal 延续了他的一贯风格,他个人对这部作品的信心和期望都相当高。

参与 LetsGal 的开发

提示

本文并不涉及 LetsGal 的具体内容,并且目前披露的细节也仅代表 Demo 或开发过程的一部分,不代表最终成品。

林叶的新项目叫做 LetsGal(恋爱游戏进行时) ,是一款带有恋爱、养成、经营等元素的游戏。主角会充当 Galgame 的制作人并经营一家游戏公司,通过雇佣不同的美少女角色,制作出属于自己的恋爱游戏。

为了拯救日渐消亡的 Galgame 业界!制作人决定站出来!在平行世界的东京,经营游戏公司,共度日常,和众多美少女一同开发 Galgame 的模拟经营类游戏。

他之前有一部成本耗资超过百万的作品——「Moon Fall (月球坠落时)」,这个级别的预算在国内属于比较罕见的,可以看出他在这个行业投入了非常足够的热情。

以至于我拿到同样耗资百万以上的 LetsGal 的剧本、美术资源以及技术文档时,同样能感受到这种诚意。

题材上看,即便在这个绝大部分制作人都有些拮据的圈子里,LetsGal 怎么都算是一次注入了勇气的尝试。这部作品不仅仅是游戏,它的剧情,包括对话文本里也处处都像是在写我们这些曾经揣着 Galgame 制作梦想的新人。

技术选型

在决定合作之后,我们自然是使用我们自研的 AVGPlus 作为主要开发框架,这么做是有一定风险的,市面上有非常多成熟的现代游戏引擎,对于商业游戏来讲,选择成熟的方案最为稳妥。

专用引擎的唯一好处是,它对于特定类型的游戏有非常好的支持,尤其我发现绝大多数的 Galgame 制作人并不擅长技术,通用游戏引擎对他们来说有一定门槛,所以这也是打磨 AVGPlus 的一个机会,以便推进后续开发专用编辑器。

关于 AVGPlus

我们后续会有大量的篇章专门介绍 AVGPlus,在这篇文章里,我们不会过多展开。

开发进度

经过几个月的研发和试水,LetsGal 的 Demo 开发相当顺利,我们解决了很多在引擎开发过程中很难遇到的问题。

因此,AVGPlus 也决定开始更新开发日志,一方面是对自身高质量追求的监督,其次也是为了给 Galgame 圈子提供更多活力,算是沉默了这么长时间后,首次开始商业作品的尝试。

除了林叶之外,AVGPlus 还有一个非常重要的小伙伴 —— 彬彬。

彬彬是我的朋友,之前曾经是某头部大厂的研发,离职后业余时间多了起来,中途加入了 AVGPlus 的开发。他为 AVGPlus 引擎本身写了非常多的功能,而且认真负责,进步非常明显。目前,也和我一起参与 LetsGal 的开发,目前几乎所有的系统类功能都是出自他手。

我们选择在进行了半年的开发工作之后选择公开,是因为目前已经有了一些非常重要的进展。在不久的将来,Demo 版本就会和大家见面。

谈谈 LetsGal 的游戏性

LetsGal 是一款结构简单的游戏,但建立在简单的结构下,有非常清晰的游戏脉络。经过这段时间的开发,我从几个角度谈谈。

剧情

剧情是这类游戏最重要的部分,同样也是见仁见智的。

LetsGal 的选题角度非常特别,让玩家有代入感我认为是个不小的挑战。开始我觉得只要跟模拟经营沾边,就很难在剧情上有太多突破,因为一方面要照顾数值,又要提供良好的剧本节奏支撑,这两者之间的平衡是非常难的。

不过就目前我们 Demo 开发过程中所涉及的剧情来看,并没有过多硬伤。

但就私人角度而言,这部作品的主题跟我们作为 Galgame 开发者的身份实在有太多共鸣了,有些文本直达内心。

一些游戏截图

以下是 Demo 中的部分截图展示,仅供参考。实际游戏内容可能会有所不同。

剧情片段

进入游戏看到的游戏标题画面。

大地图和随机事件机制

LetsGal 这个游戏比较特殊——

比如说,它的核心虽然是 Galgame, 却多了:大地图、自由探索、经营等内容。

这些元素在 Galgame 中并不常见,为了满足这些需求,我们也对 AVGPlus 进行了大量改进,甚至会因为一些不常见的功能,提供了引擎层面上的支持。

我们单独为 LetsGal 支持了大地图系统,包括图形方面的特性,比如说拖动、缩放、地图标记等等,并且也支持二级大地图,满足玩家能够在自由行动阶段有更好的探索欲。

整个游戏的内容非常丰富,多达有上千个事件,每个事件都是独立的剧情片段。这些事件可能围绕着剧情进行,却都有不同的触发条件,配合大地图系统的探索,增加了相当多的随机性。

游戏系统

谈到游戏系统就不得不提,传统 Galgame 的玩法是相对单一的。LetsGal 加入了经营元素之后,别开生面实现了像模拟平板电脑、手机等功能,这些功能给游戏增加了非常多的乐趣,也给演出增加了更多可能性。

所以 LetsGal 整个项目,UI 和游戏系统的开发也是核心工作量之一,仅次于剧情。

UI 截图

一下是 Demo 中可以披露的 UI 截图。

剧情片段

角色视图能够直观看到每个美少女的好感度,当然也带了需要 DLC 解锁的角色。

CV 阵容

LetsGal 的 CV 阵容非常强大。目前能公开的角色有:

角色CV代表作
真冬、影缝(后期)shourei 小 N《原神》神里绫华、香菱、凯瑟琳;《守望先锋》黑影;《王者荣耀》沈梦溪;《崩坏 3》爱酱、杏、丽塔;《崩坏:星穹铁道》停云、帕姆
真琴谢莹《英雄联盟》残月之肃·拉露恩、《王者荣耀》镜、《原神》刻晴、《明日方舟》诗怀雅
惠娜闲踏梧桐《战双帕弥什》丽芙·仰光 、丽芙·极昼、《赠予神家与谎言》柯希尼娅·格兰森、《梦末》唐乐吟、《明日方舟》暴雨

后话

这篇文章主要是公开一些关于合作,以及 LetsGal 的情报。

我们会在后续的文章中展开更多的细节,对于开发者博客,我们暂定是以开发进度作为驱动,穿插一些技术细节,也会有一些开发者日常。

最后,感谢林叶的邀请,让我们有机会参与这个项目。如果你对 LetsGal 以及 AVGPlus 的技术细节感兴趣,请务必继续关注我们的更新。

· One min read

踏上征程

大家好,思考了很久决定开通我们的「开发日志」专栏。欢迎来到 AVGPlus 的开发者博客!

我们将在这里发布关于 AVGPlus 的最新进展、开发计划、技术分享等内容。


从这里开始 —— 踏上征程!

如果你需要联系我: