Skip to content

📦 方塊實體遮擋剔除 (Minecraft 26.2) ​

方塊實體(箱子、終界箱、告示牌、旗幟、頭顱、飾紋陶罐、鐘以及信標)是 Minecraft 中的動態渲染元素。因為它們繞過了原版的靜態區塊網格(Chunk Mesh)編譯流程,所以每幀都會提交獨立的繪製調用(Draw Calls)。在擁有數百個箱子的大型儲物室或自動化分類倉儲區中,這會產生嚴重的 GPU 繪製瓶頸。


📋 方塊實體剔除資訊概覽 ​

屬性設定值
目標管線BlockEntityRenderDispatcher.tryExtractRenderState(...) (接受 4 個參數)
密閉檢測快速檢查周圍全部 6 個相鄰面: up, down, north, south, east, west
保守模式在 LOW 設定檔下僅執行密閉快速檢測
激進模式在 MEDIUM、HIGH、SUPER 設定檔下執行完整的視線射線投射檢測
剔除效果返回 null RenderState 以完全跳過後續的幾何生成與渲染提交

🔍 密閉與視線驗證架構 ​

text
               [UP]
                │
   [WEST] ── [CHEST] ── [EAST]
                │
              [DOWN]

1. 6面實心完全密閉快速判定 ​

在執行任何耗費算力的射線運算之前,Camera Culling 會首先查詢方塊實體周圍 6 個方向的相鄰方塊狀態:

java
BlockState up = level.getBlockState(pos.above());
BlockState down = level.getBlockState(pos.below());
BlockState north = level.getBlockState(pos.north());
BlockState south = level.getBlockState(pos.south());
BlockState east = level.getBlockState(pos.east());
BlockState west = level.getBlockState(pos.west());

if (up.isSolidRender() && down.isSolidRender() && north.isSolidRender()
    && south.isSolidRender() && east.isSolidRender() && west.isSolidRender()) {
    return true; // 100% 密閉遮擋 —— 完全跳過渲染
}

深埋在牆體內部或完全封閉在實心地下地基中的箱子,無需任何射線投射計算即可被快速剔除,耗時幾乎為零($< 0.0001\mu\text{s}$)。

2. 視線射線投射檢測 ​

在 MEDIUM、HIGH 和 SUPER 設定檔(cullAllBlockEntities = true)下,Camera Culling 會從玩家攝影機向方塊實體幾何中心 $(X + 0.5, Y + 0.5, Z + 0.5)$ 發射一條視線檢測射線:

  • 若射線在觸達目標方塊實體前撞擊到了遮擋視線的實心方塊,則丟棄其渲染狀態。
  • 若存在清晰無遮擋的視野通道,則正常執行方塊實體的完整渲染。

🔗 相關頁面 ​

Official documentation & web portal for Dasik Igaijinn mods.