Skip to content

🎨 基于距离的生物纹理 LOD (Minecraft 26.2) ​

当远处的生物在玩家屏幕上仅占据 4x4 像素大小时,依然强制对其采样完整的 1024x1024 或高清材质纹理,会严重浪费显存带宽(VRAM Bandwidth)与纹理采样缓存行。

Camera Culling 内置了一套解耦的 3级 OpenGL 纹理 LOD 偏移引擎,能够根据实体与玩家之间的实际距离动态调节 Mipmap 采样层级。


📋 距离纹理 LOD 信息概览 ​

属性设定值
管线注入挂钩LivingEntityRenderer.submit(...) @At("HEAD") 与 @At("RETURN")
OpenGL 调用参数GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL14.GL_TEXTURE_LOD_BIAS, bias)
近距离阶段$< 16.0$ 格 $\implies 0.0\text{f}$ 偏移量(100% 原生全分辨率纹理)
中距离阶段$16.0 - 32.0$ 格 $\implies 1.0\text{f}$ 偏移量(50% 分辨率半采样 Mipmap)
远距离阶段$> 32.0$ 格 $\implies 2.5\text{f}$ 偏移量(25% 超低分辨率 Mipmap)
无条件豁免对象处于发光状态的实体、玩家自身、Boss 与 Mini-Boss、黑名单保护生物

🔬 数学距离 LOD 偏移 ​

text
摄像机
  │
  ├── [ 0米 到 16米 ] ──► 偏移量 0.0f  (100% 原生全分辨率纹理)
  │
  ├── [ 16米 到 32米 ] ──► 偏移量 1.0f  (50% 次级 Mipmap 采样)
  │
  └── [ > 32米 ] ──────► 偏移量 2.5f  (25% 低阶 Mipmap 采样)

LOD 偏移量 $B$ 纯粹基于距离的平方计算,完全无多余开销: $$B(d) = \begin{cases} 0.0\text{f} & \text{if } d^2 < \text{startDist}^2 \ (16.0^2) \ 1.0\text{f} & \text{if } \text{startDist}^2 \le d^2 < \text{farDist}^2 \ (32.0^2) \ 2.5\text{f} & \text{if } d^2 \ge \text{farDist}^2 \end{cases}$$

OpenGL 状态绝对隔离 ​

在渲染生物时,LivingEntityRendererMixin 在 submit:HEAD 注入并设置计算出的偏移量,并在该生物渲染完成后的 submit:RETURN 瞬间将其无条件重置回 0.0f。这确保了方块模型、手持物品以及 UI 界面元素绝对不受任何影响。


🔗 相关页面 ​

Official documentation & web portal for Dasik Igaijinn mods.