Skip to content

✨ Отсечение частиц и анимаций (Minecraft 26.1.2) ​

В ванильном Minecraft капли подземной лавы, пещерная пыль, частицы порталов и факелов создают сотни полигонов частиц за сплошными каменными стенами, которые отправляются на отрисовку в GPU. Одновременно с этим анимированные текстурные атласы блоков непрерывно передают кадры в GPU, даже когда игрок находится на паузе в одиночной игре или в модальных меню.

Camera Culling решает обе проблемы с помощью эффективного отсечения на стороне клиента.


📋 Инфобокс отсечения частиц ​

СвойствоЗначение
Зона безопасности близостиБезусловный рендеринг при расстоянии $\le 4.0\text{м}$
Дальняя граница отсеченияЧастицы на расстоянии $> 64.0\text{м}$ сбрасываются
Конвейер трассировки лучейSingleQuadParticle.extract(...) @At("HEAD")
Хук анимации атласовTextureAtlasMixin.cycleAnimationFrames

🫧 Конвейер проверки линии взгляда частиц ​

text
Particle Generated
  │
  ├── Distance <= 4.0m? ──────► RENDER (Safety Bubble)
  │
  ├── Distance > 64.0m? ──────► CULL (Too Far)
  │
  ├── Block is SolidRender? ──► CULL (Inside Solid Geometry)
  │
  └── Visual Raycast Blocked?
        ├── Yes ──────────────► CULL (Behind Walls)
        └── No ───────────────► RENDER (Visible)
  1. Зона безопасности близости (4.0м): Частицы, созданные в пределах 4 метров от камеры, отрисовываются безусловно за $< 0.0001\mu\text{s}$.
  2. Дальняя граница отсечения (64.0м): Частицы за пределами 64 метров отсекаются для защиты скорости заполнения GPU.
  3. Окружение твердым блоком: Если координаты блока BlockPos.containing(x, y, z) имеют isSolidRender() == true, частица немедленно отбрасывается.
  4. Трассировка визуального луча: Проецирует луч ClipContext.Block.VISUAL из позиции камеры к вектору частицы. Если непрозрачный твердый блок пересекает линию взгляда с запасом $> 0.35\text{м}$, рендеринг пропускается.

🎬 Заморозка анимаций блоков и текстурных атласов ​

Анимации текстурных атласов потребляют пропускную способность GPU для переключения кадров.

Camera Culling вызывает AnimationCullingHelper.shouldPauseAtlasAnimation() в TextureAtlasMixin:

  • Если одиночная игра приостановлена (mc.isPaused() == true), загрузка атласов замораживается.
  • Если открыты полноэкранные модальные экраны меню (инвентарь, настройки), анимации приостанавливаются, экономя такты GPU.

🔗 Связанные страницы ​

Official documentation & web portal for Dasik Igaijinn mods.