使用Godot发布VR游戏并移植到PSVR2:部分事后分析

Hacker News Top 新闻

摘要

一份关于使用Godot发布商业VR游戏并移植到PSVR2的详细事后分析,讨论了成本(约8万英镑的早期采用者额外成本)、重写渲染服务器等技术挑战,以及社区在主机移植方面的努力。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/29 15:55

# 使用Godot开发VR并移植到PSVR2:部分事后分析 来源:https://www.claire-blackshaw.com/blog/2026/07/shipping-godot-vr-and-porting-to-psvr2-a-partial-post-mortem/ **太长不看版:**本文是2026年Develop Brighton大会(https://www.developconference.com/)演讲的文字版本。是的,Godot确实能承载商业VR项目,我们为此支付了约8万英镑的早期采用者税。内容包括重写Godot核心的实战经历、与George Marques(https://georgemarques.dev/)和André Ewald(https://rhinegames.com/)合作的社区PS5/PSVR2移植历程、为何最终为4.7版本重写整个渲染服务器,以及对平台厂商和渲染程序员的呼吁。本文不含任何PlayStation保密协议内容,敬请谅解。 --- *本文基于的扩展演讲录音。* --- 我在本周的Develop Brighton大会上做了这个演讲,现在想分享一个更公开的版本。节奏放慢些,不受会议时间限制,同时配上文字版方便喜欢阅读的朋友。抱歉,演讲中没有任何受PlayStation保密协议限制的内容。确实有些更劲爆的内部细节,但那些只能在合作伙伴空间里分享。 这原本应该是一篇完整的事后分析。结果接二连三发生了一些事,所以现在变成了部分事后分析。原因你很快就会明白。 标题幻灯片:使用Godot开发VR并移植到PSVR2——关于移植和Godot VR的事后分析,Develop Brighton 2026 ## 我是谁 个人简介幻灯片:从PS2时代开始发行业务,Godot贡献者,负责PlayStation和PSVR2移植,改进OpenXR生态系统 我是Claire,从PS2时代就开始做游戏开发。我是Godot的贡献者,主要参与OpenXR部分,同时也越来越多地涉足渲染相关工作。我发行过各种类型的游戏,从2013年就开始做VR。我曾加入Sony负责PSVR网络,我的团队在那里做了大量元宇宙方面的工作:社交VR聊天、手势交互等等。最近我发行了《Dreams》和《Substance 3D Modeler》,现在正在开发《Augmental Puzzles》(https://store.steampowered.com/app/3389740/Augmental_Puzzles/)。 ## 先说清楚:Godot能用 Godot对许多团队都适用,但在开放世界、流式加载、免费资源商店和主机移植方面需要留意 这次演讲有些部分听起来可能有点负面,我想先说清楚这不是本意。Godot对许多许多团队都适用。如果你做2D游戏,它基本上是首选;对于大多数简单的3D游戏,它也非常可靠。 不过也要坦诚地说一些局限。如果你做开放世界或流式加载密集型的游戏,需要大量角色动画,或者追求非常写实的艺术风格,Unreal可能更合适。如果你是刚入门的VR开发者,尤其是做独立头显平台,可能更偏好Unity,因为它的渲染器能力更强。Godot有资源库,但目前只支持免费资源,以后会改变,但现阶段生态系统不如其他引擎成熟。至于主机移植,有很多工作室提供服务,但社区移植方面还不够成熟。 ## Godot能承载商业VR项目吗? Godot是否能承载商业VR项目:能,但与Unity管线相比,需要支付约8万英镑的早期采用者税,这还不包括PS5/PSVR2的移植工作 **能。**但我们确实支付了大约8万英镑的早期采用者税。这些是纯引擎工作,如果使用Unity发行就不需要做。这并不意味着每个用Godot做VR游戏的工作室都需要支付这么多。如果现在开始,我认为不会那么高,但我觉得仍然会有隐形成本。而且这个数字不包括PlayStation和PSVR2的工作量。那是另一套数字了。 我们还处于早期接入阶段,所以嗯,能跑起来已经不错了。我在GodotCon的总结文章(https://claire-blackshaw.com/blog/2026/04/shipping_vr_godot/)中详细分解了这8万英镑,想了解明细的话可以去看。 ## 把我们带到这里的游戏 Augmental不是我们的第一款Godot VR游戏。它是我们最终落脚点的作品。 Digging VR幻灯片:块状体素网格、SDF操作、溅射渲染。因缺少渲染功能受阻,这些功能现在有了,但我们等不了 **Digging VR。**一款考古模型制作风格的挖掘游戏。因缺少渲染功能而受阻,我之前写过相关文章(https://claire-blackshaw.com/blog/2024/09/volume_vs_surface/)。我不想写引擎,我想做游戏,所以搁置了。有趣的是:这些功能现在都有了。只是我们等不了。 Rune Magic幻灯片:因概念原因而非技术问题取消,在沉没成本陷阱形成前干净地终止 **Rune Magic。**因玩法原因终止。在沉没成本陷阱形成前干净地取消。这不是Godot的问题,这就是游戏开发的常态。 Magic Shop幻灯片:使用早期Jolt上的自定义物理响应解决了物理问题,资金被砍后取消 **Magic Shop。**基于我妻子第一部三部曲的物理题材游戏。我们在早期Jolt上遇到物理问题,通过自定义物理响应解决了,后来资金被砍就取消了。这也是我离开Adobe重回游戏行业的原因,然后,嗯,任何VR行业的人都知道2024年9月是什么样子。我在《VR行业:资金悬崖》(https://claire-blackshaw.com/blog/2024/10/vrbiz/)中谈过商业方面。 ## 转型:Augmental Puzzles 转型幻灯片:制作一个非常小的、能在Godot技术限制内运行的游戏,验证管道,证明我们能完成。于是出现了数独加上Logitech MX Ink笔 我在Adobe时与Logitech、Apple等多家公司合作过。与Logitech合作的是MX Ink笔(https://www.logitech.com/en-gb/products/vr/mx-ink.html)。我把它支持进了Godot,过程相对无痛,还做了一个小画图演示。完成后我坐在那里想接下来做什么,然后想到:嗯,我真的很想在VR里做数独。这东西不存在。靠,很快就能做出来。赶紧发布吧。 ## Godot的速度 Godot的速度幻灯片:两天内游戏就能运行起来,一周内完成完整菜单流程,谜题游戏意外地完美适合VR 每当有人问我Godot怎么样时,我总是这么说:快速上手真的是一大优势。用它开发是一种享受。大约两天时间,我们就让数独核心游戏跑起来了,一周内就完成了包含游戏几乎所有组件的完整菜单流程。虽然还都是草图级别的图形,但功能都有了。 早期比较不错的一个东西是合成图层(https://godotvr.github.io/godot_openxr_vendors/manual/meta/composition_layers.html),可以用很低的成本获得高质量2D图层。初期对我们来说非常有效,说实话我们本可以就用它们发货。后来我们换了不同的美术风格,所以不再用了,但它们当年真是很好的搭台工具。 然而游戏的规模还是扩大了,原因我后面会讲。最近我们终于能展示一些野心了。 数织游戏已经发布,我们还宣布Augmental Puzzles将登陆PSVR2。 ## 我之前讲过这些 博客、之前的演讲和DevNet:快速回顾幻灯片 我在其他场合也讲过这些。在Develop North大会上我从专业角度讲了Godot。最近在GodotCon上我做了更长的演讲,内容在YouTube上,也写成了博客文章(https://claire-blackshaw.com/blog/2026/04/shipping_vr_godot/)。如果你是PlayStation合作伙伴,我在允许的范围内分享了更多细节。 有一件事我不会展开讲,因为之前说过了:诅咒效应。很多个人问题延误了游戏开发。简单来说:我生活中很多人病了,有人得了癌症,最近我的猫也去世了。我们如今拿这个开玩笑,因为我朋友加入公司后一个月他妻子就住院了。坏运气真是接踵而至。详细版本在《个人旅程》(https://claire-blackshaw.com/blog/2025/06/personal_journey/)里。 ## 这次演讲的意义 为什么要有这个演讲幻灯片:引擎双寡头对这个行业是危险,Unity/Unreal的巅峰正好与VR的兴起重叠,OpenXR一直很脆弱因为没几个人在吐槽它,创新需要试验 这部分对我来说非常重要。我刚入行时,程序员通过修复内部引擎或修改授权引擎来适应当前游戏来提升技能,这是常态。新的主机周期来临时,你几乎必然会被要求把引擎移植到新硬件或支持某种特定的供应商功能。开发者通过实际动手来学习。主机尝试新东西,新东西通常首先出现在主机上,而做新东西就需要有人来支持和协作。 过去十年最大的问题在于,我们在开发VR标准和软件时正好处于引擎双寡头的巅峰。几乎所有人都在用Unity或Unreal,所以很少有人直接参与VR标准的工作,标准也就没做好。我常说,判断一个人是否真正在使用某个东西,就是看他是否在抱怨它。如果程序员使用一种语言、引擎或主机,他们就会吐槽,而这种有依据的抱怨正是改进的来源。缺乏这种反馈严重阻碍了VR的成长。 我还会说,上一个主机周期中有很多创新是人们没有意识到的,因为Unity和Unreal除了一些华丽的图形之外,并没有真正利用主机的优势。VR头显有很多潜力,你从未在游戏中看到它们被发挥出来,就是因为Unity或Unreal的插件不支持。创新需要我们动手去尝试。这也是我倡导Godot的主要原因之一,也是这次演讲的意义所在。 ## 第二幕:为商业VR重写Godot核心 ## Godot在一张幻灯片内 Godot在一张幻灯片内,快速、直白、不完整的版本:90年代风格面向对象引擎骨架、Variant联合类型、互斥锁密集型对象ID数据库、权威场景图、不支持无绑定或线程化的渲染器、基于memcpy和POSIX的内存模型、主要由未在主机平台发布过游戏的开发者构建。好消息:非常模块化 这可能是最受争议的一张幻灯片。它并不是定论,我只是从一个在主机上发布过游戏、可能对Godot不太熟悉的游戏开发者角度来说的。 Godot的核心是90年代风格的面向对象引擎。有些地方做了更新,但骨架就是如此。它的脚本层和扩展主要通过一个封装了常见数据结构的Variant联合类型来实现。核心有一个对象ID数据库来管理所有这些,互斥锁非常密集,实例锁定使得线程化变得很麻烦。还有一个权威场景图,带有相对于父级的变换,这些变换很臃肿,因为它们支持非均匀缩放,这给物理和图形优化带来了一堆问题。渲染器不支持无绑定,也不支持线程化。有一个线程模式,但仍标记为实验性,我们试过,遇到了很多问题,目前仍然不推荐使用。 内存模型可能是最大的问题之一。它非常依赖POSIX,对内存映射的利用不好,虽然pck包格式中有虚拟文件系统,但并没有统一实现。在Android平台上,APK中仍然是稀疏文件。引擎内部大量使用缓存、缓冲和memcpy。很多IO和数据效率问题,很大程度上是因为它主要由未在主机上发布过游戏的开发者构建。 这就是真实的历史。Godot最初是一个商业内部引擎,但没能成功商业化。后来因为一笔资助落地,开源开发者涌入,Godot 2、3和4才诞生。在4.x周期中,我们看到更高层面的参与度大大提升,引擎在各个方面都有了显著改进。但一些核心数据结构在周期中期很难更新,否则会破坏很多东西。 好消息是:**它非常模块化。**我常说一个游戏引擎由100到120个组件组成,让我头疼的部分可能和让你头疼的部分不同。你只需要修复游戏需要的部分。你不需要构建整个引擎。基础情况下大部分地方都够用,你只需根据游戏的需求来改进。它设计得像一辆改装赛车,本就不是完美的。而Unity很难打开引擎盖,即使有源代码许可,它也不是为这种修改设计的;如果你是Unreal上的大型3A项目,几乎肯定也在使用自定义引擎构建,只是更难操作而已。 ## 实战故事1:Label3D吞噬了我的帧率 实战故事1幻灯片:准备发货的构建,性能突然暴跌,平均值看起来还行但卡顿打死人,RenderDoc显示材质创建风暴,Label3D为每个字形生成独立材质,MSDF纹理在帧中增长,VR中一次卡顿就是一次帧提交失败 我们本应在三个月后完成亲友测试版本,即使个人生活有各种状况,然后我遇到了可怕的帧率卡顿。我深入调查了一番。RenderDoc最终告诉了我原因:我的平均帧率没问题,菜单也很简单,没有理由出现渲染性能问题,但我遇到了材质创建风暴,导致卡顿。 定位到了Label3D。它为每个字形创建一个独立材质。每个。单独。字符。它靠多层缓存来大致解决这个问题,但众所周知,高层糟糕的算法决策最终会反噬。MSDF纹理会在帧中增长,上面还会叠加上一堆材质抖动。因为渲染器不支持无绑定,这在VR中就表现为可怕的卡顿。VR中一次卡顿就是一次帧提交失败,无法掩盖。我们会在商店提交中失败,游戏体验也很差。所以我们没有发布亲友测试版本,而是修复了它。 ## FastText,以及Slug专利进入公有领域 FastText修复幻灯片:所有文本节点共享一个FontResource,预烘焙所有字形,每个节点一个绘制调用,通过自定义着色器用实例参数控制每个字体的颜色和主题 修复方案是FastText,我们用来替代Label3D的组件:所有文本节点共享一个资源来消除材质创建问题,预烘焙字形避免帧内增长,每个节点一个绘制调用而不是每个字母一个网格表面,通过自定义着色器用实例参数控制每个字体的颜色和主题。完整经过见《VR文本正在扼杀性能,于是我对Godot的Label3D动了斧头》(https://claire-blackshaw.com/blog/2025/08/fast_text/)。 最酷的部分来了,就发生在本周。我一直说想转向Slug(https://sluglibrary.com/)风格的动态GPU字体,编码实际曲线以获得无限分辨率。大多数GPU字体渲染本来都很好用,但Slug有一个关于条纹压缩技巧的软件专利,这对于使其在VR上足够快至关重要。今年Eric Lengyel将Slug专利放入了公有领域(https://terathon.com/blog/decade-slug.html)。所以在Develop大会上,在准备演讲和见朋友之间,我完成了这项工作。FastText现在有了真正的GPU曲线字体而不是MSDF。无限分辨率的字体和SVG,暂时是单色因为我暂时不需要多色并希望保持高性能,但添加全彩表情符号会相当简单。复杂的SVG渲染也一样。 顺便提一下:Godot中还有另一款优秀的VR游戏在开发中,《Penguin Festival》(https://store.steampowered.com/app/3552090/Penguin_Festival/)。我和Zi谈到这个问题时,他的解决方案是"我就用了TextMesh"。那本来一开始就能用,我现在也告诉别人:对,用那个。它不高效,没那么好,但它能用。

相似文章

这个周末你打算做什么?

Lobsters Hottest

一位开发者描述了将《完美黑暗64》关卡移植到 noclip.website 的过程,强调了读取 N64 显示列表和重新实现渲染引擎的挑战。

为微型掌机打造微型3D渲染器

Hacker News Top

一位开发者分享了他们为Playdate掌机构建3D软件渲染器的经验,从raycaster基准测试开始,讨论了性能挑战以及与复古游戏机的比较。

PortalVR Motion – 用2D方式配合3D追踪Joy-Con畅玩任意VR内容

Hacker News Top

PortalVR Motion 是一款 SteamVR 插件,无需头显即可为VR游戏提供类Wii风格的体感控制。它利用 iPhone 的 FaceID 摄像头在 Windows PC 上实现 Joy-Con 控制器的 6DoF 追踪,支持超过6,000款 SteamVR 游戏,并提供两种追踪方案:iPhone + Joy-Con 或有线连接的 Quest/PICO 头显。