NeoPoculus

NeoPoculus

NeOculus分支,已更新对新模组、光影及优化功能的兼容性,并新增了一个针对Sodium-Embeddium跨模组的兼容层。这使得一些原本要求Sodium的模组现在能与Embeddium兼容。

杂项

NeOPoculus

下载数 ![可用版本](http://cf.way2muchnoise.eu/versions/Available for_neopoculus_full.svg) Modrinth Discord 许可证

为 NeoForge 提供着色器支持,并让世界超越你的渲染距离继续延伸。

NeOPoculus 是 NeOculus 的一个分支, 后者又分支自 Oculus,而它则是由 Iris 移植到 Forge 系加载器上的。 这些项目所做的一切——加载 OptiFine/ShadersMod 光影包、游戏内光影设置界面、Embeddium 集成——都是他们的功劳,而在这里所有这些功能依然可用。

本分支新增的是 Horizon:一个内置的远距离地形系统,外加一系列针对此前会崩溃或无法渲染的模组和平台的兼容性修复。

Discord · 源代码 · 报告 Bug


Horizon —— 超越视距的地形

Horizon 会记录你探索过的地形,按世界和维度分别保存,并将其绘制到远超服务器视距之外。它不需要服务端模组,也无需额外下载:所有内容都从客户端自身已接收的区块中捕获,因此它在原版服务器、领域服和单人世界中都能正常工作。已探索的地形会写入磁盘,因此世界在不同游戏会话之间能保留其全景。

细节会随距离分五个层级逐渐淡化,因此远处的地面依然保持低成本。离你最近的一圈以完整方块分辨率绘制,并有意与已加载区块重叠,这正是衔接处不可见的原因——它还会回填仍在加载中的区块,因此世界不会再在渲染距离边缘突然冒出。

默认开启,只需一个勾选框即可关闭。

两种引擎

经典(默认) 体素(实验性)
存储内容 地表高度、水面高度、每列一种颜色 真实方块、每格生态群系和光照
洞穴、悬垂、室内 不表现 表现
纹理 每列平铺颜色 真实方块纹理
方块形状 完整立方体 台阶、雪、地毯、栅栏、植物保持其形状
水 不透明表面 真正半透明

经典引擎基于高度图,开箱即用:更轻量、历史更久、久经考验。体素引擎较新,也是开发投入的重点——如果你希望在远处看到洞穴、纹理和真实的方块形状,可以在 体素引擎(实验性) 下开启它。它被诚实地标记为实验性:它是两者中较新的一个,实际应用时间较短。


光影包支持

远处的地形经由你的光影包渲染,因此它会获得光影包自身的光照、雾效和阴影,而不是像贴在地平线上的平面剪贴画。

这有两种实现方式。支持 Distant Horizons 的光影包包含 dh_terrain 程序,Horizon 会将其地形送入该程序。没有此程序的光影包则会改用其普通的 gbuffers_terrain 程序——每个光影包都有这个程序,这也是唯一能显示真实方块纹理的路径。

在 16 个测试光影包中,11 个能渲染带阴影的远处地形:

  • 通过 dh_terrain —— Bliss、BSL、Complementary Reimagined、Complementary Unbound、Sildur's Vibrant Shaders、Solas
  • 通过 gbuffers_terrain —— ARTShade、Aurora's Shaders、Kappa、Lux、The Better Default

另有五个光影包目前在本模组中完全无法加载:iterationT、Noble、PaintBound、photon 和 Reverie。它们在 Embeddium/Iris 层的着色器编译阶段即失败,报错类似 undefined variable "iris_FogColor"。这是着色器技术栈本身的缺陷,与 Horizon 无关——无论远近地形是否开启,这些光影包在本模组中都无法工作。这是已知问题,而非受支持的配置。

未列入此列表的光影包属于未经测试,而非不支持。


多人游戏与预生成地形

服务器管理员可以提前生成远处地形,而不是等待玩家探索,并在玩家加入时将其流式传输给玩家——这样新玩家能立即看到完整的景观,而不是一堵缓慢退去的雾墙。

/horizon lod 命令可为一个区域、一个半径范围或整个世界生成地形,并限制为权限等级 4(服主)。从服务器接收的地形被视为不可信数据:方块和生物群系 ID 会被转换为客户端自身的编号体系而非直接采用,长度和 ID 都经过范围检查,并且磁盘预算限制了单个会话可接收的数据量。最坏情况下,一个不正常服务器只会导致远处景色看起来怪异。

从命令生成 LOD 需要在单人世界中使用体素引擎。

磁盘使用

远处地形会缓存在磁盘上,且缓存有上限。达到上限时会明确告知你,而不会让你困惑为什么地平线不再扩展。可选的自动清理功能会优先删除距离你最远的区域以释放空间——你实际生活的区域会被保留,旧探险的远端最先被清除。清空按钮可完全清除缓存,并带有确认勾选。


设置

所有设置均位于 视频设置 → Horizon LOD(Embeddium 的设置界面,或原版界面)下,可在游戏中编辑。

设置 默认值 功能
Horizon LOD 开启 总开关。
体素引擎 关闭 较新的引擎:洞穴、纹理、真实方块形状。
使用着色器渲染 开启 通过你的光影包绘制远处地形。
LOD 距离 256 区块 远处地形延伸的距离(16–4096)。
远处植被 33% 绘制多少远处的草和花。通常是最大的单项性能提升来源。
每单元 LOD 纹理 开启 在着色器下以真实尺寸显示方块纹理;代价是几何体。
着色器下的纹理化 LOD 关闭 即使光影包支持 Distant Horizons 也强制使用纹理化路径。
LOD 内存预算 256 MB 体素引擎在写回磁盘前可在内存中持有的地形数据量。
自动清理 / 清空 关闭 磁盘缓存管理。

另有细节环、上传速率、工作线程和保存间隔等选项可供调优。

所有选项也会写入 config/neoculus-horizon.properties。

如果远处地形让你性能开销过大: 首先降低 远处植被——植物是大量细小的透明四边形,每像素的成本远超实体地面。然后降低 LOD 距离,最后关闭 每单元 LOD 纹理。


兼容性修复

以下是对此前损坏内容的修复,而非新功能。

基于 Sodium API 构建的模组

大量渲染模组都是针对 Sodium 的公开 API 编写的。在运行 Embeddium 的 NeoForge 环境中,这些类不存在,此类模组会在加载时因 NoClassDefFoundError 直接崩溃,根本到不了主菜单。

本分支内置了该 API 的替代实现——颜色和法线辅助程序、矩阵和内存内建函数、精灵工具类,以及常见的顶点格式和属性——使这些模组能够加载运行。它们通过普通路径而非 Sodium 的快速路径渲染,这在此技术栈上是正确的结果:快速路径会礼貌地报告“不可用”,而行为规范的模组会回退到自己的实现。

有两个诚实的注意事项。一个强制要求快速路径而非仅请求它的模组仍然会拒绝运行——该 API 同时设计了“尝试”和“必须有”两个入口点,只有前者能优雅降级。此外,目前只有 Flerovium 经过了端到端验证;其他基于 Sodium API 的模组很可能正常工作但未经过测试。如果有模组无法正常工作,在 Discord 或问题追踪器上报告将非常有帮助。

LittleTiles

LittleTiles 在 Embeddium 下可正确渲染,包括半透明方块——玻璃结构能正常显示而不会消失或渲染为不透明——并且当你编辑结构时,面会正确重新剔除,因此方块在修改后不会留下空洞或过时的表面。

平台与驱动程序

  • macOS —— 捆绑的 AcceleratedRendering 此前会在加载世界时导致游戏原生崩溃,且仅限无 OpenGL 计算支持硬件,包括所有 Mac。现已检测到该情况并透明禁用,回退到原版渲染。
  • Sinytra Connector —— 安装 Connector 时,不再在 初始化游戏 阶段崩溃。
  • 更严格的 OpenGL 驱动程序 —— 游戏不再因驱动程序报告 GL 3.2 核心上下文但通过扩展暴露 4.x 而拒绝启动。
  • 实体闪烁 —— 实体、方块实体、手持物品和手臂在移动时不再闪烁消失。

AcceleratedRendering 也已从 1.0.0 更新至 1.0.8。


需求

  • Minecraft 1.21.1
  • NeoForge 21.1.0 或更新版本
  • Embeddium —— 必需

与 OptiFine 不兼容。请勿与 Oculus、Iris 或 NeOculus 一并安装——本模组将取代它们。


已知限制

  • 不宣称任何性能数据。 Horizon 绘制了更多世界,因此成本高于不绘制。是否值得取决于你的硬件,上述设置的存在正是为了让你自己决定。
  • 十六个测试光影包中有五个无法加载,原因与远处地形无关(见上文)。
  • 远处地形目前以双面绘制;单面绘制已在计划中,将使其更省性能。
  • 你看不到的地下地形仍会被绘制。剔除它们已在计划中。
  • 经典引擎无法显示洞穴或悬垂——这正是体素引擎的用途。

支持与 Bug 报告

报告渲染问题时,附上光影包名称和版本、你的 latest.log,以及问题在关闭 Horizon LOD 后是否仍然存在,会非常有帮助——仅最后一项就能区分 Horizon 的 Bug 与着色器技术栈的 Bug。


致谢与许可证

本模组建立在前人的工作之上:

Horizon 的灵感来自 Distant Horizons 和 Voxy,并与两者不共享任何代码。

依据继承自 Iris 的 LGPL-3.0 许可证授权。