渲染类型
在 JSON 顶层添加 render_type 可提示加载器模型应使用的渲染类型。若未指定,由加载器选择,通常回退到 ItemBlockRenderTypes#getRenderLayers() 返回的类型。自定义模型加载器可以完全忽略此字段。
原创说明图,依据 Forge 1.21.x 官方文档 绘制。
注意:自 1.19 起,对方块而言,这比已弃用的
ItemBlockRenderTypes#setRenderLayer()设置适用渲染类型的方法更受推荐。
下面是使用玻璃纹理的镂空方块模型:
{
"render_type": "minecraft:cutout",
"parent": "block/cube_all",
"textures": { "all": "block/glass" }
}
原版值
Forge 在 NamedRenderTypeManager#preRegisterVanillaRenderTypes() 中提供以下选项及相应的区块和实体渲染类型:
| 名称 | 区块渲染类型 | 实体渲染类型 | 用途 |
|---|---|---|---|
minecraft:solid |
RenderType#solid() |
ForgeRenderTypes#ITEM_LAYERED_SOLID |
完全实心的方块,如石头。 |
minecraft:cutout |
RenderType#cutout() |
ForgeRenderTypes#ITEM_LAYERED_CUTOUT |
每个像素要么完全透明、要么完全不透明的方块,如玻璃。 |
minecraft:cutout_mipped |
RenderType#cutoutMipped() |
ForgeRenderTypes#ITEM_LAYERED_CUTOUT |
像素完全透明或不透明、且远距离纹理应通过 mipmap 缩小以避免视觉瑕疵的方块,如树叶。两者不同是因为实体渲染类型启用 mipmap 会使物品看起来异常。 |
minecraft:cutout_mipped_all |
RenderType#cutoutMipped() |
ForgeRenderTypes#ITEM_LAYERED_CUTOUT_MIPPED |
与 cutout_mipped 类似,但物品表现形式也需要 mipmap。 |
minecraft:translucent |
RenderType#translucent() |
ForgeRenderTypes#ITEM_LAYERED_TRANSLUCENT |
像素可能部分透明的方块,如染色玻璃。 |
minecraft:tripwire |
RenderType#tripwire() |
ForgeRenderTypes#ITEM_LAYERED_TRANSLUCENT |
必须渲染到天气渲染目标的方块,如绊线。两者不同是因为绊线渲染类型不适合实体。 |
自定义值
可在 RegisterNamedRenderTypesEvent 中注册模型所用的自定义命名渲染类型。该事件在 Mod 事件总线上触发。
自定义类型由两到三个部分组成:
- 区块渲染类型:可使用
RenderType.chunkBufferLayers()返回列表中的任意类型。 - 使用
DefaultVertexFormat.NEW_ENTITY顶点格式的渲染类型,即实体渲染类型。 - 可选的、使用同一顶点格式的渲染类型,供选择“极佳!”图形模式时使用。
区块渲染类型用于将使用该命名类型的方块作为区块几何体的一部分渲染。必需的实体渲染类型用于在快速和精致图形模式下渲染物品,例如物品栏、地面和展示框。可选实体渲染类型在“极佳!”模式下用于同样目的;当必需的实体类型无法在该模式下工作时需要它,通常只涉及半透明类型。
public static void onRegisterNamedRenderTypes(RegisterNamedRenderTypesEvent event) {
event.register("special_cutout", RenderType.cutout(), Sheets.cutoutBlockSheet());
event.register("special_translucent", RenderType.translucent(), Sheets.translucentCullBlockSheet(), Sheets.translucentItemSheet());
}
随后可在 JSON 中使用 <your_mod_id>:special_cutout 和 <your_mod_id>:special_translucent 引用。
原文:Render Types。