📦 Oclusión de entidades de bloque (Minecraft 26.1.2)
Las entidades de bloque (cofres, cofres de ender, carteles, estandartes, calaveras, macetas decoradas, campanas y faros) generan llamadas de dibujo individuales en cada fotograma. En salas de almacenamiento grandes o clasificadores automáticos, esto produce una saturación notable de llamadas de dibujo en la GPU.
📋 Información de oclusión de entidades de bloque
| Propiedad | Valor |
|---|---|
| Canal de destino | BlockEntityRenderDispatcher.tryExtractRenderState(BlockEntity, float, CrumblingOverlay) (3 argumentos) |
| 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.
