2D割草/吸血鬼游戏 性能优化——GPU Spine动画

视频中万人同屏方案(gpu动画、渲染、索敌、避障等功能),可某宝搜店铺:【游戏开发资源商店】获取整套方案源码。

在过去的几年里,割草、类吸血鬼玩法的游戏频出爆款,其丰富的技能、满屏特效、刷怪清屏的解压畅快是此类游戏的核心,也是技术实现难点。

此类游戏2D居多,如《弹壳特工队》等,我想其中原因一是硬件性能受限,难以解决移动端3D海量单位同屏;原因二就是海量单位项目视角受限,注定只能是偏俯视远视角才能在屏幕中展示更多的单位。如果俯视视角3D效果远不如用2D;

然而2D游戏常用的Spine动画,性能甚至还不及Animator。在之前的B站视频中有简单对比测试:

2d spine动画帧数提升数十倍?spine转gpu动画 2d spine动画 10w单位

 如何提升spine动画的性能?

GPU帧动画:

2d最简单的方式就是gpu帧动画,也就是将动画帧打到图集里,使用shader进行偏移采样帧以实现gpu帧动画。这种方式性能很高,然而过于简单,只适合简单需求,如粒子特效等。gpu帧动画没有骨骼信息,难以满足复杂需求,例如弓箭手战斗单位发起攻击,通常需要在弓箭手松手的一瞬间,在弓箭发射口创建并发射箭矢,看似极其普通的需求,帧动画却无法实现,这就严重影响项目品质。

GPU帧动画特效

 GPU帧动画过于简单,且应用场景受限,不是我们介绍的重点。下面是简单的GPU帧动画实现:

 帧动画Shader函数:

 帧动画Shader:

 GPU骨骼动画:

骨骼动画是使用最普遍的动画类型,复杂的骨骼节点树以及无法进行渲染合批导致了严重的性能问题。 

Spine动画是2d骨骼动画,因此gpu骨骼动画原理同时适用于2D/3D、无论是人形还是四足,只要是骨骼动画全部适用。遗憾的是目前无论是开源项目还是Unity资源商店,都没有一款同时具备高性能、功能完善、易用性、兼容性的GPU动画插件。

相比之下做的最好的有:

1. GPU Instancer - Crowd Animations | Animation Tools | Unity Asset Store

 不支持移动平台,依赖运行时脚本

2. GPU ECS Animation Baker | Animation Tools | Unity Asset Store

 针对Entities,依赖ECS运行时

 然而,这些都依赖运行时脚本,不仅影响性能,也就注定了受限,因为你无法使用Graphics接口或BatchRendererGroup进行批量合批渲染。这也是我为什么要用纯Shader实现GPU动画的原因,可以不依赖任何脚本,仅仅通过修改shader参数进行动画切换、融合等。这样就可以使用单个MeshRenderer渲染动画物体以支持Unity合批。同时还可以使用Graphics接口或BatchRendererGroup进行批量合批渲染,更进一步大幅提升性能。

 前面的博文中我们已经详细讲过GPU顶点动画和GPU骨骼动画的实现原理,并且实现了GPU动画任意运行时刻获取任意绑定骨骼的Transform信息,并且支持了动画事件触发,使得逻辑行为与动画保持一致,大大提高了项目品质。此文不再赘述,主要将如何实现控制元素显隐:

【Unity】GPU骨骼 GPU Spine动画 2D/3D渲染性能开挂 合批渲染 支持武器挂载 动画事件 动画融合 实时获取骨骼位置_unity spine动画合批 gpu-CSDN博客

虽然GPU骨骼动画原理一致,但 2D骨骼动画(spine动画)要比3D骨骼动画复杂很多,因为3D动画几乎不会记录复杂的动画帧,如节点显隐等。但是2D动画非常常用,对于2d spine动画,人物向不同方向移动就需要显示不同视角的2D图片,或者凭空显示武器、武器特效等。

 对与Animator中修改贴图的动画帧,GPU动画无法做到,但是我们可以把所有元素罗列好,通过Key显示、隐藏动画帧达到相同的效果。这样我们只需让GPU动画支持显示、隐藏功能即可达到预期。

对于GPU动画支持元素显示、隐藏有多种方式,如,当GameObject隐藏时可以通过反转Mesh法线,Shader使用Cull Back就会自动剔除背面以实现Mesh隐藏;然而此方式受限,有些spine动画通过旋转Mesh镜像以实现转身,这种情况下Shader必须关闭剔除。

还有一种更简单的方法就是直接修改矩阵缩放,当物体不可见时缩放为0,这样同样可以达到Mesh消失的效果。并且本身动画贴图中就是写入的骨骼的矩阵,只需在写入动画贴图前判定骨骼GameObject是否隐藏,隐藏则将矩阵中的缩放置0。

gpu spine动画效果:

实现GPU动画支持显示/隐藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/503863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序常用样式和组件

常用样式和组件 1. 组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器…

2024.3.2每日一题

LeetCode 受限条件下课到达节点的数目 题目链接:2368. 受限条件下可到达节点的数目 - 力扣(LeetCode) 题目描述 现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。 给你一个二维整数数组…

Python打发无聊时光:12.用PyQt实现简易的心电起搏器界面

第一步:装PyQt库 pip install PyQt5 第二步:复制代码 import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QVBoxLayout,QWidget, QLabel, QProgressBar, QSlider, QLineEdit, QHBoxLayout) from PyQt5.QtCore import …

Linux服务:Nginx反向代理与负载均衡

一、Nginx反向代理 1、什么是反向代理? 代理分为两类,正向代理和反向代理。 ①正向代理:帮助用户访问服务器,缓存服务器内容。 ②反向代理:代理服务器处理用户的请求,决定转发请求给谁处理负载均衡的作…

LabVIEW最佳传输系统设计

LabVIEW最佳传输系统设计 介绍了基于LabVIEW软件开发的最佳基带传输系统和最佳带通传输系统的设计。通过软件仿真实现了脉冲成形滤波器和匹配滤波器的设计,证明了系统在消除码间干扰和抗噪声方面的优异性能。此设计不仅激发了学生的学习兴趣,还有助于提…

spring-boot-starter-parent和spring-boot-dependencies介绍

springboot项目的pom文件中&#xff0c;我们经常看见这样(下图)两种springboot的版本依赖管理方式&#xff1b;图片中的这两种依赖声明方式任意用其中一种都可以。文章后面会简单阐述一下区别和使用场景。 事例中完整的pom文件 <?xml version"1.0" encoding&quo…

BetterDisplay Pro for Mac v2.0.11激活版:屏幕显示优化专家

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版下载 &#x1f50d; 精准校准&#xf…

备考2024年汉字小达人:历年考题练一练-18道选择题

新学期开学已经两周了&#xff0c;相信孩子们的学习都已经进入正轨了&#xff0c;心也收回来了。距离2024年第11届汉字小达人比赛还有八个多月的时间&#xff0c;建议如果有可能都让孩子参加一下&#xff0c;无需报名费&#xff0c;如果没时间准备也可以直接上阵参赛&#xff0…

【Maven】Maven 基础教程(三):build、profile

《Maven 基础教程》系列&#xff0c;包含以下 3 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基础教程&#xff08;三&#xff09;&#xff1a;b…

tritonserver学习之八:redis_caches实践

tritonserver学习之一&#xff1a;triton使用流程 tritonserver学习之二&#xff1a;tritonserver编译 tritonserver学习之三&#xff1a;tritonserver运行流程 tritonserver学习之四&#xff1a;命令行解析 tritonserver学习之五&#xff1a;backend实现机制 tritonserv…

如何助力亚马逊美客多等跨境平台迅速推品?自养号测评环境搭建全攻略

为了在亚马逊上迅速推广新品并提升可见性&#xff0c;吸引潜在买家&#xff0c;增加销售额&#xff0c;制定并执行一系列精心策划的行动至关重要。以下是具体的推广策略&#xff0c;以一个月为时间框架进行规划&#xff1a; 第一周&#xff1a;前期准备与产品页优化 市场研究&…

腾讯云优惠券领取的三个渠道,一个比一个优惠!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…