《Cookie Cutter》中2000多张精灵表与10000个2D光源的管理之道

一个小团队如何在多个平台上以优秀的效果展示手绘动画?Subcult Joint 工作室给出了答案。他们用六年时间开发出了游戏《Cookie Cutter》。游戏中使用了数千个使用传统动画技术制作的高分辨率资产,而且这些资产都在 Unity 中进行了优化。由于工作室需要在清晰的视觉效果和流畅的游戏玩法之间找到平衡,因此他们广泛使用了 2D 光照来增强图形的深度并凸显以探索为核心的游戏设计。

继续阅读,了解他们是如何实现这一愿景的;以及项目后期的意外变化如何让他们解锁了更快的资产管理能力,并将光照设置提升到了一个新的水平。

身兼艺术家、动画师、Unity Learn 讲师的 Subcult Joint 创始人 Stefano Guglielmana,从 2018 年就开始开发游戏《Cookie Cutter》。他的灵感来自之前一个 Unity 项目中被拒绝的角色:Cherry,一个说话强硬的机器人。他说:“我爱上了她的设计,所以我开始为她制作动画。”Stefano 对《Cookie Cutter》混合了清版动作游戏和类银河战士恶魔城(Metroidvania)的游戏玩法有着清晰的构想,但需要开发人员的支持来实现这一目标。在获得资金后,他聘请了程序员 Francesco Bizzini 和一批艺术家和设计师来合作开发这个项目。

他们取得了这些成果:

  • 发售一个月就售出 6 万份,收入 120 万美元

  • 轻松管理 2000 多张精灵图表和 50 多个精灵图集

  • 使用超过 10000 个 2D 光源点亮游戏

  • 在项目中期成功升级到 Unity 2022 LTS

内容的呈现方式

《Cookie Cutter》的手绘视觉效果是一个主要卖点。Stefano 知道它们的制作会很复杂,但额外的努力肯定是值得的。他说:“视觉享受是让我们爱上电子游戏的原因。在 Subcult Joint,我们十分钦佩吉卜力工作室和迪士尼的大师们。虽然我们还没有达到他们的水平,但在《Cookie Cutter》中,我们想要挑战自己的动画技能,努力制作出一款非常酷的游戏。”

对于一个小型团队来说,这个项目极具挑战性。大部分艺术资产(超过 1000 个背景、精灵、动画和粒子效果)在视觉上非常复杂,并且都是使用传统动画技术精心制作的。在《Cookie Cutter》中,无论是玩家角色(Cherry)还是 NPC(27 种标准敌人类型和五个巨型 Boss),每个角色都有 20 到 40 个动画。每个单独的动画可能需要 8 到 48 小时才能完成。不同的艺术家会使用不同的 DCC(数字内容创建工具),但 Stefano 大多数资产都是用 Adobe Photoshop 制作的。

当 Stefano 完成一幅插画后,他使用 PSD Importer 将其转换为 8K 纹理,然后在 Unity 编辑器中进行优化,以防止显存溢出问题。通过合理地使用纹理导入设置,他成功减少了每个平台的纹理大小,并且遵循二的幂次方尺寸规则等最佳实践进一步优化了纹理。

*在编辑器中查看 Cherry 的各种动画状态。Subcult Joint 花了很多时间处理动画过渡,以确保流畅的游戏体验。

Stefano 表示:“在完成 Photoshop 中的工作后,我通过将每个动画帧逐一排列到一个新图像上,手动创建了精灵表(Sprite sheets),每个图表的尺寸始终是 512 x 512 的倍数,遵循 Unity 中的二的幂次方尺寸规则。在此基础上,Unity 的 Sprite Sheet Editor 让我可以轻松地切割精灵表,或者通过移动支点(pivot)或每帧的像素来进行其他调整。”这些工作流程确保了《Cookie Cutter》的视觉效果在多个平台上得到了优化,并且减少了性能问题。

在项目结束时,Subcult Joint 工作室将 2000 多张精灵表打包成 50 多个精灵图集(Sprite Atlases),并按角色进行分类。“精灵图集让将游戏导出到不同的目标主机变得非常简单,同时保持了稳定的帧率。我们的目标基本上是确保 60 帧每秒(fps),以保持游戏玩法流畅、整体性能顺滑。这极大地优化了内存使用,并且使加载时间变得更快。”Stefano 说道。

自定义游戏玩法

Stefano 希望避免其他注重动画的游戏常犯的错误。他解释道:“有很多动画的游戏可能会显得笨重。有时候,动画师想展示自己的技艺,但最终会影响游戏的流畅性。”他补充道:“在《Cookie Cutter》中,我们同样注重游戏玩法的流畅性,因此,当你手持控制器时,游戏的操作体验和动画一样顺畅。”

考虑到这一点,他需要一种能在编辑器中快速调整游戏玩法,同时又不担心破坏项目的方法。这就是 Francesco 所说的编程方面的最大技术难题之一:在 Unity 中创建一个能有效运行且不依赖过多代码干预的系统。

他表示:“我的目标是为设计师提供一种方式,让他们能够直接从编辑器中自定义游戏的任何方面。”借助 Unity 的内置扩展性,Francesco 能够添加自己的自定义功能,弥合他与团队中技术较弱的艺术家之间的知识差距。

为了实现快速的游戏玩法和激烈的连击动作,Francesco 在 Unity 中实现了第三方可视化工具 ActionGraph,以模块化的方式构建和设计有限状态机(Finite State Machines)。当动画的精灵图(Sprites)被加载时,ActionGraph 使得每一帧都可以加入游戏逻辑,从而让艺术家能够即时调整设置,例如碰撞体(colliders)或伤害数值(damage numbers)。举个例子,Stefano 可以使用 ActionGraph 在攻击中添加一个命中框(hitbox),并设置它在特定帧激活,启用和禁用跳跃计数器,触发战斗资源的生成和消耗等等,这些都无需程序员的参与。

Francesco 还编写了许多自定义的编辑器功能,以便 Subcult Joint 中以艺术家为中心的团队能够更多地参与项目。基于 xNode 可视化系统,UpWire 让艺术家能够轻松地管理人类和 AI 输入、编辑碰撞体、为特定动画节点添加视觉效果等。

*《Cookie Cutter》的图形连击系统(Graph Combo System)使 Subcult Joint 可以自定义攻击的命中框和参数,以创建连续的攻击、添加像摄像机震动这样的视觉效果,以及调整敌人对攻击的反应方式。

Francesco 解释道:“我把它打造成为了一个真正的战斗系统编辑器。它能够处理所有游戏变量,因此只有当玩家解锁了某个技能、武器或升级后,并且处于正确的位置时,才能执行特定的动作,例如空中攻击或地面攻击。”UpWire 还能处理物理中的力、位置转换和身体旋转等设置,这样艺术家就能更轻松地试验战斗机制。

*在对战 Boss 的图形连击系统(Graph Combo)中,Subcult Joint 可以调整攻击命中框的力、方向和反弹值,或自定义 Boss 如何对 Cherry 使用不同武器类型的攻击作出反应。

Timeline EZ Events 是 Francesco 的另一个自定义工具,它让设计师能够直接在编辑器中发送消息并调用函数(包括对场景对象进行操作),并为 GameObject 添加多种功能。例如,团队可以创建一个控制杆,当它被拉动时,不仅可以解锁一扇门,还能同时隐藏地图和小地图上的“上锁的门”标记。

Subcult Joint 使用 Timeline EZ Events 创建了《Cookie Cutter》的过场动画。这个工具让他们可以将角色动画、摄像机移动、音频和视觉效果按顺序排列,制作电影式的场景。

为了帮助设计师处理《Cookie Cutter》的小地图(在任何以探索为重点的游戏中,这一部分非常关键),Francesco 创建了 EzMiniMapPro。Francesco 说:“这个工具用于创建游戏区域的地图,并为图像生成提供了一些有用的自定义和优化。在运行时,它支持基于摄像机视野的动画叠加标记和自动探索遮罩。这个遮罩可以通过 SaveGame 进行存储和恢复。”

创建和实现这些自定义功能虽然需要付出不少工作,但它为整个团队带来了创作自由,让 Subcult Joint 的每个人都能参与到《Cookie Cutter》的设计、机制和游戏玩法平衡中。

使用 EzMiniMapPro,Subcult Joint 能够捕捉他们在编辑器中构建的整个地图,并将其导出到 Photoshop。然后,Stefano 可以在生成的地图上进行绘制,使其与游戏的视觉风格匹配,之后再将其导回到 Unity。

设计游戏世界

《Cookie Cutter》中的巨大世界(即 Megastructure)包含九个可供探索的区域。一旦某个区域的概念原型定稿,Subcult Joint 的关卡设计师 Gabriel Raymond Roy 就会为该区域制作灰盒(grey-box)模型,创造一个玩家需要探索的迷宫。

Stefano 说:“一个好的关卡设计师知道如何创建既有趣又值得反复探索的主要和次要路径。每个死胡同都应该为玩家提供某种奖励,每个开放区域都应该遭遇敌人,让玩家可以收集材料。”

当某个区域的灰盒模型设计完成后,Stefano 和设计师们就开始为场景添加环境细节,将手绘的精灵图(Sprites)沿 Z 轴的四个点分层排列。《Cookie Cutter》使用的是一个透视相机视角,并没有编写视差效果(parallax)。因此,当玩家移动时,他们会看到某些元素在透视中显得“错位”。Cherry 站在“默认”位置旁边,与敌人、物品和平台等可交互的游戏对象一起,而非交互的前景、背景和“远距离”元素则为场景视图增添了模拟深度。

照亮游戏世界 Megastructure

Stefano 开玩笑地说:“我们试图为每个区域赋予独特的个性,但由于游戏背景是赛博朋克风格,加上团队对机库和金属工厂的偏爱,我不确定是否真的成功为每个区域增加了独特性。”

为了赋予每个区域独特的视觉风格,Subcult Joint 大量使用了 URP 中的 Spot 和 Freeform 2D 光源。《Cookie Cutter》的世界里有超过 10000 个这样的光源。Stefano 说:“游戏中的每个光源都会实时照亮我们的精灵,创造出角色、动画和环境之间的紧密而自然的协调感。在黑暗的地方,角色会被阴影覆盖,在外部区域暴露在饱和、受污染的天窗光下时,则会沐浴在光线中。我非常喜欢这些细节!”

Subcult Joint 在游戏中直接使用了 Unity 的 2D 光照,将它们应用到与环境精灵图相同的Z轴层上,没有进行额外的调整。Stefano 解释道:“默认的 2D 光照非常棒,可以照亮游戏区域,而且可以决定它们影响哪些层。我们希望默认层始终对玩家清晰可见,这样他们就能明白哪里可以走,哪里不能走。然后我们还在背景、前景和远距离层上添加了光照。”

《Cookie Cutter》这款游戏的引人注目的 2D 光照在整体游戏设计中发挥了重要作用。作为一款类银河战士恶魔城类型的游戏,它侧重于探索。光照被用来为玩家提供环境线索。Stefano 解释道:“光照讲述了一个故事,它告诉玩家应该去哪儿,引导他们走上主路径,或者隐藏一些次要的可选路径。”

闪烁的灯光可用于吸引玩家的注意力。Stefano 分享了他们是如何制作这种效果的:“2D 光照的优势在于,你可以对它们进行动画处理。制作闪烁的灯光非常简单:选择光源,进入动画窗口,创建一个新的动画,调整光源的强度(0, 9, 0, 9)。如果你想在其他地方创建相同的效果,还可以将这个动画复制到其他光源上。”

在开发的最后阶段升级Unity版本

在开发的最后阶段,《Cookie Cutter》的 PlayStation 5 版本遇到了显存溢出的问题,阻碍了游戏的发布。Subcult Joint 通过升级 Unity 版本来解决这个问题。

在如此接近游戏发布的时间点进行版本升级并不是最理想的选择,但如果不解决这个问题,游戏就无法登陆 PlayStation 庞大的玩家市场。因此,Subcult Joint 团队决定全力以赴,将项目迁移到当时最新的 Unity 2022 LTS 版本。这次升级让他们能够使用新的性能分析和调试工具,比如更新后的 Memory Profiler(内存分析器)。

Francesco 表示:“Memory Profiler(内存分析器)中新的快照对比功能帮助我们识别并解决了长期存在的显存溢出问题。2022 LTS 版本在导入纹理时速度也更快了,而且这次升级最终让我们的游戏变得更加稳定。”

升级后,团队能够对《Cookie Cutter》的视觉效果进行最后的打磨,而这些优化在之前是无法实现的,因为他们现在可以使用正式版的 2D 光照系统。但这也意味着他们需要根据新的参数,逐一检查和修复游戏中之前使用的数千个实验性 2D 光源。幸运的是,得益于2022 LTS 版本中的一些功能,这一过程变得更加高效。

通过 Unity 2022 LTS 版本中更新的精灵图集功能,Subcult Joint 团队能够更加轻松、高效地将数百个手绘动画推送到不同的目标平台。同时,URP 正式版的 2D 光照系统也帮助团队为游戏环境增添了更强的深度和氛围感。

Stefano 解释道:“我们使用了新的 2D Light Explorer 来选择每个光源并手动调整。我们主要使用了 Spot 光源和 Freeform 光源,而 2022 LTS 实际上更新了 Freeform 光源的衰减特性,看起来比旧版好得多。虽然工作量很大,但我们成功修复了需要特别处理的技术问题,并进一步提升了游戏的质量。”

Subcult Joint 的首款游戏《Cookie Cutter》是艺术家和程序员紧密合作从而创造奇迹的一个例子。这个小团队制作出了一款高视觉追求且成功的类银河战士恶魔城游戏,在发布的第一个月就售出了超过 60000 份,并且他们没有在画质或游戏玩法上妥协,始终坚守最初的创作理念。

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

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

相关文章

什么是实景VR?实景VR应用场景

实景VR,即基于真实场景的虚拟现实技术,是利用计算机技术生成三维环境,以模拟并再现真实世界场景的技术。 用户通过佩戴VR设备(如VR头盔、手柄等)或通过电脑设备,可以沉浸在一个高度仿真的虚拟环境中&#…

内核性能测试(60s不丢包性能)

以xGAP-200-SE7K-L(双口10G)在飞腾D2000上为例(单通道最高性能约2.8Gbps) 单口测试 0口: tcp: taskset -c 4 iperf -c 1.1.1.1 -i 1 -t 60 -p 60001 taskset -c 4 iperf -s -i 1 -p 60001 udp: taskse…

58. 区间和

题目链接: 58. 区间和 题目描述: 给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后…

C#进阶(2)stack(栈)

前言 我们前面介绍了ArrayList,今天就介绍另一种数据结构——栈。 这是栈的基本形式,博主简单画了一下,你看个意思就行,很明显,这种数据有一种特征:先进后出。因为先进来的数据会在下面,下面是密闭的,所以只能取后面进来的。 C#为我们封好了这种数据结构,我们不用担…

汽车工厂数字孪生实时监控技术从数据采集到三维驱动实现

在工业智能制造推动下,数字孪生技术正成为制造业数字化转型的核心驱动力。今天详细介绍数字孪生实时监控技术在汽车工厂中的应用,重点解析从数据采集到三维驱动实现的全流程技术架构,并展示其在提升生产效率、降低成本和优化决策方面的显著价…

git|gitee仓库同步到github

参考:一次提交更新两个仓库,Get 更优雅的 GitHub/Gitee 仓库镜像同步 文章目录 进入需要使用镜像功能的仓库,进入「管理」找到「仓库镜像管理」选项,点击「添加镜像」按钮绑定github绑定成功后再次点击添加镜像如何申请 GitHub 私…

原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统背景 在数字音乐产业迅猛发展的当下,Spotify、QQ 音乐、网易云音乐等音乐平台的曲…

RustDesk

配置中继服务器 https://rustdesk.com/docs/zh-cn/self-host/windows/ 服务器端 下载Windows版本 rustdesk-server-windows-x86_64.zip,安装路径为:C:\Program Files\RustDeskServer\bin。执行 hbbr.exe 和 hbbs.exe 两个应用程序。这两个应用提供了两…

django中用 InforSuite RDS 替代memcache

在 Django 项目中,InforSuite RDS(关系型数据库服务)无法直接替代 Memcached,因为两者的设计目标和功能定位完全不同: 特性MemcachedInforSuite RDS核心用途高性能内存缓存,临时存储键值对数据持久化关系型…

leetcode 57. Insert Interval

题目描述 代码:由于intervals已经按照左端点排序,并且intervals中的区间全部不重叠,那么可以断定intervals中所有区间的右端点也已经是有序的。先二分查找intervals中第一个其右端点>newInterval左端点的区间。然后按照类似于56. Merge In…

去年开发一款鸿蒙Next Os的window工具箱

持拖载多个鸿蒙应用 批量签名安装 运行 http://dl.lozn.top/lozn/HarmonySignAndFileManagerTool_2024-11-26.zip 同类型安卓工具箱以及其他软件下载地址汇总 http://dl.lozn.top/lozn/ 怎么个玩法呢,比如要启动某app, 拖载识别到包名 点启动他能主动读取包名 然后…

Trivy:让你时刻掌控的开源安全扫描器

深入了解 Trivy:全面的安全扫描工具 在如今互联网快速发展的时代,软件的安全性显得尤为重要。随着应用程序的复杂性增加,其可能带来的安全漏洞也在不断增多。如何快速、准确地发现这些潜在威胁是每个开发者和运维人员心中的课题。今天,我们将为大家介绍一个开源的安全扫描…

网址为 http://xxx:xxxx/的网页可能暂时无法连接,或者它已永久性地移动到了新网址

这是由于浏览器默认的非安全端口所导致的,所谓非安全端口,就是浏览器出于安全问题,会禁止一些网络浏览向外的端口。 避免使用6000,6666这样的端口 6000-7000有很多都不行,所以尽量避免使用这个区间 还有在云服务器中&#xff0c…

Jenkins 执行器(Executor)如何调整限制?

目录 现象原因解决 现象 Jenkins 构建时,提示如下: 此刻的心情正如上图中的小老头,火冒三丈,但是不要急,因为每一次错误,都是系统中某个环节在说‘我撑不住了’。 原因 其实是上图的提示表示 Jenkins 当…

运维实施31-NFS服务

NFS概述 NFS(Network File System)网络文件系统,主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux。 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用支持多…

蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)

本文介绍蓝牙协议从物理层到应用层的完整通信流程,并详解了 Linux 下主流蓝牙调试工具的使用方法,适用于嵌入式蓝牙驱动开发、BLE调试、通信协议分析等场景。 🔧 1. 蓝牙架构概览 ✅ 芯片架构 单模芯片:仅支持 BLE 或 Classic 蓝…

激光雷达定位算法在FPGA中的实现——section3 Matlab实现和校验

1、校验section2的计算方法是否正确 以section1里面的图示 举个例子: 1.1 手动计算 可以计算出4*4方阵C相关参数: 可以计算出余子式矩阵C_1相关参数:

数据结构(2)线性表-顺序表

知道一个算法的好坏怎么去判断以后,就该正式的去学习一些常见的数据结构,当然,这里的数据结构仅仅是初阶,不会挨个一个一个学完,后期慢慢来。 一、数据结构总论 一般按照逻辑结构和存储结构来分类,在初阶…

性能测试详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是性能测试 先看下百度百科对它的定义 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试 我们可以认为…

每日Prompt:三只动物与地标自拍磨砂玻璃后的虚实对比剪影

提示词 一张黑白照片,展示了一个[主体]在磨砂或半透明表面后的模糊剪影。其[部分]轮廓清晰,紧贴表面,与其余朦胧、模糊的身影形成鲜明对比。背景是柔和的灰色渐变色调,增强了神秘和艺术的氛围。