主题
几何系统
从 BlockBench
.bbmodel到运行时几何缓存的完整烘焙管线,支持 5 种几何原语和工业级 EarCut 三角化。
烘焙管线
几何原语
系统支持 5 种几何原语,覆盖从简单方块到自由曲面的所有建模需求:
| 原语 | 说明 | 典型用途 |
|---|---|---|
| BedrockCuboid | 轴对齐盒体,6 面独立 UV/材质 | 标准方块骨骼、盔甲片 |
| BedrockTriangleSurface | 刚体三角面片网格 | BlockBench Mesh 几何 |
| BedrockSkinnedTriangleSurface | 带骨骼权重的三角面片 | 蒙皮网格、柔体变形 |
| BedrockBillboard | 始终面向相机的四边形 | 光环、标签、粒子挂点 |
| BedrockPath | 样条曲线几何 | 触手、绳索、轨迹线 |
Cuboid
标准 Bedrock 方块几何。每面独立 UV 映射,支持 Box UV 和 Per-Face UV 两种模式。
- 6 个
BedrockQuad(WEST / EAST / NORTH / SOUTH / UP / DOWN) - 支持
inflate参数膨胀几何 - 支持
pivot+rotation局部变换 - 每面独立材质分配
Triangle Surface
自由网格几何,由 BlockBench Mesh 烘焙而来。
- 三角面片数组
BedrockTriangle[] - 单材质绑定
- 支持平滑法线(Newell 方法累积)和平面法线
pivot+rotation局部变换
Skinned Triangle Surface
带骨骼蒙皮的三角面片,用于跨骨骼的柔体变形。
- 顶点携带
BedrockVertexInfluence[](关节索引 + 归一化权重) - 归属骨骼追踪(
ownerBoneName) - 无独立 pivot/rotation(继承归属骨骼变换)
Billboard
始终面向相机的四边形,支持 4 种朝向模式:
| 模式 | 行为 |
|---|---|
LOOKAT | 完全面向相机位置 |
LOOKAT_Y | 仅 Y 轴旋转面向相机 |
ROTATE | 跟随相机旋转 |
ROTATE_Y | 仅 Y 轴跟随相机旋转 |
Path
样条曲线几何,用于绳索、触手等线性结构。
- 控制点 + 切线 + 法线数组
- 线宽数组(
sizes) - 连接标记(
connections)控制分段断开 - 累积长度用于参数化采样
EarCut 三角化
对于顶点数 ≥ 5 的多边形面,系统使用 EarCut 算法进行三角化:
顶点数 = 3 → 直接输出三角形
顶点数 = 4 → 硬编码四边形分割 (0,1,2) + (0,2,3)
顶点数 ≥ 5 → 投影到 2D → EarCut 三角化投影流程:
- 使用 Newell 方法计算面法线
- 构建正交基(面法线为 Z 轴)
- 将 3D 顶点投影到 2D 平面
- 调用
Earcut.earcut()生成三角形索引 - 校验绕序一致性(
orientTriangle)
骨骼层级
骨骼系统核心概念:
- Bone: 带变换的层级节点,可挂载几何原语
- Locator: 无几何的定位点,用于挂载粒子/物品/子模型
- Armature: 完整骨架描述,包含 IK 链定义
- IK Chain: 反向运动学链,定义目标骨骼和链长度
材质系统
每个几何原语绑定一个 BedrockMaterialRenderMode:
| 模式 | 说明 |
|---|---|
CUTOUT | Alpha 测试(不透明 + 镂空) |
CUTOUT_NO_CULL | Alpha 测试 + 关闭背面剔除 |
TRANSLUCENT | Alpha 混合(半透明) |
EMISSIVE | 自发光(忽略光照) |