🎨 Дистанционные LOD-текстуры мобов (Minecraft 26.3)
Отрисовка текстур полного высокого разрешения (1024x1024 и выше) на далеких мобах, занимающих всего 4x4 пикселя на экране игрока, впустую расходует пропускную способность видеопамяти GPU и кэш-линии текстурных сэмплеров.
Camera Culling включает изолированный 3-уровневый движок смещения LOD текстур OpenGL, динамически адаптирующий выборку мипмапов в зависимости от расстояния до сущности.
📋 Инфобокс дистанционного LOD текстур
| Свойство | Значение |
|---|---|
| Хук конвейера | LivingEntityRenderer.submit(...) @At("HEAD") & @At("RETURN") |
| Параметр OpenGL | GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL14.GL_TEXTURE_LOD_BIAS, bias) |
| Ближний порог | $< 16.0$ блоков $\implies 0.0\text{f}$ Bias (Полное разрешение) |
| Средний порог | $16.0 - 32.0$ блоков $\implies 1.0\text{f}$ Bias (Половинное разрешение) |
| Дальний порог | $> 32.0$ блоков $\implies 2.5\text{f}$ Bias (Четверть разрешения / Мипмап) |
| Исключения | Светящиеся сущности, локальный игрок, боссы и мини-боссы, черный список |
🔬 Математическое дистанционное смещение LOD
Camera
│
├── [ 0m to 16m ] ──► Bias 0.0f (100% Native Full-Res Texture)
│
├── [ 16m to 32m ] ──► Bias 1.0f (50% Half-Res Mipmap Sampling)
│
└── [ > 32m ] ──────► Bias 2.5f (25% Low-Res Mipmap Sampling)Смещение LOD $B$ вычисляется исключительно из квадрата расстояния: $$B(d) = \begin{cases} 0.0\text{f} & \text{если } d^2 < \text{startDist}^2 \ (16.0^2) \ 1.0\text{f} & \text{если } \text{startDist}^2 \le d^2 < \text{farDist}^2 \ (32.0^2) \ 2.5\text{f} & \text{если } d^2 \ge \text{farDist}^2 \end{cases}$$
Изоляция состояния OpenGL
При рендеринге живой сущности LivingEntityRendererMixin внедряется в submit:HEAD для применения рассчитанного смещения и немедленно сбрасывает его до 0.0f в submit:RETURN. Это гарантирует, что модели блоков, предметов и элементы интерфейса никогда не будут затронуты.
