生物群系颜色的花朵与植物

生物群系颜色的花朵与植物

使资源包能够为方块添加生物群系颜色。同时还附带了一些用于原版的资源包。

装饰

Header

这是一个允许资源包添加生物群系着色颜色/索引的模组,基本上就是为草、树叶和水提供生物群系着色,并为几乎任何*方块提供透明的生物群系叠加纹理。*(有关 1.18.2 及以下版本的说明,请参见注释)
此模组还包含了一些原版资源包,它们会被提取到资源包文件夹中并在启动时启用。

对于我没有默认包含的其他资源包,我应该会在不久后发布一个页面。

要求 / 兼容性

见下表。
Compatability

1.12.2 和 1.16.5 - 在原版中会因半透明纹理而出现视觉分层故障
1.18.2 及以上版本 - 这些版本正确实现了绊线着色器,因此可以为花朵等非六面方块使用半透明纹理。

如果你想/必须使用能修复半透明问题的着色器包,我测试了几个,这些在 1.16.5 上可用:

  • AstraLex v90.0
  • BSL v8.2.02
  • Complementary Shaders v4.7.1
  • Complementary Reimagined r2.03
    对于 1.12.2 和 Optifine,你也可以直接使用包含的“(internal)”着色器包,因为它看起来与普通 MC 完全一样,但也会以较小的性能损失修复半透明纹理。


注释 - “几乎任何*方块”是什么意思?

1.19.2 及以上版本
实际上应该是所有方块。

1.18.2
它指的是所有允许使用 Forge 的 ItemBlockRenderTypes.setRenderLayer() 方法的方块。

1.16.5
它指的是所有允许使用 Forge 的 RenderTypeLookup.setRenderType() 方法的方块。

1.12.2
它指的是所有原版方块以及所有没有覆盖 getRenderLayer() 方法的模组方块。

我该如何制作使用此模组的资源包?

我不会讲解如何一般性地制作资源包,请去别处了解后再回来。

也请阅读短期待办事项列表中的第一点。


一般来说,有两种方法可以为方块添加着色颜色(以及在 1.18.2 及以下版本中指定 RenderTypes/BlockRenderTypes)。
编辑 *.json 模型文件
此方法只是使用 .json 模型文件已有的基础。我扩展了这些文件的功能,使其能够添加颜色着色(并在 1.18.2 及以下版本中指定渲染类型)。
资源包根目录中的 bcfp.ini 文件
这仅应作为备用方法使用,即当模型确实无法接受通过 .json 方法编辑时。通常只适用于较旧版本的 MC。
你可以在资源包根目录中创建一个名为 bcfp.ini 的文件,并定义某个方块应具有的着色颜色(或 1.18.2 及以下版本的渲染类型)。
这些仅在启动时应用,不会动态重新加载。

两种方法都必须做的事

在这两种情况下,我们都必须编辑 .json 模型文件。

“Parent”标签

我们实际上必须通过“parent”标签指向一个现有的父模型文件,或者制作我们自己的模型。
我为 minecraft 中已有的模型文件包含了一堆修改过的父模型文件。编辑 .json 文件最简单的方法是,将“Original parent”列中的内容替换为“Parent w/ overlay”列中的内容。“block/”或“minecraft:block/”部分应保留。
parent tag

示例:

"parent": "block/crop_with_biome_overlay_modern"

 

在 1.12.2 的情况下,也有“crop_with_biome_overlay_modern”。这只是从较新版本移植回来的一个修复,即纹理相对两侧的纹理实际上会被镜像,从而看起来像素在物理上位于相对两侧的同一位置。包含的原版资源包使用了这个。

 

对于以上所有内容,你还必须指定一个新的叠加纹理。通常叠加纹理名称就是“overlay”。
如果某个模型可能有多个叠加纹理,例如“cube_with_biome_overlay”,则每个纹理名称都有一个附加“-overlay”的副本。
例外是花盆模型,因为我们只关心盆中的植物。

对于这些修改过的模型文件中的每一个,也有一个带有第二个叠加纹理的版本,其名称只是在末尾附加了“2”,并且另一个叠加纹理也附加了“2”。我承认我没有测试这些,因为我没有找到它们的用途。

如果你制作自己的 .json 文件 - “tintindex”标签

当你制作自己的模型而不是依赖“parent”标签时,你还必须指定具有着色的面上所使用的着色索引。
我会直接查看默认 flowers+plants 资源包中的 sunflower_top.json 来感受它们,但基本上,应用的每个方块着色颜色都会获得一个从编号 0 开始的着色索引(-1 在内部表示不使用着色索引),并向上计数。

你也可以用 7zip 提取此模组的 .jar 文件,并查看“assets\minecraft\models\block\”,因为那里有此模组提供的修改过的父模型文件,以便更好地理解如何编写你自己的模型。但是请不要将这些与你的资源包一起重新分发。

方块/着色颜色

*.json 方法

要添加着色颜色,你必须在 .json 的根位置(也就是通常放置“parent”标签的位置)使用“tintcolor”标签。
以下是有效的着色颜色:

  • grass
  • leaves
  • water
  • startup - 这是启动后存在的方块颜色,如果某个方块最初已有方块颜色,而我们想添加另一种颜色,这会很有用。

示例:
"tintcolor" : "leaves"
多个着色颜色的示例:
"tintcolor" : ["startup", "grass"]


在上述情况下,startup 着色颜色将具有着色索引 0,grass 着色颜色将具有着色索引 1。
有时 startup 着色颜色实际上已经使用了多个着色索引,在这种情况下,你应该能够多次指定“startup”着色颜色。

 

请注意,如果你使用此模组提供的任何修改过的父模型文件,这些文件都已经应用了 grass 着色颜色,所以如果你想要 grass 着色颜色,就不必再指定它。

例外是以“stem”开头的修改过的模型文件,因为这些在原版中已经有方块颜色,所以它们具有“startup”和“grass”着色颜色。

带有 2 个叠加纹理的版本还额外具有 leaves 着色颜色。

bcfp.ini 方法

一般来说,我们首先必须将方块添加到我们新创建的 bcfp.ini 文件中。这些使用通常的 <namespace>:<location> 格式。例如,MC 中的 stone 具有命名空间“minecraft”和位置“stone”,因此我们的初始字符串将是“minecraft:stone”。
之后,我们可以指定以下之一:

  • !grass
  • !leaves
  • !water
    示例:
    minecraft:cobble_stone!leaves
    多个着色颜色的示例:
    minecraft:cobble_stone!leaves!grass


bcfp.ini 文件中为空或以 # 开头的行会被忽略。
如果你不知道某个方块的 <namespace>:<location> 是什么,通常可以在游戏中按住 F3,然后按 H,以便在物品栏中悬停于方块上时显示它。
如果没有指定着色颜色,则默认使用 !grass。

渲染类型

我们还必须指定游戏如何渲染我们的方块。

*.json 方法

如果你了解现代资源包,你可能已经知道这一点,但我也为 1.18.2 及更早版本实现了它。
此标签为“render_type”,也位于我们 .json 文件的根位置。
有效值:

  • minecraft:tripwire - 修复 minecraft:translucent 的分层故障,如果你想为非六面方块添加透明度,应使用它。不适用于 1.12.2。
  • minecraft:translucent - 如果你想为具有实心纹理的六面方块添加叠加层,这会很有用。与非六面方块模型(如植物)一起使用时会有一个难看的分层故障。
  • minecraft:cutout_mipped - cutout 的 Mip 映射版本,通常用于树叶。见下文。
  • minecraft:cutout - 原版中的大多数花朵。其像素要么完全透明,要么不透明。像素被视为透明的截止点是 30% 或 76/256。
  • minecraft:solid - 没有透明度的普通方块。对我们来说几乎完全没用。

示例:
"render_type" : "minecraft:tripwire"

一般来说,对我们最有用的一个是 tripwire(在 1.12.2 中是 translucent)。
对于较旧版本,需要说明的是,多个方块状态(基本上一个方块状态 = 一个 *.json 文件)必须共享一个渲染类型,因为渲染类型绑定到方块。因此,模组会检查一个方块的所有可能方块状态,并使用上表中最高的一项。

 

bcfp.ini 方法

此方法仅适用于 1.18.2 及以下版本。
有效值:

  • !tripwire
  • !translucent
  • !cutout_mipped
  • !cutout
  • !solid

示例:
minecraft:stone!grass!translucent

有关这些值的信息,请参见 *.json 方法。
如果没有指定值,则默认使用 !tripwire。

待办事项列表

短期 / 几周内

  • 有时使用 sodium 衍生模组时,渲染类型只在启动时更改。这对资源包制作者最重要,因为他们如果想更改渲染类型,就必须重启游戏。
  • 从 1.18 版本开始移植到 fabric。 见 FAQ。
  • 研究如何判断是否正在使用着色器,因为绊线着色器在阴影方面经常被忽略,并在需要时将渲染类型设置为 translucent。
    长期
  • 也许研究修复较旧版本中的图形 bug,以便不需要其他模组。
  • 也许许许研究再次移植到 1.7.10。

FAQ

问:会有任何性能损失吗?
会。由于 GPU 必须为每个叠加层绘制额外的三角形,因此会有轻微的性能损失。在花林中,我使用 Rubidium 时 FPS 大约降低 1-2%。

我曾经制作过一面约 +270,000 朵花的巨大对角墙。直接看着它全部时,使用该模组会让我的 FPS 下降约 18%,但我认为那并不很现实。

问:Fabric 移植何时?
可能几周内。 将研究将资源包移植到自定义颜色 Optifine 格式,因为有一些模组移植了类似功能,如 Vanadium Colors 和 Colormatic。

问:源代码何时发布?
某个时候。可能在移植到 fabric 之后。我想先清理一下,因为我以前从未在互联网上发布过源代码。

问:你通常会不会为已经有此模组发布的较旧 Minecraft 版本更新模组?
会,只要更新后的功能对该 MC 版本有意义。

问:你会为一个不是最新大版本的小版本更新模组吗?
不会。

问:新的 MC 版本发布了,Forge 有测试版发布,你现在会更新模组吗?
只要 Forge 没有稳定版本,我就不会更新。不过你可以尝试使用上一个 MC 小版本的版本,因为我不禁止模组在更新的 MC 小版本上运行。