Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧊 WPF Minecraft Skin Viewer

License: MIT Platform: .NET

Легкий и производительный компонент для визуализации скинов 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 для текстур позволяет избежать "мыла" — скины выглядят четко, как в оригинальной игре.

🚀 Быстрый старт

1. Установка

Просто скопируйте файл SkinView.cs в папку вашего проекта.

2. Использование в XAML

Подключите пространство имен и добавьте контрол:

<Window ... xmlns:local="clr-namespace:YourProject.Controls">
    
    <local:SkinView x:Name="PlayerPreview" 
                    Width="300" 
                    Height="400" 
                    SkinSource="{Binding MyBitmapImage}" />
</Window>

3. Загрузка скина

Для отображения персонажа передайте изображение (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!

📸 Примеры работы

Демонстрация SkinView

Пример 1 — Steve

Пример 2 — Slim + Overlays

Разработано в рамках проекта Runia.

About

Lightweight 3D Minecraft skin renderer for WPF. Supports Slim/Classic models, overlays, and smooth auto-rotation. Zero dependencies.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages