Java 版光影问答

未经优化的文档

这篇文档的格式较为不规范。

为什么 MC 的光影优化如此糟糕?

有以下几个原因:

  • OpenGL 本身性能不差,但是选用的版本老旧,导致老旧的着色器代码具有极大的优化空间
  • lwjgl 封装加上 Blaze3d 封装让代码效率打了折扣;
  • 游戏渲染和主进程绑定在一起,也就意味着虽然 GPU 可能有空闲,但是由于主进程运算阻塞,导致 FPS 降低;
  • 部分优化完全可以达到很好的效果,但是 Mojang 没能力做(例如 Sodium 或者 OptiFine 的优化)。
  • 换言之:
    • 从最底层看,御三家的 OpenGL 实现做的参差不齐;
    • 往上看 OpenGL 本身历史包袱重,而且 Mojang 用的是旧的方法,新的也不会用;
    • 看引擎: lwjgl 也就 MC 在用了,小厂自研,优化一般,单线程运作也限制了过多东西;
    • 看游戏架构:渲染与其他操作绑定同步,只要别的地方出岔子,渲染就卡;
    • 再看看渲染代码:优化二字完全没体现,能用就行;
    • 最后看总体:一代不如一代。

推荐一个漂亮/流畅的光影?

最清楚这个答案的是你和你的设备,而不是回答的任何人!

  • 鉴于不同人对漂亮/流畅的定义不同,我们不可能直接给出答案,也不建议在 已自行体验光影之前 抛出该问题。
  • 光影在游戏中的渲染是一个动态的过程,任何变量(游戏版本地图地形资源包模组数据包,甚至游戏内朝着不同的东西看等等)都会对光影的帧数产生影响,从而使帧数变得不稳定。
  • 最快获取答案的方式是你自己逐个测试,而不是问其他人!

光影区分游戏版本吗?

一般来说,光影不区分游戏版本GLSL 的兼容性可以保证光影能够在 大多数设备 上运行。如果你遇到有部分光影不兼容当前游戏的情况,请检查原因是否为以下几点:

  • 使用了 OptiFine 最新预览版,可能会导致一系列不兼容现象,有时候还会无法启用光影。
  • 使用了 Iris。该模组面向玩家设计,会有部分光影不支持。
  • 光影过于老旧,可能会出现语法不规范,内容不完善等问题。
  • Mod 兼容问题,请检查所用 Mod 是否有不兼容 OptiFine 的说明,包括但不限于:
    • 视觉类 Mod(如: 更好的树叶);
    • 自带渲染的 Mod(如: 植物魔法);
    • 声明了不支持 OptiFine 的 Mod(如:暮色森林)。
    • 如果出现该类问题,请前往 疑难解答 - 模组兼容性 寻找可能的解决方式。
  • 使用了 AMD Radeon 系列显卡。自 2022 年 7 月开始, AMD 大幅重写了显卡驱动,在提升了一定性能的同时,把原本就不佳的兼容性破坏到无以复加。如果想要体验较多的光影,请将显卡驱动回滚至 22.6.1 及以前
  • 使用了 Intel 系列显卡。Intel 系列显卡对光影的支持一直很糟糕。如果你的电脑还有独立显卡,请尽量调用独显来运行游戏。调用独显的具体方法根据显卡商,有不同分类,可通过搜索引擎获取,此不赘述。
  • 客户端游戏版本过于老旧。一些光影(如 PTGI) 不兼容 1.7.10 及以下的老版本,因为这些版本的 OptiFineShadersmod 年久失修,早已不兼容新的光影代码,属于正常现象;
  • 你所用的设备不兼容最新的OpenGL版本。 如苹果公司的 MacBook 最高只支持 OpenGL 4.1,而最新的版本为4.6。一旦光影文件内指定版本高于 OpenGL 4.1(即 GLSL 410 ),便极有可能发生兼容性问题。

Java 版光影能否用 RTX 的光追核心来提供更好的实时光线追踪效果?

可能可以,但不是现在:

  • 目前 Java 版 Minecraft 光影 使用的 图形渲染引擎OpenGL
  • 它没有相关的 API 接口,并不能通过 调用光追核心提高光追效率
  • 但是,Java 版 的以下两个模组,分别是:
    • VulkanMod
    • Sodium 模组新开的 Vulkan 分支。
  • 这两个模组,能够将 MC 的 图形渲染引擎 替换为 Vulkan,理论上可实现调用硬件来加速光线追踪渲染。
  • 但以项目的开发速度来看,想要在短时间内实现对光影的支持,希望非常渺茫。

我喜欢 A 光影的水和 B 光影的云。我可以把这两个包结合起来吗?

通常情况下,不能:

  • Minecraft Java 版光影包 中没有 标准 的做事方式,
  • 所以 不同 的光影包 可以(而且经常会) 以不同的方式实现相同的效果,或者使用相同的缓冲区来保存不同的信息。
  • 因此,通过 简单的添加删除文件 去结合效果是 几乎不可能 的。
  • 但如果你擅长 GLSL,你当然可以试一试。
  • 你也可以询问你想组合光影包的开发者,他们的效果是 如何/在哪里 实现的,以及在这些地方有 哪些信息,这些问题对于结合光影效果是 有必要的
  • 但是,不要指望让开发者 无条件 帮你改光影,或者 教你 GLSL这不是他们的义务!
  • 如果你对学习 GLSL 不感兴趣,你也可以提出 付费 让他人为你制作 组合光影包

OptiFine 能与 IrisSodium 一起运行吗?

不能。OptiFine 与 Iris 在功能上是重复的,两者互不兼容。而钠属于优化模组,只能兼容开源的 Iris,无法兼容 OptiFine。

Java 版 光影能否搭配 DLSS / FSR

理论上:

  • FSR 可以,
  • DLSS 技术未开放,无法搭配。
  • 需要注意的是, PTGI HRR 版本 也使用了与此类似的技术,HRR 的功能也是 降低分辨率提升帧数
  • 这也是很多人为什么说 HRR系列 看起来比 E12 的原因。

光线追踪光影传统光影 的最本质区别是什么?

是否使用了光追算法:

  • 也就是说,无论你使用的 GPU 是谁家的,只要光影文件里存在光追算法,

  • 那就属于 光线追踪光影,而 不取决于是否采RTXRX6000 系列显卡。

Java版 的着色器叫 光影基岩版 的着色器就只能叫 着色器伪光影

  • 从图形学上讲, 光影专业名称就是 着色器

  • 光影只是 国内的另一种好听的说法 ,就像你可以把 引力波 称作 时空涟漪

  • 基岩版由于 接口 先天的缺乏 以及 移动设备性能不足,无法像 Java 版一样做出 效果相对完整 的着色器,但它仍然叫做光影。

  • 有一种说法是,基岩版 PE 端 光影没有实时阴影,不配叫光影。

  • 然而 光影 二字,从来都不是 指代实时阴影,也 不会有任何 一位光影作者会提出 没有实时阴影就不是光影 这种观点!