Skip to content

✨ Oclusão de Partículas e Animações (Minecraft 26.1.2) ​

No Minecraft vanilla, gotas de lava subterrâneas, poeira de caverna, partículas de portais e tochas geram centenas de quads de partículas atrás de paredes sólidas de pedra que são submetidos à GPU. Simultaneamente, atlas de texturas de blocos animados enviam continuamente dados de quadros para a GPU, mesmo quando o jogador pausa no modo um jogador ou está em menus modais.

O Camera Culling introduz verificações de linha de visão de alta velocidade para partículas e supressão de upload de atlas de texturas.


📋 Informações Rápidas de Oclusão de Partículas e Animações ​

PropriedadeValor
Alvo de PartículasSingleQuadParticle.extract(QuadParticleRenderState, Camera, float)
Alvo de AnimaçãoTextureAtlas.cycleAnimationFrames()
Segurança por Proximidade4,0 metros ($16.0\text{m}^2$) ao redor da câmera
Distância Máxima de Partículas64,0 metros ($4096.0\text{m}^2$)
Gatilho de Pausa do AtlasJogo pausado no singleplayer OU sem nível/jogador ativo

🌪️ Pipeline de Oclusão de Partículas ​

text
Partícula Gerada em (X, Y, Z)
        │
        ▼
[1] Distância <= 4m? ──────────► RENDERIZAR (Bolha de Proximidade)
        │ Não
        ▼
[2] Distância > 64m? ──────────► OCLUIR (Corte Distante)
        │ Não
        ▼
[3] Dentro de Bloco Sólido? ───► OCLUIR (Encapsulada)
        │ Não
        ▼
[4] Raycast de Recorte Visual Bloqueado?
        ├── Sim ──────────────► OCLUIR (Ocluída)
        └── Não ──────────────► RENDERIZAR (Visível)
  1. Bolha de Segurança por Proximidade (4,0m): Partículas emitidas a menos de 4 metros da câmera (ex.: espirais de poções, poeira de corrida, golpes de ataque) são renderizadas incondicionalmente em $< 0.0001\mu\text{s}$.
  2. Corte por Distância Longa (64,0m): Partículas geradas além de 64 metros são ocluídas para proteger a taxa de preenchimento (fillrate) de quads da GPU.
  3. Encapsulamento em Bloco Sólido: Se a coordenada do bloco BlockPos.containing(x, y, z) tiver isSolidRender() == true, a partícula é descartada imediatamente.
  4. Raycast de Recorte Visual: Projeta um raio ClipContext.Block.VISUAL da posição da câmera até o vetor da partícula. Se um bloco sólido opaco interceptar a linha de visão com margem $> 0.35\text{m}$, a renderização é ignorada.

🎬 Congelamento de Animações de Blocos e Atlas de Texturas ​

Animações no atlas de texturas (lanternas do mar animadas, água/lava fluindo, prismarino, fogo, bússola, relógio) consomem largura de banda da GPU para alternar índices de quadros.

O Camera Culling verifica AnimationCullingHelper.shouldPauseAtlasAnimation() em TextureAtlasMixin:

  • Se o jogo no singleplayer estiver pausado (mc.isPaused() == true), os uploads do atlas são congelados.
  • Se estiver na tela inicial, em menus modais ou desconectado do mundo, a ciclagem de texturas em segundo plano é suspensa.

🔗 Páginas Relacionadas ​

Official documentation & web portal for Dasik Igaijinn mods.