Skip to content

🧱 Окклюзионное отсечение сущностей (Minecraft 26.2) ​

В Minecraft 26.2 клиентский рендеринг сущностей извлекает состояния рендеринга для всех сущностей внутри пирамиды видимости камеры—даже когда они скрыты за пещерами, скалами или постройками. Camera Culling перехватывает эту проверку, предотвращая обработку геометрии на CPU и вызовы отрисовки GPU для скрытых мобов.


📋 Инфобокс отсечения сущностей ​

СвойствоЗначение
Целевой конвейерEntityRenderer.shouldRender @At("HEAD")
Алгоритм окклюзииМноготочечная трассировка лучей + проверка перекрытия толпой
Буфер задержки (Grace)Адаптивный временной гистерезис на 4/8/12 кадров
Анатомические точки8 точек выборки (голова, глаза, верх торса, центр, 4 фланга)
Фильтр направленияПол/склоны: hit.getDirection() == Direction.UP + дельта $Y \le 0.15\text{m}$

🔬 Многоточечная анатомическая выборка линии взгляда ​

Вместо упрощенной одноточечной трассировки, вызывающей мерцание мобов на углах, Camera Culling выполняет многоточечную анатомическую выборку в зависимости от выбранного профиля отсечения:

text
       [1] Head Top (maxY - 0.05)
            │
       [2] Eye Level (getEyeY)
            │
       [3] Upper Torso (minY + height * 0.70)
            │
       [4] Center of Mass ((minY + maxY) * 0.5)
            │
        [5-8] Elevated Perimeter Flanks (width/depth checks)
  1. Точка 1: Верх головы (maxY - 0.05) — Высокоприоритетная проверка. Обнаруживает высоких мобов, выглядывающих из-за низких баррикад или заборов.
  2. Точка 2: Анатомический уровень глаз (getEyeY()) — Прямая линия взгляда от камеры к глазам моба.
  3. Точка 3: Верхняя часть торса / грудь (minY + height * 0.70) — Оценивает линию взгляда безопасно выше уровня земли.
  4. Точка 4: Центр массы ((minY + maxY) * 0.5) — Общая проверка геометрической середины.
  5. Точки 5–8: Приподнятые периметральные фланги — Проверяет широких мобов (разорителей, хранителей, пауков), выглядывающих из-за углов.

🛡️ Направленная фильтрация пола и склонов ​

Когда игрок смотрит вниз на моба, стоящего на неровной местности, стандартная трассировка может попасть в верхнюю грань блока у ног моба, ошибочно приняв пол за перекрывающую стену.

Camera Culling использует направленную фильтрацию попаданий в пол: $$\text{Если } \text{hit.getDirection()} == \text{Direction.UP} \quad \text{и} \quad Y_{\text{hit} \le Y_{\text{target} + 0.15\text{m} \implies \text{Действительная линия взгляда (не заблокировано)}$$

Это гарантирует, что мобы, перемещающиеся по склонам, лестницам и неровной местности, никогда не отсекаются ошибочно.


⚡ Движок трассировки лучей с нулевым выделением памяти ​

В 26.2 CullingRaycastHelper передает чистые примитивные координаты:

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

Передавая координаты примитивными типами double, критический цикл рендеринга полностью исключает создание временных объектов Vec3 в куче во время трассировки.


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

Official documentation & web portal for Dasik Igaijinn mods.