Skip to content

🧱 Oclusión de entidades (Minecraft 26.3) ​

En Minecraft 26.3, el canal de renderizado de entidades del cliente extrae estados de renderizado (EntityRenderState) para todas las entidades dentro del frustum de la cámara, incluso si están ocultas detrás de montañas, gruesos muros de piedra o mazmorras subterráneas. Camera Culling intercepta esta comprobación para evitar que los mobs ocluidos consuman procesamiento de geometría de la CPU y llamadas de dibujo de la GPU.


📋 Información de oclusión de entidades ​

PropiedadValor
Canal de destinoEntityRenderer.shouldRender @At("HEAD")
Algoritmo de oclusiónTrazado de rayos multipunto + comprobación de multitudes
Búfer de gracia (Grace)Histéresis temporal adaptativa de 4/8/12 fotogramas
Puntos anatómicos8 puntos de muestreo (cabeza, ojos, torso superior, centro, 4 flancos)
Filtro direccionalSuelo/escaleras: hit.getDirection() == Direction.UP + delta $Y \le 0.15\text{m}$

🔬 Muestreo anatómico multipunto de línea de visión ​

En lugar de un trazado de rayos simplista de un solo punto que causa parpadeos en las esquinas, Camera Culling realiza un muestreo anatómico multipunto según el perfil de oclusión seleccionado:

text
       [1] Head Top (maxY - 0.05)
            │
       [2] Eye Level (getEyeY)
            │
       [3] Upper Torso (minY + height * 0.70)
            │
       [4] Center of Mass ((minY + maxY) * 0.5)
            │
        [5-8] Elevated Perimeter Flanks (width/depth checks)
  1. Muestra 1: Parte superior de la cabeza (maxY - 0.05) — Comprobación de alta prioridad. Detecta entidades altas que asoman sobre barricadas bajas o vallas.
  2. Muestra 2: Nivel anatómico de los ojos (getEyeY()) — Línea directa de visión desde la cámara hasta los ojos del mob.
  3. Muestra 3: Torso superior / Pecho (minY + height * 0.70) — Evalúa líneas de visión del cuerpo superior de forma segura por encima del suelo.
  4. Muestra 4: Centro de masa ((minY + maxY) * 0.5) — Prueba de punto medio geométrico general.
  5. Muestras 5–8: Flancos perimetrales elevados
    • Evalúa $(X_{\min} + 0.15, Z_{\min} + 0.15)$, $(X_{\max} - 0.15, Z_{\min} + 0.15)$, etc. Garantiza que los jefes anchos (Devastadores, Wardens, Arañas) sean visibles cuando sus hombros asomen por las esquinas.

🛡️ Filtrado direccional de suelo y pendientes ​

Cuando un jugador mira hacia abajo a un mob situado en terreno irregular, un trazado de rayos estándar puede chocar contra la cara superior de un bloque junto a los pies del mob, tratando falsamente el suelo como un muro oclusor.

Camera Culling incorpora el filtrado direccional de impacto en suelo: $$\text{Si } \text{hit.getDirection()} == \text{Direction.UP} \quad \text{y} \quad Y_{\text{hit} \le Y_{\text{target} + 0.15\text{m} \implies \text{Línea de visión válida (no bloqueada)}$$

Esto garantiza que los mobs que se desplazan por pendientes, escaleras y terrenos irregulares nunca sean ocluidos erróneamente.


⚡ Motor de raycasting sin asignación de memoria ​

En implementaciones anteriores, evaluar 8 puntos de muestreo en 100 entidades generaba más de 180 000 asignaciones new Vec3() en el heap por segundo, provocando pausas de recolección de basura JVM Young-Gen.

En 26.3, CullingRaycastHelper pasa coordenadas primitivas puras:

java
public static boolean hasLineOfSight(Level level, Vec3 from, double toX, double toY, double toZ)

Al pasar las coordenadas como tipos primitivos double, el bucle crítico de renderizado elimina por completo la creación de objetos temporales Vec3 en el heap durante el trazado.


🔗 Páginas relacionadas ​

Official documentation & web portal for Dasik Igaijinn mods.