Легкий и производительный компонент для визуализации скинов Minecraft в 3D. Идеально подходит для лаунчеров, личных кабинетов или редакторов скинов на базе WPF.
Главная идея проекта — минимализм. Вам не нужно подключать Unity, HelixToolkit или другие тяжелые библиотеки. Весь рендеринг работает на «чистом» WPF через Viewport3D.
- Native WPF 3D (No Engines): Использует встроенный функционал Windows Presentation Foundation. Это гарантирует нативную интеграцию в дерево элементов, поддержку прозрачности и отсутствие лишних зависимостей.
- Полная поддержка слоев (Overlays): Честная отрисовка второго слоя скина (головные уборы, куртки, наплечники). Слои вынесены на отдельный меш с небольшим отступом (
inflation), что создает эффект объема. - Автоопределение Slim/Classic (Alex/Steve): Алгоритм автоматически анализирует альфа-канал изображения. Если скин соответствует формату Slim (руки в 3 пикселя), модель перестраивается на лету.
- Интерактивность:
- Auto-rotation: Плавное автоматическое вращение, если пользователь не взаимодействует с моделью.
- Mouse Control: Поддержка вращения мышью по осям X и Y с ограничением угла наклона.
- Pixel Perfect: Использование режима
NearestNeighborдля текстур позволяет избежать "мыла" — скины выглядят четко, как в оригинальной игре.
Просто скопируйте файл SkinView.cs в папку вашего проекта.
Подключите пространство имен и добавьте контрол:
<Window ... xmlns:local="clr-namespace:YourProject.Controls">
<local:SkinView x:Name="PlayerPreview"
Width="300"
Height="400"
SkinSource="{Binding MyBitmapImage}" />
</Window>Для отображения персонажа передайте изображение (BitmapSource) в свойство SkinSource. Это можно сделать как через привязку данных (Binding), так и напрямую в коде.
PlayerPreview.SkinSource = new BitmapImage(new Uri("https://minotar.net/skin/Steve", UriKind.Absolute));
- Геометрия: Модель собирается вручную через
MeshGeometry3D. Каждый элемент тела — это бокс с индивидуально рассчитанными UV-координатами развертки Minecraft. - Материалы: Используется
VisualBrush. Это позволяет обновлять текстуру "на лету" без пересоздания всей 3D-сцены. - Оптимизация: Все части тела группируются в два основных меша (базовый и оверлей) для минимизации нагрузки на рендер.
Проект является легковесным решением, поэтому имеет следующие архитектурные особенности:
- Z-Fighting (Мерцание граней): Слой одежды находится очень близко к телу. При определенных углах обзора текстуры могут "мерцать" из-за особенностей расчета глубины в
Viewport3D. - Отсутствие внутренних плоскостей: Для экономии ресурсов отрисовываются только внешние грани. Если скин имеет прозрачные области на руках или ногах, модель будет просвечивать насквозь.
- Зависимость от UI-потока: Анимация завязана на
DispatcherTimer. При высокой нагрузке на основной поток приложения плавность вращения может снизиться. - Упрощенная проверка Slim-типа: Проверка идет по одному пикселю. Если технические области скина заполнены некорректно, тип модели может определиться неверно.
- VisualBrush: В редких случаях при экстремальном масштабировании могут проявляться артефакты отрисовки кистей WPF.
Если вы нашли баг или у вас есть идеи по улучшению — открывайте Issue или Pull Request!
Разработано в рамках проекта Runia.


