# SightCull
**If you can't see it, it isn't rendered.**
Minecraft happily renders every mob standing behind a one-block-thick wall — the villagers inside their houses, the zombies in the cave under your feet, the chests in the next room, the smoke from a campfire you can't even see. Vanilla only culls what's outside your view cone and whole chunk sections its cave-culling can prove unreachable. SightCull closes the gap: anything with **no line of sight to your camera is skipped entirely** — no model, no nametag, no shadow, no GPU work.
The effect is invisible by design. Anything with even a sliver of visibility renders normally, and hidden things reappear within ~35 ms of coming into view. If you ever catch it working, that's a bug.
## What gets culled
- **Entities** — mobs, players, items, armor stands, item frames, paintings, display entities...
- **Block entities** — chests, signs, banners, shulker boxes, skulls, bells...
- **Particles** — smoke, flames, dust, potion swirls, drips... with a twist: every particle in the same block position shares one cached raycast, so an entire hidden smoke column costs a single ray
- **Block-breaking cracks** — someone mining on the other side of a wall costs you nothing
- Nametags, shadows, and fire/leash overlays vanish together with their culled owner
Terrain is left to vanilla's culling (pair SightCull with Sodium for the strongest full stack).
## How it works
When vanilla decides something would be rendered, SightCull raycasts from the camera to the center and corners of its (slightly inflated) bounding box using fast voxel grid traversal. Only full opaque cubes block rays — glass, leaves, fences, slabs, and fluids all count as see-through, so the mod always errs on the side of rendering. Results are cached per object and re-checked continuously, and all raycasting is bounded by a per-frame budget, so even a 500-entity mob farm degrades to cheap cached answers instead of frame spikes.
Culling is projection-independent: rays follow the actual render camera, so it's correct in first person, both third-person views, any FOV from spyglass zoom to Quake Pro, any render distance, and both graphics backends (OpenGL and the experimental Vulkan mode) — the decision happens on the CPU before the graphics API is involved.
## Deliberately never culled
Some hidden things are still drawn on purpose, because you can partly see them or hiding them would read as a bug: glowing entities (outlines pierce walls), whatever you're riding, beacon and end-gateway beams, blocks you're mid-mining, anything within 4 blocks of the camera, and a configurable whitelist (ender dragon, wither, end crystals, fishing bobbers, leash knots by default).
## Controls & config
- **F10** toggles culling in-game (rebindable) — great for before/after FPS comparisons
- **F3** shows live stats: `SightCull: 34/120 E, 12/40 BE, 210/400 P hidden`
- `config/sightcull.json` — per-category switches, cull distances, re-check intervals, raycast budget, and entity/block-entity whitelists
## Good to know
- **Client-side only.** Works on any server; server logic, mob AI, sounds, and hitboxes are untouched. It never reveals anything extra — it only skips drawing what you already couldn't see.
- **Tested for real:** the source ships an automated in-game test that boots the game, seals a cow and smoke particles inside a stone box next to identical ones in the open, and asserts that exactly the hidden ones are skipped — in first person, at FOV 110, and in third person.
- **Shader packs:** entities culled by SightCull won't cast shadow-map shadows (they're genuinely not submitted). Toggle with F10 if a specific scene bothers you.
- **Requires:** Minecraft 26.2, Fabric Loader 0.19.3+, Fabric API, Java 25.
MIT licensed — source included with every release.

