Skip to content

🪧 Отсечение текста двусторонних табличек (Minecraft 26.2) ​

В Minecraft 26.2 таблички поддерживают двусторонний рендеринг текста. Движок рендеринга шрифтов отрисовывает полигоны глифов, цвета и контуры свечения на обеих сторонах одновременно.

Camera Culling устраняет ненужные проходы рендеринга текста с помощью скалярного произведения вектора нормали грани ($\vec{N} \cdot \vec{V}$) и быстрого пропуска пустого текста.


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

СвойствоЗначение
Целевой конвейерBlockEntityRenderDispatcher.tryExtractRenderState @At("RETURN")
Хук APIsignState.frontText = null; / signState.backText = null;
Поддерживаемые типыНастенные, напольные, настенные подвесные и потолочные подвесные таблички
Пропуск пустого текстаАвтоматически пропускает пустые стороны без видимых символов
Допуск скалярного произведенияПогрешность $\pm 0.05$ предотвращает появление текста на острых углах

📐 Математика скалярного произведения нормали вектора ​

Чтобы определить, направлена ли лицевая или обратная сторона таблички к камере, Camera Culling рассчитывает скалярное произведение вектора нормали грани $\vec{N} = (N_x, N_z)$ и вектора от центра таблички к камере $\vec{V} = (V_x, V_z)$:

$$V_x = X_{\text{cam} - (X_{\text{sign} + 0.5), \quad V_z = Z_{\text{cam} - (Z_{\text{sign} + 0.5)$$

1. Настенные таблички (WallSignBlock.FACING) и подвесные настенные таблички ​

Вектор нормали напрямую берется из шаговых смещений направления блока Direction: $$N_x = \text{facing.getStepX()}, \quad N_z = \text{facing.getStepZ()}$$

2. Напольные таблички (StandingSignBlock.ROTATION) и потолочные подвесные таблички ​

Поворот представлен целым числом $0 \dots 15$. Угол $\theta$ в радианах рассчитывается: $$\theta = \left(\frac{\text{rotation} \times 360^\circ}{16}\right) \times \frac{\pi}{180}$$ $$N_x = -\sin\theta, \quad N_z = \cos\theta$$

3. Определение видимости ​

Скалярное произведение $D$ оценивает угол наблюдения: $$D = N_x V_x + N_z V_z$$

  • Оценка лицевой грани: Отсекается, когда $D < -0.05$ (Камера находится позади плоскости таблички).
  • Оценка задней грани: Отсекается, когда $D > 0.05$ (Камера находится перед плоскостью таблички).

⚡ Быстрый проход пустых сторон ​

Если игрок написал текст только на одной стороне таблички (или поставил табличку без текста в качестве декоративного барьера), Camera Culling проверяет 4 строки текста:

java
public static boolean isTextEmpty(SignText text) {
    if (text == null) return true;
    for (int i = 0; i < 4; i++) {
        Component msg = text.getMessage(i, false);
        if (msg != null && !msg.getString().trim().isEmpty()) {
            return false;
        }
    }
    return true;
}

Пустые стороны мгновенно обнуляются без лишних тригонометрических расчетов и вычисления скалярного произведения.


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

Official documentation & web portal for Dasik Igaijinn mods.