GRAPHICS ENGINE & COSMETICS ECOSYSTEM

Пайплайн HD-текстур и плащей 1024x512 через MCX-ID

TL;DR: Мы внедрили гибридный графический конвейер косметики: поддержка текстур ультравысокого разрешения 1024x512 пикселей с альфа-каналом, процедурная вертексная симуляция колыхания ткани на Compute Shaders и мгновенная подгрузка без падения TPS или сетевого лага.

1. Проблема стандартной системы скинов Mojang

Официальный формат скинов Minecraft застрял на разрешении 64x64 (или 64x32 в устаревших версиях). При приближении камеры модель персонажа превращается в размытые гигантские пиксели. Кроме того, ванильные плащи представляют собой плоский параллелепипед из 6 граней без динамической физики, который просто поворачивается назад при ускорении персонажа.

Для пользователей экосистемы Minecrafter-X мы создали независимый конвейер рендеринга персонажей, совместимый с официальными скинами, но открывающий возможности графики уровня современных соревновательных шутеров.

2. Расширение текстурного атласа до 1024x512

В клиенте MCX модуль xmc-cosmetics-core перехватывает загрузку сущностей игроков. Для пользователей с активной учетной записью MCX-ID формируется виртуальный текстурный атлас с разрешением 1024x512 пикселей.

Это дает в 16 раз более плотную пиксельную сетку на каждом полигоне модели Стива и Алекс. Мы внедрили поддержку честного альфа-смешивания (True Alpha Blending) для второго слоя брони и аксессуаров (наушники, очки, наплечники), что в оригинальной игре приводило к артефактам сортировки Z-буфера.

3. Физика ткани на GPU (Spring-Mass Mesh Simulation)

Вместо деревянного 6-гранного блока, плащи в клиенте MCX генерируют сетку из 16x32 вершин (512 полигонов). На GPU выполняется физическая симуляция пружинной сетки (Spring-Mass System):

  • Учитывается вектор скорости персонажа, бег, прыжки и падение в бездну.
  • Симуляция ветра при полете на элитрах с реалистичным сгибанием ткани по аэродинамическим законам.
  • Аппаратная коллизия со спиной игрока и надетой кирасой, исключающая проваливание ткани внутрь брони.
net/xmc/mixin/client/PlayerSkinMixin.java — Инъекция HD атласа
package net.xmc.mixin.client;

import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.util.Identifier;
import net.xmc.cosmetics.XmcSkinRegistry;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(AbstractClientPlayerEntity.class)
public abstract class PlayerSkinMixin {
    
    @Inject(method = "getCapeTexture", at = @At("HEAD"), cancellable = true)
    private void injectXmcHdCape(CallbackInfoReturnable<Identifier> cir) {
        AbstractClientPlayerEntity player = (AbstractClientPlayerEntity)(Object)this;
        Identifier customCape = XmcSkinRegistry.getInstance().getHdCapeFor(player.getGameProfile().getId());
        
        if (customCape != null) {
            // Возвращаем динамический HD идентификатор вместо стандартного
            cir.setReturnValue(customCape);
        }
    }
}

4. Высокоскоростная доставка через сеть MCX CDN

Чтобы HD-косметика всех игроков в PvP-лобби (до 150 человек) не забивала сетевой канал, клиент использует многоуровневый LRU-кэш на диске NVMe и асинхронную подгрузку текстур в сжатом формате KTX2 / BC7.

Сжатие текстур по стандарту BC7 сокращает объем памяти видеокарты в 4 раза без визуальной потери качества, а декомпрессия происходит мгновенно на аппаратных текстурных блоках GPU при отрисовке кадра.

Каталог косметики Pro