一种无运行时代码引擎中声明式GPU粒子特效生成方法与流程

摘要: 本发明涉及计算机图形渲染与游戏引擎,具体地涉及一种无运行时代码引擎中声明式gpu粒子特效生成方法。背景技术:1、粒子系统是游戏视觉的核心表达手段之一。现代引擎普...
一种无运行时代码引擎中声明式GPU粒子特效生成方法与流程

本发明涉及计算机图形渲染与游戏引擎,具体地涉及一种无运行时代码引擎中声明式gpu粒子特效生成方法。

背景技术:

1、粒子系统是游戏视觉的核心表达手段之一。现代引擎普遍把粒子模拟搬到gpu上以支撑上万粒子的实时演算,但相应地,逐粒子的行为(生成、运动、着色、碰撞)都以粒子系统脚本、计算着色器、粒子着色器的形式存在,本质上属于“运行时被加载并执行的新指令流”。在“运行时由人工智能生成新游戏且不执行任何新代码”这一约束下,此类粒子系统脚本与粒子着色器一律不可用。于是,无运行时代码的声明式游戏引擎面临的技术问题变为:如何让人工智能仅以结构化数据描述出随生命期变色、并能与场景表面碰撞的高性能gpu粒子特效,且粒子特效在无头持续集成(continuous integration,ci)环境中可被稳定捕获与验证。具体而言,gpu粒子特效通常需要粒子系统脚本或粒子着色器,属于运行时代码,与无代码架构冲突;粒子随生命期变色需要声明式的颜色渐变带,而非逐帧写色代码;粒子穿过地面或场景物体而不停留,视觉上明显失真,需要声明式的世界碰撞;gpu粒子在渲染服务器的异步计算通道上模拟,无头单帧捕获会与粒子异步计算抢跑,捕获到空白,使得在ci中验证粒子视觉不可行。

2、解决上述技术问题的现有技术包括若干类方案。现有方案一为unity shuriken与vfx graph,unity的shuriken组件以大量可视面板参数描述粒子,vfx graph以节点图在gpu上驱动粒子并可挂计算着色器,二者的颜色随生命期、碰撞模块均以模块面板或图节点表达,其运行仍然是引擎脚本或着色器执行逐粒子逻辑。现有方案二为unreal niagara与cascade,unreal的cascade与niagara以模块化发射器描述粒子,niagara更允许自定义hlsl与计算模拟,颜色随生命期用曲线模块、碰撞用碰撞模块表达,最终编译为着色器与字节码由引擎执行。现有方案三为粒子编辑器类工具,例如popcornfx、effekseer,此类独立粒子编辑器导出特效资产,运行时由运行库解释播放,其资产为特效专用的私有二进制或脚本结构,随生命期变色与碰撞仍是编辑器内的模块。现有方案四为手写粒子着色器或计算着色器直驱,开发者直接写粒子着色器或计算着色器与回读逻辑,逐帧计算逐粒子的状态。

3、现有技术存在如下缺点。第一,违反无代码架构,主流粒子系统的逐粒子行为、随生命期颜色、碰撞均以粒子系统脚本或者色器承载,属于运行时新指令流执行,与应用商店合规要求冲突,也无法让人工智能在运行时安全生成新特效。第二,随生命期颜色表达贫弱或依赖代码,仅“起始色到终止色”两点线性插值无法经过中间色调,读不出火焰质感,要弯折就得写曲线模块或着色器分支。第三,粒子碰撞抽象错位,把碰撞体嵌进单个特效包,其尺寸或高度与某一个测试场景绑死,换一个场景即失效,碰撞本质上是场景级服务而非特效级资产。第四,无头异步捕获抢跑,gpu粒子异步计算与单帧捕获存在竞态,特效帧空白,特效视觉无法进入ci回归。第五,错误后置,数据驱动粒子的非法参数,例如越界色标、矛盾字段,只在运行时暴露。

4、综上所述,现有技术无法在无运行时代码的声明式游戏引擎中,同时实现纯数据描述的gpu粒子特效、随生命期的多色标颜色渐变带、场景级粒子碰撞以及无头捕获前的确定性预热刷新。

技术实现思路

1、为解决现有技术中的至少部分技术问题,本发明提供一种无运行时代码引擎中声明式gpu粒子特效生成方法。具体地,本发明包括以下内容。

2、本发明的第一方面,提供一种无运行时代码引擎中声明式gpu粒子特效生成方法,具体技术方案如下,包括:

3、s1,接收粒子声明字段,将所述粒子声明字段映射为gpu粒子构造结果;

4、s2,根据所述gpu粒子构造结果进行粒子模拟,得到gpu粒子模拟结果;

5、s3,将gpu粒子模拟结果合成进帧缓冲,得到粒子特效图像。

6、本发明提供的一种无运行时代码引擎中声明式gpu粒子特效生成方法的有益效果如下:

7、通过接收粒子声明字段并将所述粒子声明字段映射为gpu粒子构造结果,使gpu粒子特效完全由声明式数据描述,应用从启动到退出不执行任何粒子系统脚本或粒子着色器,解决了gpu粒子特效通常需要粒子系统脚本或粒子着色器、属于运行时代码、与无代码架构冲突的问题;通过根据所述gpu粒子构造结果进行粒子模拟,得到gpu粒子模拟结果,使粒子模拟在gpu上按声明式数据所定义的粒子行为运行,无需运行时编写逐粒子代码;通过将gpu粒子模拟结果合成进帧缓冲,得到粒子特效图像,使gpu粒子模拟结果能够被合成进帧缓冲并输出为可视的粒子特效图像,从而在保持gpu粒子表达力的前提下,实现无运行时代码引擎中声明式gpu粒子特效的生成,使火焰、烟雾、火花、雨雪这一类必备视觉表达能够仅以结构化数据描述出来,并在无运行时代码架构下正常运行与输出。

8、进一步,所述将所述粒子声明字段映射为gpu粒子构造结果之前,还包括:

9、对所述粒子声明字段执行装载期全量校验,得到校验通过的所述粒子声明字段,将校验通过的所述粒子声明字段映射为所述gpu粒子构造结果;

10、所述装载期全量校验的校验项包括:色标形状与区间校验、互斥约束校验、枚举约束校验以及字段类型与必选性校验;任一校验项未通过时,不进入运行时;

11、所述色标形状与区间校验,用于确定所述粒子声明字段中的颜色渐变带字段是否符合预设渐变条件;

12、所述互斥约束校验,用于确定所述颜色渐变带字段与所述粒子声明字段中的双色简写字段是否未同时声明;

13、所述枚举约束校验,用于确定所述粒子声明字段中的混合模式字段以及碰撞模式字段是否在各自预设模式范围内;

14、所述字段类型与必选性校验,用于确定所述粒子声明字段中各字段的类型是否正确以及必选字段是否齐备。

15、进一步,所述gpu粒子构造结果包括:gpu粒子节点、绘制材质以及渐变纹理;

16、所述将所述粒子声明字段映射为gpu粒子构造结果,包括:

17、将所述粒子声明字段中的颜色渐变带字段烘制为所述渐变纹理;

18、将所述粒子声明字段中的混合模式字段映射为所述绘制材质的混合方式;

19、将所述粒子声明字段中的发射类字段映射为所述gpu粒子节点的对应属性,所述发射类字段不包括所述颜色渐变带字段以及所述混合模式字段;

20、所述颜色渐变带字段包括色标序列,色标序列中的每一个色标包括年龄位置、颜色以及透明度。

21、进一步,所述根据所述gpu粒子构造结果进行粒子模拟,包括:

22、根据所述gpu粒子构造结果,按所述粒子声明字段所定义的粒子行为,通过gpu持续更新粒子状态,得到所述gpu粒子模拟结果;更新过程不执行粒子系统脚本或粒子着色器。

23、进一步,所述根据所述gpu粒子构造结果进行粒子模拟,还包括:

24、将所述粒子声明字段中的碰撞模式字段映射为粒子是否参与粒子碰撞的标记,声明了碰撞模式字段的粒子在粒子模拟过程中与场景表面碰撞;

25、所述场景表面由世界装配期于世界场景的根节点下注入的粒子碰撞面提供,所述粒子碰撞面由世界场景中全部可见几何体确定。

26、进一步,所述粒子碰撞面为高度场型碰撞面;

27、从预设读取方向读取世界场景中全部可见几何体的表面高低,得到所述粒子碰撞面;所述粒子碰撞面跟随观察世界场景的视点移动并覆盖所述视点的预设范围区域。

28、进一步,所述将gpu粒子模拟结果合成进帧缓冲之前,还包括:

29、对所述gpu粒子模拟结果执行确定性预热刷新;

30、所述确定性预热刷新包括:从世界场景的根节点开始,逐层找出全部gpu粒子节点;对于每个gpu粒子节点,将对应的gpu粒子模拟结果推进一个固定时长;进行第一次强制绘制,将gpu粒子模拟结果再推进同一个固定时长,以派发并推进粒子计算;进行强制同步,等待已派发但尚未完成的在gpu上执行的粒子计算全部完成;进行第二次强制绘制,将已经发射出来的粒子合成进帧缓冲,以得到逐次可复现的所述粒子特效图像。

31、本发明的第二方面,提供一种无运行时代码引擎中声明式gpu粒子特效生成系统,具体技术方案如下,包括:字段映射单元、粒子模拟单元以及特效合成单元;

32、所述字段映射单元,用于接收粒子声明字段,将所述粒子声明字段映射为gpu粒子构造结果;

33、所述粒子模拟单元,用于根据所述gpu粒子构造结果进行粒子模拟,得到gpu粒子模拟结果;

34、所述特效合成单元,用于将gpu粒子模拟结果合成进帧缓冲,得到粒子特效图像。

35、进一步,所述将所述粒子声明字段映射为gpu粒子构造结果之前,还包括:

36、对所述粒子声明字段执行装载期全量校验,得到校验通过的所述粒子声明字段,将校验通过的所述粒子声明字段映射为所述gpu粒子构造结果;

37、所述装载期全量校验的校验项包括:色标形状与区间校验、互斥约束校验、枚举约束校验以及字段类型与必选性校验;任一校验项未通过时,不进入运行时;

38、所述色标形状与区间校验,用于确定所述粒子声明字段中的颜色渐变带字段是否符合预设渐变条件;

39、所述互斥约束校验,用于确定所述颜色渐变带字段与所述粒子声明字段中的双色简写字段是否未同时声明;

40、所述枚举约束校验,用于确定所述粒子声明字段中的混合模式字段以及碰撞模式字段是否在各自预设模式范围内;

41、所述字段类型与必选性校验,用于确定所述粒子声明字段中各字段的类型是否正确以及必选字段是否齐备。

42、进一步,所述gpu粒子构造结果包括:gpu粒子节点、绘制材质以及渐变纹理;

43、所述将所述粒子声明字段映射为gpu粒子构造结果,包括:

44、将所述粒子声明字段中的颜色渐变带字段烘制为所述渐变纹理;

45、将所述粒子声明字段中的混合模式字段映射为所述绘制材质的混合方式;

46、将所述粒子声明字段中的发射类字段映射为所述gpu粒子节点的对应属性,所述发射类字段不包括所述颜色渐变带字段以及所述混合模式字段;

47、所述颜色渐变带字段包括色标序列,色标序列中的每一个色标包括年龄位置、颜色以及透明度。

48、进一步,所述根据所述gpu粒子构造结果进行粒子模拟,包括:

49、根据所述gpu粒子构造结果,按所述粒子声明字段所定义的粒子行为,通过gpu持续更新粒子状态,得到所述gpu粒子模拟结果;更新过程不执行粒子系统脚本或粒子着色器。

50、进一步,所述根据所述gpu粒子构造结果进行粒子模拟,还包括:

51、将所述粒子声明字段中的碰撞模式字段映射为粒子是否参与粒子碰撞的标记,声明了碰撞模式字段的粒子在粒子模拟过程中与场景表面碰撞;

52、所述场景表面由世界装配期于世界场景的根节点下注入的粒子碰撞面提供,所述粒子碰撞面由世界场景中全部可见几何体确定。

53、进一步,所述粒子碰撞面为高度场型碰撞面;

54、从预设读取方向读取世界场景中全部可见几何体的表面高低,得到所述粒子碰撞面;所述粒子碰撞面跟随观察世界场景的视点移动并覆盖所述视点的预设范围区域。

55、进一步,所述将gpu粒子模拟结果合成进帧缓冲之前,还包括:

56、对所述gpu粒子模拟结果执行确定性预热刷新;

57、所述确定性预热刷新包括:从世界场景的根节点开始,逐层找出全部gpu粒子节点;对于每个gpu粒子节点,将对应的gpu粒子模拟结果推进一个固定时长;进行第一次强制绘制,将gpu粒子模拟结果再推进同一个固定时长,以派发并推进粒子计算;进行强制同步,等待已派发但尚未完成的在gpu上执行的粒子计算全部完成;进行第二次强制绘制,将已经发射出来的粒子合成进帧缓冲,以得到逐次可复现的所述粒子特效图像。

58、本发明的第三方面,提供一种计算机设备,所述计算机设备包括处理器,所述处理器与存储器耦合,所述存储器中存储有至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行,以使所述计算机设备实现如上任一项方法。

59、本发明的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行,以使计算机实现如上任一项方法。

60、需要说明的是,本发明的第二方面至第四方面的技术方案及对应的可能的实现方式所取得的有益效果,可以参见上述对第一方面及其对应的可能的实现方式的技术效果,此处不再赘述。