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
及以下的老版本,因为这些版本的OptiFine
或Shadersmod
年久失修,早已不兼容新的光影代码,属于正常现象; - 你所用的设备不兼容最新的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
能与 Iris
、Sodium
一起运行吗?
不能。OptiFine 与 Iris 在功能上是重复的,两者互不兼容。而钠属于优化模组,只能兼容开源的 Iris,无法兼容 OptiFine。
Java 版
光影能否搭配 DLSS / FSR
?
理论上:
- FSR 可以,
- DLSS 技术未开放,无法搭配。
- 需要注意的是,
PTGI HRR 版本
也使用了与此类似的技术,HRR
的功能也是 降低分辨率提升帧数, - 这也是很多人为什么说
HRR系列
看起来比E12
糊 的原因。
光线追踪光影
与 传统光影
的最本质区别是什么?
是否使用了光追算法:
也就是说,无论你使用的
GPU
是谁家的,只要光影文件里存在光追算法,那就属于
光线追踪光影
,而 不取决于是否采 用RTX
或RX6000
系列显卡。
Java版
的着色器叫 光影
,基岩版
的着色器就只能叫 着色器
或 伪光影
?
从图形学上讲,
光影
的专业名称就是着色器
:光影只是 国内的另一种好听的说法 ,就像你可以把
引力波
称作时空涟漪
。基岩版由于
接口
先天的缺乏 以及 移动设备性能不足,无法像 Java 版一样做出效果相对完整
的着色器,但它仍然叫做光影。有一种说法是,
基岩版 PE 端
光影没有实时阴影,不配叫光影。然而
光影
二字,从来都不是 指代实时阴影,也 不会有任何 一位光影作者会提出没有实时阴影就不是光影
这种观点!