BEFORE YOU BUILD
今天练的是造型,不是机械。
本课是 Minecraft 风格游戏美术练习。M110 原型为半自动型号,名称可参考美国陆军官方装备介绍。这里用夸张比例概括它的外观,全部参数都是虚拟建模单位,不是现实尺寸或制造图纸。
准备 Blockbench 5.x,使用 Generic Model(通用模型),不需要运行 Minecraft。第一次使用可以先做南瓜灯入门课。
下载 5 个阶段工程 · 33 KB ↓01-sand-silhouette.bbmodel11 部件 · 3 分组 · 0 动画02-forearm-pattern.bbmodel35 部件 · 4 分组 · 0 动画03-scope-details.bbmodel59 部件 · 7 分组 · 0 动画04-idle-animation.bbmodel59 部件 · 7 分组 · 1 动画05-finished-animated.bbmodel59 部件 · 7 分组 · 2 动画
阶段工程预先内嵌了纹理,便于观察。软件截图是在本机中文版 Blockbench 打开相应阶段拍摄的,不是从空白工程连续录屏;结构示意图另行标注。请先另存自己的练习。
新建工程,先看大轮廓
先有一张清楚的地图,再开始搭方块。
- 新建 Generic Model / 通用模型,命名
my_m110_prop,纹理设为 64 × 64,使用逐面 UV。 - 先保存
my-m110-prop.bbmodel。建立最外层分组Display,Pivot 设为 0 / 8 / 0。 - 在 Display 下建立 Stock 与 Body,分别装后部和中央轮廓。想先看效果,可以打开阶段 01,再另存自己的副本。
- 参考工程里有 11 个方块、3 个分组。
- 左侧是纹理,右侧是大纲;中央预览可以拖动观察。
搭出沙色主体与阶梯外形
大块决定识别度,小块只负责补一句。
- 选 Stock,添加
stock_main:Position −26 / 6 / −1.7,Size 10 / 5 / 3.4。Position 是方块起点,不是中心。 - 用 stock_lower 做下方阶梯,再添加
stock_slope。斜块的 Z 旋转为 20°,Pivot 为 −16.6 / 6.25 / 0。 - 在 Body 中加入中央外壳、倾斜握把轮廓与下方盒形剪影。按表完成共 11 个部件,对照
01-sand-silhouette.bbmodel。
- 右侧参数只对应当前选中的方块。
- 斜块要同时核对 Rotation 和 Pivot,不要只输入尺寸。

11 个主体部件的虚拟建模参数
| 方块 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| stock_main Stock | -26 / 6 / -1.7 | 10 / 5 / 3.4 | 0 / 0 / 0 | -21 / 8.5 / 0 | 0 / 0 / 16 / 16 |
| stock_lower Stock | -25 / 3.5 / -1.5 | 6.5 / 2.5 / 3 | 0 / 0 / 0 | -21.75 / 4.75 / 0 | 32 / 0 / 48 / 16 |
| stock_slope Stock | -19.5 / 5.1 / -1.5 | 5.8 / 2.3 / 3 | 0 / 0 / 20 | -16.6 / 6.25 / 0 | 0 / 0 / 16 / 16 |
| stock_top Stock | -25.4 / 11 / -1.55 | 9.3 / 0.65 / 3.1 | 0 / 0 / 0 | -20.75 / 11.325 / 0 | 16 / 0 / 32 / 16 |
| rubber_pad Stock | -26.6 / 3.2 / -1.85 | 0.7 / 8.5 / 3.7 | 0 / 0 / 0 | -26.25 / 7.45 / 0 | 32 / 16 / 48 / 32 |
| body_upper Body | -15 / 8.3 / -1.8 | 13 / 3.5 / 3.6 | 0 / 0 / 0 | -8.5 / 10.05 / 0 | 0 / 0 / 16 / 16 |
| body_lower Body | -13 / 5.8 / -1.65 | 10.3 / 2.5 / 3.3 | 0 / 0 / 0 | -7.85 / 7.05 / 0 | 16 / 0 / 32 / 16 |
| stock_bridge Body | -16.5 / 9 / -1.35 | 2.5 / 2.4 / 2.7 | 0 / 0 / 0 | -15.25 / 10.2 / 0 | 0 / 16 / 16 / 32 |
| grip_shell Body | -12 / 1.7 / -1.1 | 2.5 / 4.8 / 2.2 | 0 / 0 / -18 | -10.75 / 4.1 / 0 | 32 / 0 / 48 / 16 |
| box_silhouette Body | -6.2 / 1.8 / -1.4 | 4.5 / 4.8 / 2.8 | 0 / 0 / 0 | -3.95 / 4.2 / 0 | 32 / 0 / 48 / 16 |
| box_base Body | -6.4 / 1.4 / -1.55 | 4.9 / 0.7 / 3.1 | 0 / 0 / 0 | -3.95 / 1.75 / 0 | 0 / 16 / 16 / 32 |
让重复方块排出节奏
同一个小方块,排整齐就有了节奏。
- Display 下建立 Handguard。添加
forearm_shell:Position −2 / 8.2 / −1.75,Size 15 / 3.7 / 3.5,再加顶部与细长前端外形。 - 侧面深色小块是贴在外表面的装饰像素。先做
vent_near_1,复制为 6 个,每个 X 增加 2.15;另一侧按表使用不同的 Z。 - 顶部小棱块做 8 个,沿 X 每次增加 1.8。先统一间距,再看第一块与最后一块有没有越界。完成后共 35 个部件。
vent_near_1 → Position −0.8 / 9.4 / 1.76;Size 1.3 / 0.8 / 0.16。第二块只改 X 为 1.35。小色块贴在外表面,不是真正挖出的孔洞。
- 阶段 02 有 35 个部件,仍不包含上方瞄镜轮廓。
- 检查深色小块没有埋进主体或悬在外面。

24 个前部与重复装饰部件参数
| 方块 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| forearm_shell Handguard | -2 / 8.2 / -1.75 | 15 / 3.7 / 3.5 | 0 / 0 / 0 | 5.5 / 10.05 / 0 | 0 / 0 / 16 / 16 |
| forearm_top Handguard | -1.6 / 11.9 / -1.5 | 14.3 / 0.65 / 3 | 0 / 0 / 0 | 5.55 / 12.225 / 0 | 16 / 0 / 32 / 16 |
| front_slim_shell Handguard | 13 / 9.3 / -0.65 | 11 / 1.3 / 1.3 | 0 / 0 / 0 | 18.5 / 9.95 / 0 | 0 / 16 / 16 / 32 |
| front_tip Handguard | 24 / 9.1 / -0.85 | 2.3 / 1.7 / 1.7 | 0 / 0 / 0 | 25.15 / 9.95 / 0 | 32 / 16 / 48 / 32 |
| vent_near_1 Handguard | -0.8 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | -0.15 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_near_2 Handguard | 1.35 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 2 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_near_3 Handguard | 3.5 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 4.15 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_near_4 Handguard | 5.65 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 6.3 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_near_5 Handguard | 7.8 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 8.45 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_near_6 Handguard | 9.95 / 9.4 / 1.76 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 10.6 / 9.8 / 1.84 | 32 / 16 / 48 / 32 |
| vent_far_1 Handguard | -0.8 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | -0.15 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| vent_far_2 Handguard | 1.35 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 2 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| vent_far_3 Handguard | 3.5 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 4.15 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| vent_far_4 Handguard | 5.65 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 6.3 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| vent_far_5 Handguard | 7.8 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 8.45 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| vent_far_6 Handguard | 9.95 / 9.4 / -1.92 | 1.3 / 0.8 / 0.16 | 0 / 0 / 0 | 10.6 / 9.8 / -1.84 | 32 / 16 / 48 / 32 |
| top_ridge_1 Handguard | -1.2 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | -0.75 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_2 Handguard | 0.6 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 1.05 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_3 Handguard | 2.4 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 2.85 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_4 Handguard | 4.2 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 4.65 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_5 Handguard | 6 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 6.45 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_6 Handguard | 7.8 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 8.25 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_7 Handguard | 9.6 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 10.05 / 12.7 / 0 | 0 / 16 / 16 / 32 |
| top_ridge_8 Handguard | 11.4 / 12.5 / -1.15 | 0.9 / 0.4 / 2.3 | 0 / 0 / 0 | 11.85 / 12.7 / 0 | 0 / 16 / 16 / 32 |
加入瞄镜轮廓,整理分组
用高低与疏密,让剪影多一层。
新建 Scope,用长方体和阶梯块概括瞄镜轮廓;两块立柱把它与主体连起来。glass_front 是蓝绿色的不透明像素面,只表现外观。再加入 Details 与 Bipod 中的装饰,完成 59 个部件、7 个分组。
Display(整件作品的展示动画) ├─ Stock 后部轮廓 ├─ Body 中央外形 ├─ Handguard 前部与重复像素 ├─ Scope 瞄镜剪影与色片 ├─ Details 小型装饰 └─ Bipod 下方支架造型
- 六个子分组全部属于 Display。
- 只在 Display 上做展示动画,整件作品就会一起动。
瞄镜剪影、装饰与支架的 24 个部件参数
| 方块 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| scope_tube Scope | -13 / 15 / -0.8 | 13.5 / 1.6 / 1.6 | 0 / 0 / 0 | -6.25 / 15.8 / 0 | 0 / 16 / 16 / 32 |
| scope_rear Scope | -14.5 / 14.55 / -1.25 | 3 / 2.5 / 2.5 | 0 / 0 / 0 | -13 / 15.8 / 0 | 32 / 16 / 48 / 32 |
| scope_front Scope | 0.1 / 14.15 / -1.65 | 4 / 3.3 / 3.3 | 0 / 0 / 0 | 2.1 / 15.8 / 0 | 0 / 16 / 16 / 32 |
| scope_front_rim Scope | 4 / 14 / -1.8 | 0.8 / 3.6 / 3.6 | 0 / 0 / 0 | 4.4 / 15.8 / 0 | 32 / 16 / 48 / 32 |
| glass_front Scope | 4.81 / 14.4 / -1.4 | 0.08 / 2.8 / 2.8 | 0 / 0 / 0 | 4.85 / 15.8 / 0 | 16 / 32 / 32 / 48 |
| glass_rear Scope | -14.6 / 14.85 / -0.95 | 0.08 / 1.9 / 1.9 | 0 / 0 / 0 | -14.56 / 15.8 / 0 | 0 / 32 / 16 / 48 |
| scope_dial_top Scope | -6 / 16.5 / -0.9 | 1.9 / 1.3 / 1.8 | 0 / 0 / 0 | -5.05 / 17.15 / 0 | 16 / 16 / 32 / 32 |
| scope_dial_side Scope | -6 / 15 / 0.8 | 1.9 / 1.4 / 0.8 | 0 / 0 / 0 | -5.05 / 15.7 / 1.2 | 16 / 16 / 32 / 32 |
| scope_ring Scope | -11 / 14.7 / -1.05 | 1 / 2.2 / 2.1 | 0 / 0 / 0 | -10.5 / 15.8 / 0 | 16 / 16 / 32 / 32 |
| scope_stand_1 Scope | -10.5 / 11.8 / -1 | 1.2 / 3.2 / 2 | 0 / 0 / 0 | -9.9 / 13.4 / 0 | 0 / 16 / 16 / 32 |
| scope_stand_2 Scope | -2.5 / 11.8 / -1 | 1.2 / 3.2 / 2 | 0 / 0 / 0 | -1.9 / 13.4 / 0 | 0 / 16 / 16 / 32 |
| lower_trim_front Details | -8.1 / 4.4 / -0.6 | 0.55 / 1.5 / 1.2 | 0 / 0 / 0 | -7.825 / 5.15 / 0 | 0 / 16 / 16 / 32 |
| lower_trim_base Details | -11.4 / 4.2 / -0.6 | 3.8 / 0.5 / 1.2 | 0 / 0 / 0 | -9.5 / 4.45 / 0 | 0 / 16 / 16 / 32 |
| side_plate Details | -10.8 / 8.8 / 1.81 | 5 / 1.6 / 0.16 | 0 / 0 / 0 | -8.3 / 9.6 / 1.89 | 32 / 0 / 48 / 16 |
| side_highlight Details | -10.5 / 10.7 / 1.82 | 4.8 / 0.2 / 0.12 | 0 / 0 / 0 | -8.1 / 10.8 / 1.88 | 48 / 0 / 64 / 16 |
| side_square Details | -4.9 / 7.1 / 1.68 | 1.1 / 0.9 / 0.25 | 0 / 0 / 0 | -4.35 / 7.55 / 1.805 | 16 / 16 / 32 / 32 |
| back_rail Details | -14.8 / 11.8 / -1.1 | 3.6 / 0.5 / 2.2 | 0 / 0 / 0 | -13 / 12.05 / 0 | 0 / 16 / 16 / 32 |
| front_pixel Details | 11.8 / 12.7 / -0.35 | 0.7 / 1.4 / 0.7 | 0 / 0 / 0 | 12.15 / 13.4 / 0 | 0 / 16 / 16 / 32 |
| stock_accent Details | -24 / 6.5 / 1.71 | 4 / 1.1 / 0.12 | 0 / 0 / 0 | -22 / 7.05 / 1.77 | 16 / 0 / 32 / 16 |
| support_bridge Bipod | 9 / 7.4 / -2 | 2.5 / 1 / 4 | 0 / 0 / 0 | 10.25 / 7.9 / 0 | 0 / 16 / 16 / 32 |
| support_near Bipod | 9.4 / 3.4 / 1.5 | 0.8 / 4.8 / 0.8 | -22 / 0 / 0 | 9.8 / 5.8 / 1.9 | 16 / 16 / 32 / 32 |
| support_far Bipod | 9.4 / 3.4 / -2.3 | 0.8 / 4.8 / 0.8 | 22 / 0 / 0 | 9.8 / 5.8 / -1.9 | 16 / 16 / 32 / 32 |
| foot_near Bipod | 8.9 / 3 / 2.2 | 1.8 / 0.8 / 1.3 | 0 / 0 / 0 | 9.8 / 3.4 / 2.85 | 32 / 16 / 48 / 32 |
| foot_far Bipod | 8.9 / 3 / -3.5 | 1.8 / 0.8 / 1.3 | 0 / 0 / 0 | 9.8 / 3.4 / -2.85 | 32 / 16 / 48 / 32 |
沙色、深灰,再点一笔冷色
颜色不用多,主次一定要清楚。
- 导入
textures/m110-palette.png。64×64 图集包含 16 个 16×16 色块,先分清沙色、深灰和蓝绿色三行。 - 沙色占大面积,用细小明暗差表现哑光涂层;深灰描出棱块与瞄镜剪影。镜片只用一小块蓝绿色,画一条斜向亮纹。
- 切换绘画模式,用 1 像素画笔试改一个色块。每改几笔就转动模型,避免亮纹抢走整个轮廓的注意力。

第一行:沙色涂层。第二行:深灰与橡胶。第三行:镜片冷色反光。第四行:备用点缀。
镜片反光已经画在像素里,不会真实折射环境。
- 左侧能看到沙色、深灰与镜片色块。
- 修改共享色块会影响所有引用它的面;先另存副本。
给镜片和外壳安排 UV
同一个形状,贴对颜色才像它自己。
回到编辑模式,选中方块,再在 UV 面板中选择面。本课每个方块六面取同一色块。UV 是 U1 / V1 / U2 / V2 四个边界值,不是位置加宽高。先用下面三个部件检查对应关系。
stock_main → 0 / 0 / 16 / 16;scope_tube → 0 / 16 / 16 / 32;glass_front → 16 / 32 / 32 / 48。
- 选中 stock_main,左侧高亮第一行第一个色块。
- 其余部件的 UV 在参数表最后一列核对。

让完整道具轻轻浮动
动作不用大,闭环要接得上。
- 进入动画模式,新建
m110.idle,长度 3 秒,循环设为 Loop。 - 选中最外层
Display。在 Position 与 Rotation 轨道上,按下表添加关键帧,插值选 Linear。 - 位置 Y 只上下移动 0.25 个建模单位;旋转只改变 Z,最大 1°。第一帧和最后一帧相同,避免循环时跳一下。
- 左侧选 m110.idle,再选 Display 查看位置与旋转轨道。
- 这一段只有轻摆,没有操作细节;动作幅度小,方便观察材质。
3 秒轻摆动画 · 全部 10 个关键帧
| 分组 | 轨道 | 时间 / 秒 | X / Y / Z |
|---|---|---|---|
| Display | position | 0 | 0 / 0 / 0 |
| Display | position | 0.75 | 0 / 0.25 / 0 |
| Display | position | 1.5 | 0 / 0 / 0 |
| Display | position | 2.25 | 0 / -0.25 / 0 |
| Display | position | 3 | 0 / 0 / 0 |
| Display | rotation | 0 | 0 / 0 / 0 |
| Display | rotation | 0.75 | 0 / 0 / 1 |
| Display | rotation | 1.5 | 0 / 0 / 0 |
| Display | rotation | 2.25 | 0 / 0 / -1 |
| Display | rotation | 3 | 0 / 0 / 0 |
左右展示,保存自己的版本
第二段动作,换一种观察作品的方式。
- 新建
m110.showcase,长度 5 秒、Loop。仍选 Display,但这次只使用 Rotation 轨道。 - 0 秒回正;1.25 秒旋转到 0 / 24 / 6;2.5 秒回正;3.75 秒旋转到 0 / −24 / −6;5 秒回正。用 Linear 插值连接。
- 来回切换两段动画,确认没有遗留上一段的位移。保存 .bbmodel,再关闭并重新打开你自己的副本,检查纹理与动画都还在。
- 左侧动画列表保留 m110.idle 和 m110.showcase 两段。
- 上方网页查看器也能切换、暂停动画;自动旋转按钮控制的是视角。
5 秒左右展示 · 全部 5 个关键帧
| 分组 | 轨道 | 时间 / 秒 | X / Y / Z |
|---|---|---|---|
| Display | rotation | 0 | 0 / 0 / 0 |
| Display | rotation | 1.25 | 0 / 24 / 6 |
| Display | rotation | 2.5 | 0 / 0 / 0 |
| Display | rotation | 3.75 | 0 / -24 / -6 |
| Display | rotation | 5 | 0 / 0 / 0 |

这一次,试着只改一种材质。
保留轮廓,把沙色涂层换成低饱和橄榄绿,镜片仍保留一小片冷色。限制越清楚,越容易看出一次修改的效果。完成后保存 my-m110-variant.bbmodel。
IF SOMETHING LOOKS ODD
卡住了,先看这四处。
为什么动画模式找不到?
确认项目是 Generic Model / 通用模型,不是 Java Block/Item。先保留原文件,再选择适合动画的工程格式。
为什么只有一个小方块在动?
动画中选中了部件而不是 Display。把其他六个分组放到 Display 里面,再在 Display 上设置关键帧。
为什么支架悬空、斜块跑偏?
核对 Rotation 和 Pivot,别只输入 Position 与 Size。参数表三位小数足够观察,阶段工程保留完整精度;也检查有没有误改分组的基础旋转。
能直接放到 Minecraft 里吗?
不能把 .bbmodel 当 MOD 安装。本课保存的是通用模型和展示动画;游戏内使用需另选目标版本、导出格式与加载方案。它不包含物品注册、攻击、伤害等游戏逻辑。
KEEP LEARNING
继续查阅。
本课为独立创作的游戏美术教学,不是历史实物的精密复刻。图文与工程用于个人学习、课堂和非商业创作,请勿原样二次售卖或冒充原创。