Skip to content

🧱 Oclusão de Entidades (Minecraft 26.1.2) ​

No Minecraft 26.1.2, a renderização de entidades do cliente extrai estados de renderização para todas as entidades dentro do frustum da câmera — mesmo quando obscurecidas atrás de cavernas, penhascos ou construções. O Camera Culling intercepta essa verificação para evitar que mobs ocluídos consumam processamento de geometria na CPU e chamadas de desenho na GPU.


📋 Informações Rápidas de Oclusão de Entidades ​

PropriedadeValor
Pipeline AlvoEntityRenderer.shouldRender(T, Frustum, double, double, double)
Perfil PadrãoSUPER (Extremo)
Contexto de RecorteClipContext.Block.COLLIDER, ClipContext.Fluid.NONE
Filtragem de ChãoIgnora impactos Direction.UP quando altura do impacto $\le Y + 0.15\text{m}$
Oclusão por FolhasBlocos de renderização sólida e blocos BlockTags.LEAVES ocluem as linhas de visão
Bolha de ImunidadeDistância ao quadrado $< \text{minDistanceSq}$

🔬 Amostragem Anatômica Multiponto de Linha de Visão ​

Em vez de um raycast simplista de ponto único que faz os mobs piscarem nas esquinas, o Camera Culling realiza amostragem anatômica multiponto com base no Perfil de Culling selecionado:

text
       [1] Head Top (maxY - 0.05)
          \
           [2] Eye Position (entity.getEyeY())
            \
             [3] Upper Torso (minY + height * 0.70)
              \
               [4] Center of Mass (centerY)
                \
        [5-8] Elevated Perimeter Flanks (width/depth checks)
  1. Amostra 1: Topo da Cabeça da Entidade (maxY - 0.05)
    • Verificação de alta prioridade. Detecta entidades altas espiando por cima de barricadas baixas ou cercas.
  2. Amostra 2: Posição Anatômica dos Olhos (getEyeY())
    • Linha de visão direta da câmera até os olhos do mob.
  3. Amostra 3: Tronco Superior / Peito (minY + height * 0.70)
    • Avalia linhas de visão da parte superior do corpo com segurança acima do nível do solo.
  4. Amostra 4: Centro de Massa ((minY + maxY) * 0.5)
    • Teste geométrico geral do ponto médio.
  5. Amostras 5–8: Flancos Elevados do Perímetro
    • Avalia $(X_{\min} + 0.15, Z_{\min} + 0.15)$, $(X_{\max} - 0.15, Z_{\min} + 0.15)$, etc. Garante que chefes largos (ex.: Devastadores, Wardens, Aranhas) permaneçam visíveis quando seus ombros surgirem de trás de quinas.

🛡️ Filtragem Direcional de Chão e Encostas ​

Quando um jogador olha para baixo em direção a um mob situado em terreno irregular, um raycast padrão pode colidir com a superfície superior de um bloco próximo aos pés do mob, tratando incorretamente o chão como uma parede oclusora.

O Camera Culling incorpora a Filtragem Direcional de Impacto no Chão: $$\text{Se } \text{hit.getDirection()} == \text{Direction.UP} \quad \text{e} \quad Y_{\text{hit} \le Y_{\text{target} + 0.15\text{m} \implies \text{Linha de Visão Válida (Não Bloqueada)}$$

Isso assegura que mobs atravessando colinas, escadas e terrenos acidentados nunca sejam ocluídos erroneamente.


⚡ Motor de Raycast sem Alocação ​

Em versões anteriores, a avaliação de 8 pontos de amostra em 100 entidades gerava mais de 180.000 alocações de new Vec3() na heap por segundo, resultando em pausas de coleta de lixo (GC) Young-Gen da JVM.

No 26.1.2, o CullingRaycastHelper passa diretamente as coordenadas primitivas:

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

Essa arquitetura elimina completamente alocações intermediárias na heap a cada quadro.


🔗 Páginas Relacionadas ​

Official documentation & web portal for Dasik Igaijinn mods.