Пайплайн HD-текстур и плащей 1024x512 через MCX-ID
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):
- Учитывается вектор скорости персонажа, бег, прыжки и падение в бездну.
- Симуляция ветра при полете на элитрах с реалистичным сгибанием ткани по аэродинамическим законам.
- Аппаратная коллизия со спиной игрока и надетой кирасой, исключающая проваливание ткани внутрь брони.
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 при отрисовке кадра.