190 lines
5.4 KiB
Markdown
190 lines
5.4 KiB
Markdown
---
|
||
title: 创建方块模型
|
||
category: 巧思案例
|
||
tags:
|
||
- 新手
|
||
- 简单
|
||
mentions:
|
||
- QuazChick
|
||
---
|
||
|
||
# 创建方块模型
|
||
|
||
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
|
||
|
||
尽管自定义方块无法使用原版的[方块形状](/wiki/blocks/block-shapes),但我们可以创建遵循类似实体模型格式的自定义模型。本教程将引导您使用[Blockbench](https://blockbench.net)为"纸袋"创建自定义方块模型。通过学习本教程,您将掌握专为自定义方块设计的Minecraft几何体核心功能。
|
||
|
||
**注意:** 自定义方块模型必须符合[模型尺寸限制](/wiki/blocks/block-components.html#geometry)。
|
||
|
||
## 模型设置
|
||
|
||
打开Blockbench并新建一个`Bedrock Block`项目。
|
||
|
||

|
||
|
||
现在可以为模型设置标识符!您可以在此处决定文件名,或稍后修改。
|
||
|
||
UV模式和纹理尺寸应保持不变。
|
||
|
||
:::danger 命名空间
|
||
模型标识符**不使用命名空间且不能包含冒号**。冒号曾用于模型继承,在现代几何格式中已失效。
|
||
:::
|
||
|
||

|
||
|
||
## 添加立方体
|
||
|
||
虽然不一定是完美立方体,但模型中的元素都称为**立方体**。所有立方体必须包含在作为分组的**骨骼**中。
|
||
|
||
首先通过大纲视图点击`Add Group`创建根骨骼。按`F2`可重命名骨骼。
|
||
|
||

|
||
|
||
"纸袋"模型需要两个立方体:一个作为提手,一个作为主体。选择根骨骼后点击`Add Cube`添加。
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/new_cube.png"
|
||
alt
|
||
width="600"
|
||
class="my-4"
|
||
/>
|
||
|
||
通过顶部工具栏可移动、缩放和旋转立方体。以下是"paper_bag"模型使用的两个立方体:
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/paper_bag_cubes.png"
|
||
alt
|
||
width="300"
|
||
class="my-4"
|
||
/>
|
||
|
||
## 移除面
|
||
|
||
某些面可能无需可见。在示例中,移除纸袋顶部面以实现透视效果。
|
||
|
||
点击预览中的面,在UV面板删除其UV映射即可移除。
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/paper_bag_top_removed.png"
|
||
alt
|
||
width="600"
|
||
class="my-4"
|
||
/>
|
||
|
||
提手仅需保留南北面。在UV面板按住Ctrl可多选面名称进行操作。
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/paper_bag_handle_faces_removed.png"
|
||
alt
|
||
width="600"
|
||
class="my-4"
|
||
/>
|
||
|
||
## 预览纹理
|
||
|
||
:::tip
|
||
点击`Create Texture`选择`Blank`即可在Blockbench中创建纹理。
|
||
:::
|
||
|
||
"纸袋"模型包含以下预制纹理:
|
||
|
||
- `textures/blocks/paper_bag.png`
|
||
|
||
<WikiImage src="/assets/images/blocks/block-models/paper_bag.png" style="background-color: rgb(0,0,0,0.15);" pixelated="true" width="128"/>
|
||
<br>
|
||
<br>
|
||
|
||
|
||
- `textures/blocks/paper_bag_bottom_fold.png`
|
||
|
||
<WikiImage src="/assets/images/blocks/block-models/paper_bag_bottom_fold.png" style="background-color: rgb(0,0,0,0.15);" pixelated="true" width="128"/>
|
||
<br>
|
||
<br>
|
||
|
||
|
||
- `textures/blocks/paper_bag_side_gusset.png`
|
||
|
||
<WikiImage src="/assets/images/blocks/block-models/paper_bag_side_gusset.png" style="background-color: rgb(0,0,0,0.15);" pixelated="true" width="128"/>
|
||
|
||
将纹理导入Blockbench后拖拽至对应面,初始效果可能不够理想...
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/preview_textures_applied.png"
|
||
alt
|
||
width="300"
|
||
class="my-4"
|
||
/>
|
||
|
||
## 调整UV布局
|
||
|
||
通过UV面板重新定位/缩放面的UV映射来修正纹理位置。选择目标面后操作UV面板即可。
|
||
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/paper_bag_handle_uv.png"
|
||
alt
|
||
width="300"
|
||
class="my-4"
|
||
/>
|
||
<br>
|
||
<WikiImage
|
||
src="/assets/images/blocks/block-models/paper_bag_final.png"
|
||
alt
|
||
width="300"
|
||
class="my-4"
|
||
/>
|
||
|
||
## 修改材质实例
|
||
|
||
自定义材质实例名称可便捷定义面渲染方式。
|
||
|
||
右键立方体选择`Edit Material Instances`进行编辑。
|
||
|
||

|
||
|
||
在示例中,东西面需要独立纹理。通过分配材质实例实现。
|
||
|
||

|
||
|
||
## 应用几何体与纹理
|
||
|
||
通过`File > Export > Export Bedrock Geometry`导出至`RP/models/blocks`文件夹后,即可在方块JSON中引用模型。
|
||
|
||
通过`RP/textures/terrian_texture.json`短名称应用纹理。本例中纸袋不遮挡光线,故设置光照衰减为0。
|
||
|
||
::: code-group
|
||
```json [BP/blocks/paper_bag.json]
|
||
{
|
||
"format_version": "1.20.30",
|
||
"minecraft:block": {
|
||
"description": {
|
||
"identifier": "wiki:paper_bag",
|
||
"menu_category": {
|
||
"category": "items"
|
||
}
|
||
},
|
||
"components": {
|
||
// 通过引用模型标识符应用模型
|
||
"minecraft:geometry": "geometry.paper_bag",
|
||
// 应用纹理及其他渲染配置
|
||
"minecraft:material_instances": {
|
||
"*": {
|
||
"texture": "paper_bag",
|
||
"render_method": "alpha_test" // 禁用背面剔除并启用透明
|
||
},
|
||
"down": {
|
||
"texture": "paper_bag_bottom_fold",
|
||
"render_method": "alpha_test" // 所有实例必须保持一致
|
||
},
|
||
// 模型中使用的自定义实例名称
|
||
"side_gusset": {
|
||
"texture": "paper_bag_side_gusset",
|
||
"render_method": "alpha_test" // 所有实例必须保持一致
|
||
}
|
||
},
|
||
// 防止产生阴影
|
||
"minecraft:light_dampening": 0
|
||
}
|
||
}
|
||
}
|
||
```
|
||
::: |