-
Notifications
You must be signed in to change notification settings - Fork 0
26.3 Block Entity Culling
Block entities (chests, ender chests, signs, banners, skulls, decorated pots, bells, and beacons) are dynamic rendering elements. Because they bypass vanilla chunk mesh compiling, they submit individual draw calls every frame. In storage rooms or automated sorting facilities with hundreds of chests, this produces significant GPU bottlenecks.
| Property | Value |
|---|---|
| Target Pipeline | BlockEntityRenderDispatcher.tryExtractRenderState(...) |
| Enclosure Detection | Checks all 6 neighboring faces: up, down, north, south, east, west
|
| Conservative Mode | Enclosed-only check on LOW profile |
| Aggressive Mode | Full raycast sightline verification on MEDIUM, HIGH, SUPER
|
| Result | Returns null RenderState to skip render submit |
[UP]
β
[WEST] ββ [CHEST] ββ [EAST]
β
[DOWN]
Before running any raycast math, Camera Culling queries the neighboring block states:
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% Occluded β skip rendering
}Chests embedded behind walls or enclosed in solid basement foundations are unrendered with near-zero CPU calculation (
On MEDIUM, HIGH, and SUPER profiles (cullAllBlockEntities = true), Camera Culling projects a ray from the player's camera position to the block entity center
- If the raycast strikes an occluding solid block prior to reaching the target block entity, the render state is dropped.
- If a clear sightline exists, the block entity is rendered with full visual fidelity.
Camera Culling Documentation β’ Part of the Vanilla Outsider Collection
Author: Dasik (Rifaditya) β’ Licensed under GNU General Public License v3.0 (GPLv3)
π Repository Source Disclaimer: The documentation in this Wiki reflects the current source code state in the repository, which may include recent unreleased commits ahead of public release builds on CurseForge/Modrinth.
- MC 26.3 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration
- MC 26.2 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration
- MC 26.1.2 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration