Skip to content

渲染架构

CPU/GPU 双路径渲染管线,支持 256 骨骼 GPU Skinning、可扩展渲染层、多材质子网格。

架构总览

CPU vs GPU 路径

维度CPU 路径GPU 路径
变换位置CPU 逐顶点GPU 顶点着色器
DrawCall 数每骨骼 1 次每材质 1 次
内存布局动态 VBO静态 VBO + UBO
适用场景兼容模式、少量实体大规模实体渲染
骨骼上限无限制256

GPU Skinning 详解

骨骼矩阵 UBO

属性
布局std140
内容mat4 bones[256]
大小256 × 64 bytes = 16 KB
隐藏骨骼零矩阵
可见骨骼模型空间变换矩阵

每帧流程:

  1. DFS 遍历骨骼层级,累积模型空间矩阵
  2. 写入 CPU staging buffer(跳过隐藏骨骼)
  3. 上传到 GPU UBO
  4. 着色器按 boneIndex 索引矩阵

顶点格式

GPU 路径使用紧凑顶点布局(36 bytes/vertex):

偏移大小属性
012Position (vec3)
124Color (RGBA8)
168UV0 (vec2)
244UV1 / Overlay (short2)
284UV2 / Light (short2)
323Normal (int8 × 3)
351BoneIndex (uint8)

GPUBedrockMesh

整个模型烘焙为单个 VBO/IBO,按材质分割子网格:

区域内容
VBO所有骨骼的顶点(连续存储)
IBO所有三角形索引
SubMesh[0]material=CUTOUT, indexOffset=0, indexCount=1200
SubMesh[1]material=EMISSIVE, indexOffset=1200, indexCount=300
...按材质继续分割

Shader Uniforms

Uniform Block内容
DynamicTransformsModelView 矩阵、颜色调制、纹理矩阵
BoneMatrices256 × mat4 骨骼变换
EntityNormal法线矩阵 + packed light
Sampler0主纹理
Sampler1Overlay 纹理
Sampler2光照纹理

渲染层

渲染层(Render Layer)是可扩展的后处理通道,在基础模型渲染后叠加额外视觉效果:

内置渲染层

说明
AutoGlowingBedrockLayer自动发光效果,基于骨骼名或配置
ItemArmorBedrockLayer盔甲片渲染,绑定到指定骨骼
ItemInHandBedrockLayer手持物品渲染
BlockAndItemBedrockLayer方块/物品模型渲染(骨骼挂载)
CustomBoneTextureBedrockLayer逐骨骼纹理覆盖
TextureLayerBedrockLayer纹理层合成(多层叠加)

实体模型专用渲染层

生物模型在内置层之上还有专用层:

  • Behavior Layer — 行为驱动的视觉变化
  • Bone Display Layer — 骨骼展示物品/方块
  • Exclusion Layer — Manifest 排除规则
  • Override Layer — 骨骼覆盖变换
  • Part Layer — 骨骼部件切换
  • Petrify Layer — 石化视觉效果
  • Segment Layer — 分段行为渲染
  • Submodel Layer — 子模型挂载渲染

渲染提交流程