美文网首页
OpenMW聚光灯:三个提交

OpenMW聚光灯:三个提交

作者: PowerSeven | 来源:发表于2021-07-12 17:33 被阅读0次

    说明:本文是个人翻译的开源项目OpenMW的阶段简报。以下为译文。

    OpenMW Spotlight: Submit to the three… 2021-03-05 - lysol

      大家好,并在此对最近疏于更新表示抱歉。

      虽然疏于更新新闻,可不意味着我们在开发工作上偷懒。恰恰相反,但是我们在开发工作上从未放松。从上次发帖以来,我们还是搞了很多事情的。最近没有发声要怪我Lysol。

      当然在这个贴子中我们有成吨的料可以讲一讲,你得等等将要到来的0.47.0版本,从它的《变更日志》中你可以看到我想说的大部分内容。目前让我们聊一聊三个主要功能:Lua、地表植被和“启明”

    1.Lua 脚本

      就像之前我们讨论过的那样,这个项目的目标就是使OpenMW和TES3MP两个项目最终合并到一起。这意味着,OpenMW需要一个兼容性好且对两个项目都有益处的脚本系统。

      一段时间以来,TES3MP一直在使用服务端侧的Lua语言的脚本系统。大部分共识是在此基础上为继,并要为OpenMW实现一个基于Lua的对单人和多人友好的脚本系统。这一系统,将在mod制作者为单人和多人游戏制作mod时发挥巨大的能量。不过关于这个问题的讨论了个来来回回,但从没有实际工作落地。

      因此我们行动力出众的开发者Petr Mikheev(ptmikheev)决定亲自出马。Petr和David C——TES3MP的脚本系统背后的灵魂,讨论了这个问题并且为我们所需要的理想的脚本系统草拟了一个计划。这些工作的成果就是库中被Pert频繁更新的一个合并请求。虽然这项工作仍处于起步阶段(这意味着,不要期望在这个版本中见到它的身影),大家仍然可以通过一些基础脚本来验证它的工作原理。

      落实这个实现对我们推动去硬编码阶段(计划中要随OpenMW 1.0.0发布)来说至关重要。同时它对将OpenMW打造成我们期望中的出色的可mod的引擎也同样重要。所有为原版《晨风》的MSSE-Lua系统(Morrowind Script Extender-Lua,晨风脚本拓展)制作的令人印象深刻的mod,让我们对OpenMW的未来有了惊鸿一瞥。

    2.地表植被

      自从OpenMW实现了对象分页以来,我们一直享受着带远景物体的超远视距,并且程序性能表现也在可接受范围。有些人甚至运行起了草地mod,并且没有出什么大乱子。强调“有些人”的原因是,对象分页的设计初衷并没有考虑地表植被,但是它依然可以提高相关的性能表现。

      进到实例中来说,我们的老兵Andrei Kortunov(akortunov)与影子大师Chris Djali(AnyOldName3)一起致力于通过一个更适合的系统来支持地表植被。你看,支持草丛和其它地表植被需要特殊优化才能获得能接受的性能表现。不然在GPU才能进行渲染之前,每株草甚至每片叶都需要发送到CPU,这将花费大量的时间。这个工作过程被叫做“绘制调用”。绘制调用很慢。慢到你不想在一个场景中有太多次这种调用。减少绘制调用才是我们研发活动单元格对象分页的主要原因,将大量的小物体合并成大得多的对象(从而减少绘制调用),它的适用范围不仅在于远景,同时也用于活动单元。从这里可以获取更多关于对象分页和活动单元格对象分页的信息。

      所以虽然对象分页对于建筑物和小物体来说非常出色,然而对于草丛还有更好的处理手段。特别是如果你希望草丛随风摇曳,伴随你的脚步倒伏。新的地表植被系统使得草丛和其他植被获得更好的性能加持,并且全面支持动作和与角色的互动。

      目前工作聚焦于支持传统mod——以前那些为MGE(Morrowind Graphics Extender)XE制作的作品。这对新的系统可以做什么产生了限制。将来,我们计划实现更好的地表植被处理系统。然而这样的系统将会无法兼容现有的为MGE XE制作的mod。

      现在可以通过未发布的OpenMW构建来体验地表植被处理系统,或者你也可以选择等待下一个版本的发布。在这里还有这里你可以了解到如何激活地表植被mod。

    3.启明

      你知不知道OpenMW只支持每个对象最多八盏灯光?你可能已经注意到在某些特定的地点走动,灯光会忽明忽暗。如果你用上了活动单元格对象分页,你会注意到这样的情况可算不少。

      这个问题在于问我们支持了老式的固定渲染管线(FFP,Fixed Function Pipeline)。每个游戏中的对象同时最多只可以接受八盏光源。其实在原版的《晨风》中同样存在这个问题,不过游戏通过刻意的设计使得你几乎无法发觉这个问题。公平地讲,所有的B社游戏,直到《辐射4》每个对象的光源数量上限都十分受限,并围绕着这个问题进行游戏设计。然而,晨风的设计方式——到处充斥着小型对象,这导致系统创建了大量的绘制调用进而非常低效。当我们通过活动单元格对象分页将小型对象合并到大型对象来削减绘制调用时,由于逼近单个对象的光源数量限制的时间点大幅提前,光源的问题将会展现在我们眼前。之前曾经有人尝试解决这个问题,不过事实证明这是个棘手的任务。

       这就是Cody Glassman(wazabear/wazabear_notabear)的切入点。你可能先前就通过他的OpenMW分支(实现了更加高级的UI功能)已经遇到过他。一旦Lua合并进来,顺便他的分支就能以更轻量、更像mod的方式重新实现。按你胃,Cody决定来看一看这个光源限制的问题,并形成了这个合并请求。它现在还没有完成,不过他已经给了我们一个相关程序运行的出色的例子,如下:

      此处应有视频

      这样的一个场景在现有版本的OpenMW中是不可能出现的。虽然在现实世界中在灯光上如此疯狂是一个非常糟糕的主意,不过至少这个例子证明了以后mod制作者在灯光上遇到的问题会比现在少得多。终端用户将也可以在通过活动单元对象分页获得出色的性能提升的同时而免受灯光弹入弹出的问题的困扰。

    下一个版本

    是的,我们计划在不远的将来发布0.47.0!敬请期待(此处为引申义,原文留在这个频道),发布时我们将会通知你。

    感谢阅读,下次再见。

    想写点评论?

    相关文章

      网友评论

          本文标题:OpenMW聚光灯:三个提交

          本文链接:https://www.haomeiwen.com/subject/puxdpltx.html