WindLink - 掠夺引擎

WindLink - 掠夺引擎

WindLink是一个为Iris着色器构建的完整风引擎。它通过开放的约定,将Minecraft未公开的实时世界数据(风场、水体分类、地面高度、季节)传递给植被、水体、天气和粒子,使其能够做出反应。

WindLink

为整个世界带来同一阵风。

站在田野里,一阵风呼啸而来。逆风处的树叶从树冠上脱落,飘过你身旁,草地随之摇曳。叶片弯曲成弧,一道光浪滚过田野,河面上的薄雾翻涌又变薄,尽显这一切的那阵风继续翻过山丘,最终在其背风处平息。这就是 WindLink:并非一系列各自伪造微风的独立效果,而是一阵万物共同感知的统一的风。

WindLink 需要 PlunderEngine(整个 Link 系列的核心基础),并与 PlunderPixels Shader 配合呈现完整效果。它也可以在没有着色器的情况下正常工作。

plunderengine.com 是项目主页:包含截图、视频片段、完整文档,以及这一切背后所遵循的风的标准。

着色器开发者:WindLink 通过 MCWIND 公开其风场数据,这是一个任何资源包都可以实现的公有领域标准。只需提供一个头文件,你的植被就能读取与此模组驱动的相同的风场,即使玩家未安装本模组也能正常工作。这里有一个在真实第三方资源包中的完整集成示例:支持 MCWIND 的 Eclipse 着色器。草地和树冠,两个渲染通道,三个文件,每一步决策都有文档记录。集成指南位于该链接和网站上,而非本页面。

风本身

一切底层都是一个所有效果共同读取的统一风场。它不是基于定时器的随机飘动:阵风锋面、风向、地形流动都来自一个运行在自身稳定时钟上的共享风引擎,因此无论时间或季节模组如何改变你的世界时钟,它都能持续平稳地吹拂。WindLink 将该时钟同步给 PlunderPixels Shader,使得模组的粒子与着色器的地形摆动运行完全相同的数学计算,并随一缕风移动。

地形会影响气流,这是根据你周围地面实时计算得出的:

  • 山丘背风处以及你建造的墙壁后方会形成平静的尾流。
  • 暴露的山脊会加速风力。
  • 山谷会汇聚并加速气流。
  • 森林地面在树冠下保持平静。
  • 气流会绕开墙壁和障碍物,而非穿过它们。

天气也会参与其中。风暴会生成真实阵风锋面在地面移动,雪原生物群系的表现如同雪地,闪电会发布实时通道,供着色器根据实际闪电进行天空和阴影的闪烁。

你可以通过 /windlink 命令控制它:预设选项包括平静、微风、阵风、风暴和自动,以及你脚下风力的实时读数。这些控制选项同样位于 PlunderEngine 的设置界面中。此外,还有一个默认关闭的 3D 流线可视化器,用于绘制实际计算出的风场。我构建它是为了调优,保留它是因为看着气流绕山丘弯曲本身就是乐趣的一半。

树木

Minecraft 会告诉着色器每个树叶方块距离最近原木的距离,这听起来正是将树冠保持在树上的理想方法。问题在于这是每个方块一个的整数,因此两个紧贴的树叶方块可能携带不同的数值,移动幅度不同,从而相互滑开。树冠会从中裂开,暴露其本应悬挂的木质。

WindLink 现在改为计算距木材的距离,作为扩散到整个世界的光滑场。相同位置的两片叶子总是读取相同的值,因此它们之间不会产生间隙。而且由于该值从方块的一侧到另一侧有轻微变化,树叶方块会弯曲,而不再滑动。与木材接触的树叶像木材本身一样保持静止,越往外越自由,因此树枝会从树干弯曲出去,尖端摆动幅度最大。

静止的树也不再是冻结的树。在完全平静时,树冠会保持缓慢漂移;在强风中,树冠会保持深深倾斜并呼吸,而非僵硬不动;当一阵风结束,树冠会弹回静止位置并最终安定下来。

如果你使用像 Better Leaves 这样的茂密树叶资源包,突出方块边缘的叶片会沿其长度弯曲,静止时略微下垂,随风力抬升。普通原版树叶完全不受影响。

乘风而行的事物

  • 树叶从树冠上脱落,顺风飘散。它们翻滚,绕开墙壁,最终落地。
  • 阵风会将小草连根拔起,落在它们着陆的地方,且不会出现在墙后的避风处。
  • 沙漠风会卷起尘土。
  • 游戏自身的落叶粒子会跟随同一风场,而非垂直下落。
  • 碎片掠过草地时会在草叶中留下可见的扰动。我称之为阵风尾迹:一片叶子掠过田野会在身后的叶片中留下可见的摆动,这是广阔阵风自身无法单独承载的细微耦合。
  • 原版深蓝色的雨水飞溅效果变为清澈、半透明的。

水面

WindLink 会读取你周围的水域,构建对它的实际理解:哪些方块属于哪个水体,海岸在哪里,以及水面应如何反应。水花和雨滴会在水面上产生涟漪,配合着色器包时,这些海岸和波纹通道会直接驱动水面渲染,使水面响应其上真实发生的事件。

地表覆盖与季节

  • 风驱地表覆盖,包括一种细草地毯,可将草渲染为逐根随风摆动的叶片。温馨提示:这种地毯是模组中性能开销最大的内容,因此默认关闭。如果你的机器性能允许,可以从草地面板开启它。着色器自身的摆动草地可以很好地表现风力,无需此功能。
  • 一个为树叶重新着色的季节循环。该模组是季节权威,因此其自身的叶子和草屑以及着色器的树叶重着色保持在同一日历上,不会相互错位。
  • 一个追踪火把、营火、火焰和熔岩的热量场,用于热浪效果。
  • 动态方块光照阴影通道,允许光源在着色器端投射移动阴影。

配合 PlunderPixels Shader

PlunderPixels Shader 专为本模组设计,这意味着它知道仅靠着色器无法得知的信息:水体及其海岸的位置、精确的风及阵风、地形如何弯曲气流、热源和光源的位置、当前季节,以及地表覆盖的状态。

草地是最能体现这一点的地方。草叶像真实叶片一样弯曲:穗波(honami)作为移动的光带滚过田野,每一丛草在其自身相位上摆动,草叶高度由模组通过 PlunderEngine 的纹理解析measured from你的活动资源包,因此任何资源包下可见部分的草叶都能正确弯曲。地形摆动、云层和晨雾都与飘过你身边的碎片一样随风漂移。

没有模组时,这些集成中的每一个都会干净地回退到资源包自身的备用方案。没有资源包时,WindLink 的游戏内效果依然全部运行。每一侧都可独立运作;合在一起则是一个系统。

兼容性

  • 需要 PlunderEngine 0.1.2 或更新版本。这是必需依赖项,因此启动器会为你安装,且版本下限是强制性的而非建议性的。
  • Fabric,Minecraft 26.1.x,Java 25 或更新版本。
  • 仅客户端,且与服务器兼容:WindLink 不会向服务器发送任何内容,不会向世界添加任何东西,可随时添加或移除。
  • Sodium 和 Iris 是可选的,但推荐安装。PlunderPixels Shader 能解锁完整集成功能,任何实现 MCWIND 的资源包也是如此。

安装 WindLink 后会获得额外功能的模组和资源包:

  • Motschen 的 Better Leaves 及其分支。这些资源包使用突出块边缘的叶片构建树叶方块,WindLink 会沿其长度弯曲这些自由端,静止时略微下垂,随风抬升。你无需为此开启任何选项,且普通原版树叶不受影响,因此不这样做的资源包也不会产生任何额外开销。
  • BetterSmoke。其烟雾跟随共享风场及阵风,而非按自身定时器循环,同时保留其自身的强度设置,因此其每个选项仍保持原有功能。BetterSmoke 自身的文件不会被修改:兼容性逻辑位于 WindLink 内部,并在 BetterSmoke 不存在时不执行任何操作。
  • 支持 MCWIND 的 Eclipse 着色器,这是 Eclipse 着色器的一个分支,通过 MCWIND 标准读取本模组的风场。覆盖草地和树冠,包括几何和阴影两个渲染通道。

未来方向

该项目正处于积极开发阶段。我力求使其易于使用:为只需风效的玩家提供预设选项,为希望微调每个细节的玩家提供滑条和完整设置界面,并提供干净的备用方案,以便在任何组件缺失时不至于出错。

社区反馈直接决定下一步开发内容。如果某些地方看起来有问题、在你的机器上运行缓慢,或者你对风应触及什么有新想法,请告知。我会阅读,并且它决定了我构建什么。