🎨 基於距離的生物紋理 LOD (Minecraft 26.1.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 介面元素絕對不受任何影響。
