📦 Oclusión de entidades de bloque (Minecraft 26.3)
Las entidades de bloque (cofres, cofres de ender, carteles, estandartes, calaveras, macetas decoradas, campanas y faros) son elementos de renderizado dinámico. Debido a que eluden la compilación de mallas de chunk vanilla, generan llamadas de dibujo individuales en cada fotograma. En salas de almacenamiento con cientos de cofres, esto produce cuellos de botella significativos en la GPU.
📋 Información de oclusión de entidades de bloque
| Propiedad | Valor |
|---|---|
| Canal de destino | BlockEntityRenderDispatcher.tryExtractRenderState(...) |
| Detección de cerramiento | Comprueba las 6 caras adyacentes: up, down, north, south, east, west |
| Modo conservador | Solo comprueba el cerramiento completo en el perfil LOW |
| Modo agresivo | Comprobación completa de línea de visión por raycasting en MEDIUM, HIGH, SUPER |
🧱 Comprobación de cerramiento y línea de visión
Camera
│
├── [1] 6-Sided Solid Enclosure Check ──► CULL (Skip Draw Call)
│
└── [2] Line-of-Sight Raycast ──────────► RENDER or CULL1. Descarte rápido por cerramiento sólido en 6 caras
Antes de ejecutar cualquier cálculo de trazado de rayos, Camera Culling consulta los estados de los bloques vecinos:
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 (isSolid(up) && isSolid(down) && isSolid(north) && isSolid(south) && isSolid(east) && isSolid(west)) {
return true; // 100% ocluido — omitir renderizado
}Los cofres incrustados en paredes o rodeados de cimientos sólidos se descartan con un consumo de CPU casi nulo ($< 0.0001\mu\text{s}$).
2. Comprobación de línea de visión por trazado de rayos
En los perfiles MEDIUM, HIGH y SUPER (cullAllBlockEntities = true), Camera Culling proyecta un rayo desde la posición de la cámara del jugador hacia el centro de la entidad de bloque $(X + 0.5, Y + 0.5, Z + 0.5)$:
- Si el rayo impacta contra un bloque sólido opaco antes de llegar a la entidad, se omite el estado de renderizado.
- Si existe una línea de visión despejada, la entidad de bloque se renderiza con fidelidad visual completa.
