-
Notifications
You must be signed in to change notification settings - Fork 0
26.2 Particle and Animation Culling
Dasik edited this page Aug 20, 2026
·
1 revision
In vanilla Minecraft, subterranean lava drips, cave dust, portal particles, and torches generate hundreds of particle quads behind solid stone walls that are submitted to the GPU. Simultaneously, animated block texture atlases continually upload frame data to the GPU even when the player is paused in singleplayer or sitting in modal menus.
Camera Culling introduces high-speed particle line-of-sight checks and atlas upload suppression.
| Property | Value |
|---|---|
| Particle Target | SingleQuadParticle.extract(QuadParticleRenderState, Camera, float) |
| Animation Target | TextureAtlas.cycleAnimationFrames() |
| Proximity Safety | 4.0 meters ( |
| Max Particle Distance | 64.0 meters ( |
| Atlas Pause Trigger | Singleplayer game paused OR no active level/player |
Particle Generated at (X, Y, Z)
│
▼
[1] Distance <= 4m? ──────────► RENDER (Proximity Bubble)
│ No
▼
[2] Distance > 64m? ──────────► CULL (Far Cutoff)
│ No
▼
[3] Inside Solid Block? ──────► CULL (Encased)
│ No
▼
[4] Visual Clip Raycast Blocked?
├── Yes ──────────────► CULL (Occluded)
└── No ───────────────► RENDER (Visible)
-
Proximity Safety Bubble (4.0m): Particles emitted within 4 meters of the camera are rendered unconditionally in
$< 0.0001\mu\text{s}$ . - Far Distance Cutoff (64.0m): Particles generated beyond 64 meters are culled to protect GPU quad fillrate.
-
Solid Block Enclosure: If the block coordinate
BlockPos.containing(x, y, z)hasisSolidRender() == true, the particle is dropped immediately. -
Visual Clip Raycast: Projects a
ClipContext.Block.VISUALray from camera position to the particle vector. If an opaque solid block intercepts the sightline with$> 0.35\text{m}$ margin, rendering is skipped.
Texture atlas animations consume GPU bandwidth to cycle frame indices.
Camera Culling checks AnimationCullingHelper.shouldPauseAtlasAnimation() in TextureAtlasMixin:
- If singleplayer is paused (
mc.isPaused() == true), atlas uploads are frozen. - If sitting on the title screen, in modal menus, or disconnected from world, background texture cycling is halted.
Camera Culling Documentation • Part of the Vanilla Outsider Collection
Author: Dasik (Rifaditya) • Licensed under GNU General Public License v3.0 (GPLv3)
📌 Repository Source Disclaimer: The documentation in this Wiki reflects the current source code state in the repository, which may include recent unreleased commits ahead of public release builds on CurseForge/Modrinth.
- MC 26.3 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration
- MC 26.2 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration
- MC 26.1.2 Overview
- Entity Occlusion Culling
- Block Entity Culling
- Sign & Hanging Sign Culling
- Particle & Animation Culling
- Mob Crowd Overdraw Defense
- Distance Texture LOD
- Boss & Blacklist Immunity
- Temporal Hysteresis & Math
- Commands & Configuration
- GUI Configuration (YACL)
- Debug Tracing & Diagnostics
- Architecture & Mixins
- Developer Setup & Building
- API & Mod Integration