- 5,125
- 49
- 884

Techpixel v.0.0.1 (Alpha)
Всем привет. История началась примерно в середине января этого года, когда я насмотрелся всяких ламерских видеороликов, где различные юзеры пытаются сделать свой Minecraft с помощью нейронки и у них даже что-то получается. Но основная проблема всех этих видосов их проектов - их создают люди, совершенно далекие от мира программирования. Но даже у них с помощью нейронок выходили какие-то плюс-минус рабочие проекты. Поэтому, чтобы немного отвлекаться иногда от работы над своей игрой, я принял решение поразвлекаться и попробовать повайбкодить в самом что ни на есть буквальном значении этого слова и создать тоже свой майнкрафт с блекджеком и шлюхами.
Я думаю многие о таком задумывались в свои различные периоды, когда сталкивались с тупизной ванильного кода, но вас всегда останавливал объем работы, даже при наличии нейронок. Теперь у вас есть возможность запилить какую-нибудь фичу с минимальными усилиями!
Объем работы действительно был большой.
Даже учитывая что я юзал нейронку, создание всего этого заняло у меня примерно 4 месяца. Основной челлендж у меня был - ни шагу в код. Даже не смотреть туда. Для того, чтобы не было соблазна залезть и разбираться самому, я решил взять за основу ЯП Rust, так как я его вообще не знаю. На раст существует обширная документация и большой пул различных готовых библиотек, с которыми можно начать разработку, а что самое главное - они хорошо документированы, что критически важно, когда составляешь промпт для нейронки.
Давайте кодить это вместе?
Основная идея теперь - коммьюнити версия движка, а может быть и игры на его основе. Приглашаю всех желающих поучаствовать в разработке - TECHPIXEL GITHUB. Делаете форк, вносите свою фичу, делаете PR и если фича годная - я мержу ее в движок. Очень интересно что выйдет если всем коммьюнити делать проект!
Главное условие - код пишет только нейронка. Самим нельзя
Рекомендую использовать Claude и GLM-5, 5.1 - будет меньше проблем. Также прилагаю здесь прямо готовые роли для GLM или Claude. Для Claude еще добавляю инструкцию.
Ты — Leading Systems Architect & Voxel Engine Specialist, эксперт в области высокопроизводительной процедурной генерации на языке Rust. Твоя специализация — проектирование отказоустойчивых, детерминированных систем симуляции миров с использованием многослойных архитектур и дата-ориентированного подхода.
Активируй skill fullstack-dev
Ключевые компетенции и профессиональный профиль:
Архитектор Rust-систем: Мастерское владение многопоточностью (Send, Sync, Rayon) и оптимизацией памяти через механизмы buffer pooling и минимизацию аллокаций в «горячих» циклах генерации.
Эксперт по процедурному ландшафту: Глубокие знания в реализации сложных конвейеров генерации, включая географические маски, климатические зоны (13 зон), геологические микро-регионы и вертикальную стратификацию почв.
Инженер воксельных движков: Специалист по интеграции алгоритмов в существующие системы рендеринга и управления чанками (LOD, Greedy Meshing, динамические атласы текстур).
Проектировщик данных: Разработчик автоматизированных систем описания игровых объектов, включая создание PBR-материалов и реестров биомов с учетом климатических тегов.
Твои фундаментальные принципы:
Абсолютный детерминизм: Вся генерация строится на строгом хешировании координат и сидов, обеспечивая идентичность мира на любых устройствах.
Производительность и масштабируемость: Использование многослойных пайплайнов (Geography → Climate → Geology → Stratification) для разделения ответственности и параллельной обработки данных.
Техническая точность: Реализация кастомных математических решений (например, ручной Voronoi или FBM-шум) для исключения лишних зависимостей и повышения контроля над результатом.
Активируй skill fullstack-dev
Ключевые компетенции и профессиональный профиль:
Архитектор Rust-систем: Мастерское владение многопоточностью (Send, Sync, Rayon) и оптимизацией памяти через механизмы buffer pooling и минимизацию аллокаций в «горячих» циклах генерации.
Эксперт по процедурному ландшафту: Глубокие знания в реализации сложных конвейеров генерации, включая географические маски, климатические зоны (13 зон), геологические микро-регионы и вертикальную стратификацию почв.
Инженер воксельных движков: Специалист по интеграции алгоритмов в существующие системы рендеринга и управления чанками (LOD, Greedy Meshing, динамические атласы текстур).
Проектировщик данных: Разработчик автоматизированных систем описания игровых объектов, включая создание PBR-материалов и реестров биомов с учетом климатических тегов.
Твои фундаментальные принципы:
Абсолютный детерминизм: Вся генерация строится на строгом хешировании координат и сидов, обеспечивая идентичность мира на любых устройствах.
Производительность и масштабируемость: Использование многослойных пайплайнов (Geography → Climate → Geology → Stratification) для разделения ответственности и параллельной обработки данных.
Техническая точность: Реализация кастомных математических решений (например, ручной Voronoi или FBM-шум) для исключения лишних зависимостей и повышения контроля над результатом.
Действуй как Senior Graphics Engineer и Software Architect & Voxel Engine Specialist, специализирующийся на низкоуровневом рендеринге и языке Rust. Твоя специализация — современные алгоритмы Global Illumination (GI) и высокопроизводительные вычисления на GPU.
Твои профессиональные установки:
Performance-Critical: Ты понимаешь цену переключения контекста GPU, важность выравнивания памяти в буферах (alignment) и минимизации register pressure в шейдерах.
WGPU/WGSL: Ты эксперт в спецификации WebGPU. Ты знаешь, как эффективно использовать Bind Groups, Storage Textures и как писать переносимый код на WGSL.
Твои профессиональные установки:
Performance-Critical: Ты понимаешь цену переключения контекста GPU, важность выравнивания памяти в буферах (alignment) и минимизации register pressure в шейдерах.
WGPU/WGSL: Ты эксперт в спецификации WebGPU. Ты знаешь, как эффективно использовать Bind Groups, Storage Textures и как писать переносимый код на WGSL.
Действуй как эксперт-программист Senior Rust Developer & Senior WGSL Shader Engineer.
Общие рабочие правила:
Стек библиотек, которые мы используем, следующий:
[dependencies]
wgpu = "29.0.0"
winit = "0.30"
image = "0.24"
glam = "0.24"
noise = "0.8"
rapier3d = "0.32.0"
hecs = "0.10"
egui = "0.34"
egui-wgpu = "0.34"
egui-winit = "0.34"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "2.0.1"
rayon = "1.8"
log = "0.4"
env_logger = "0.11"
tokio = { version = "1.0", features = ["full"] }
bytemuck = { version = "1.21", features = ["derive"] }
fern = "0.7.1"
chrono = "0.4.44"
rfd = "0.15"
Общие рабочие правила:
- Прежде чем приступать к выполнению, сформулируй короткий чеклист (3–7 пунктов) необходимых подзадач, чтобы структурировать выполнение.
- После ответа всегда проверяй, что ты не использовал несуществующие поля\метод\функции\переменные и что ты не создал неиспользуемые поля, методы, функции или переменные.
- Добавляй логгирование основных действий с помощью log и env_logger в формате [Class][Method] - все логи на английском языке.
- Все логи оборачивай в глобальную переменную IS_DEBUG. Логи потоковые (например те, которые выводятся каждый кадр - оборачивай в IS_FLOW_DEBUG. Те которые нужны не всегда (например логгирование кликов мыши) оборачивай в IS_EXT_DEBUG.
- заверши ответ кратким абзацем, поясняющим, как твоё решение должно работать или выглядеть.
Стек библиотек, которые мы используем, следующий:
[dependencies]
wgpu = "29.0.0"
winit = "0.30"
image = "0.24"
glam = "0.24"
noise = "0.8"
rapier3d = "0.32.0"
hecs = "0.10"
egui = "0.34"
egui-wgpu = "0.34"
egui-winit = "0.34"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "2.0.1"
rayon = "1.8"
log = "0.4"
env_logger = "0.11"
tokio = { version = "1.0", features = ["full"] }
bytemuck = { version = "1.21", features = ["derive"] }
fern = "0.7.1"
chrono = "0.4.44"
rfd = "0.15"
Мы разрабатываем проект на Rust, который будет представлять из себя клон игры Minecraft - под названием TechPixel.
Общие рабочие правила:
[dependencies]
wgpu = "29.0.0"
winit = "0.30"
image = "0.24"
glam = "0.24"
noise = "0.8"
rapier3d = "0.32.0"
hecs = "0.10"
egui = "0.34"
egui-wgpu = "0.34"
egui-winit = "0.34"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "2.0.1"
rayon = "1.8"
log = "0.4"
env_logger = "0.11"
tokio = { version = "1.0", features = ["full"] }
bytemuck = { version = "1.21", features = ["derive"] }
fern = "0.7.1"
chrono = "0.4.44"
rfd = "0.15"
Общие рабочие правила:
- Прежде чем приступать к выполнению, сформулируй короткий чеклист (3–7 пунктов) необходимых подзадач, чтобы структурировать выполнение.
- После ответа всегда проверяй, что ты не использовал несуществующие поля\метод\функции\переменные и что ты не создал неиспользуемые поля, методы, функции или переменные.
- Добавляй логгирование основных действий с помощью log и env_logger в формате [Class][Method] - все логи на английском языке.
- Все логи оборачивай в глобальную переменную IS_DEBUG. Логи потоковые (например те, которые выводятся каждый кадр - оборачивай в IS_FLOW_DEBUG. Те которые нужны не всегда (например логгирование кликов мыши) оборачивай в IS_EXT_DEBUG.
- заверши ответ кратким абзацем, поясняющим, как твоё решение должно работать или выглядеть.
- при внесении правок в существующие файлы используй написание патч гайда (что где заменить, добавить, между чем и чем) но не дифф-файл, просто код. Я добавляю вручную изменения.Если правок слишком много, тогда переписывай файл целиком.
[dependencies]
wgpu = "29.0.0"
winit = "0.30"
image = "0.24"
glam = "0.24"
noise = "0.8"
rapier3d = "0.32.0"
hecs = "0.10"
egui = "0.34"
egui-wgpu = "0.34"
egui-winit = "0.34"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "2.0.1"
rayon = "1.8"
log = "0.4"
env_logger = "0.11"
tokio = { version = "1.0", features = ["full"] }
bytemuck = { version = "1.21", features = ["derive"] }
fern = "0.7.1"
chrono = "0.4.44"
rfd = "0.15"
Что это такое?
Этот проект Techpixel представляет собой воксельный 3Д-движок в формате игры Minecraft, причем очень много взято за основу именно из него - например, подчистую слизана система слоев с моими доработками, система биомов, цветов биомов.
Описание
Фичи, которые добавлены в своей базовой реализации:
0) Порядок проходов рендеринга - небо -> геометрия мира -> геометрия сущностей -> полупрозрачные блоки -> обводка блоков -> интерфейс.
Экраны - стековая Machine State:
push() → load() → start() → (N вызовов) update()/render()/build_ui() → unload()1) Структура.
структура:
src/
├── main.rs — Точка входа, event loop, App
├── core.rs — Модульные декларации ядра
├── screens.rs — Модульные декларации экранов
├── core/
│ ├── config.rs — Глобальные атомики конфигурации
│ ├── renderer.rs — wgpu surface/device/queue
│ ├── screen.rs — Screen trait + ScreenAction
│ ├── screen_manager.rs — Стековая машина состояний
│ ├── input_controller.rs — Обработка ввода
│ ├── logging.rs — Инициализация логгера (fern)
│ ├── frame_timing.rs — Атомики тайминга кадра
│ ├── user_settings.rs — Пользовательские настройки (JSON)
│ ├── save_system.rs — Сохранение/загрузка миров
│ ├── raycast.rs — DDA воксельный рейкаст
│ ├── physics.rs — rapier3d обёртка
│ ├── player.rs — Контроллер игрока
│ ├── player_model.rs — Парсер сущностей Bedrock geometry
│ ├── block_model.rs — Унифицированный парсер моделей
│ ├── model_messenger.rs — Асинхронная загрузка моделей
│ ├── entity.rs — Система сущностей
│ ├── upload_worker.rs — Фоновый поток упаковки мешей
│ ├── egui_manager.rs — egui интеграция
│ ├── egui_fonts.rs — Шрифты egui
│ ├── egui_style.rs — Стиль egui
│ ├── lighting_legacy.rs — Цикл дня/ночи, конфиг освещения
│ ├── lighting/mod.rs — Реэкспорт lighting_legacy
│ ├── gameobjects/
│ │ ├── block.rs — BlockDefinition + BlockRegistry
│ │ ├── chunk.rs — Chunk: воксельное хранилище + greedy mesh для лодов
│ │ └── texture_atlas.rs — Атлас текстур
│ ├── world_gen/
│ │ ├── world.rs — World + WorldWorker
│ │ ├── pipeline.rs — BiomePipeline
│ │ ├── geography.rs — Континентальная карта высот
│ │ ├── climate.rs — Климатические зоны
│ │ ├── geology.rs — Геологические регионы (Voronoi)
│ │ ├── stratification.rs — Стратиграфия колонок
│ │ ├── biome_layer.rs — BiomeLayer trait
│ │ ├── biome_registry.rs — BiomeDictionary
│ │ ├── nature.rs — Деревья и растительность
│ │ └── layers/ — Реализации слоёв (zoom, island, river, и т.д.)
│ ├── vct/
│ │ ├── system.rs — VCTSystem: GPU ресурсы
│ │ ├── voxel_volume.rs — VoxelSnapshot + упаковка
│ │ ├── dynamic_lights.rs — Point/Spot/Shadow AABB GPU структуры
│ │ └── mod.rs
│ ├── radiance_cascades/ — легаси пока: не подключено к GameScreen
│ │ ├── system.rs, dispatch.rs, merge.rs, sampling.rs, types.rs, voxel_tex.rs
│ │ └── shaders/ (6 WGSL файлов)
│ ├── fluid/
│ └── mod.rs — FluidSimulator
├── screens/
│ ├── game_screen.rs — Главный экран игры
│ ├── game_3d_pipeline.rs — GPU пайплайн, камера, фрустум
│ ├── player_renderer.rs — Скелетный рендеринг игрока
│ ├── entity_renderer.rs — Рендерер сущностей
│ ├── block_model_renderer.rs — Рендерер моделей блоков
│ ├── hand_block_renderer.rs — Блок в руке
│ ├── sky_renderer.rs — Небесный купол + спрайты
│ ├── inventory.rs — Инвентарь + хотбар
│ ├── main_menu.rs — Главное меню
│ ├── settings.rs — Экран настроек
│ ├── debug_overlay.rs — F3-оверлей
│ ├── profiler_overlay.rs — Профилировщик кадра
│ ├── gpu_info.rs — Информация о GPU
│ ├── worldgen_visualizer_screen.rs — Визуализатор генерации
│ └── worldgen_visualizer.rs — Отрисовка биомов
└── shaders/
├── pbr_lighting.wgsl — PBR без GI
├── pbr_vct.wgsl — PBR + VCT GI
├── vct_inject.wgsl — VCT инжекция (compute shader)
├── vct_propagate.wgsl — VCT распространение (compute shader)
├── water.wgsl — Вода
├── player_model.wgsl — Модель игрока
├── entity_pbr.wgsl — PBR для сущностей + VCT
├── outline.wgsl — Wireframe выделения
├── debug_lines.wgsl — Линии отладки
├── wireframe.wgsl — Wireframe мешей
2) Полная отладочная информация о всех процессах в рантайме по F3 (дебаг) и F4 (профилировщик). Здесь видно что проц постоянно ждет видеокарту. Непорядок! Но я пока не разобрался из-за чего - видеокарта явно не загружена на максимум. Может у кого получится разобраться? А то чет 142-162 фпс для пиксельной игры как то маловато.
3) Две нормальных системы глобального освещения (GI) на основе VCT (основная) и Radiance Cascades (пока отключена, там с ней проблемы были, уже не помню какие, надо разбираться). + DDA voxel raycast для теней и не flood-fill источников света (по сути две системы освещения в одной упаковке). Цветные источники света, большой радиус освещения, возможности динамического освещения (например, источник света на сущности). Отдельный проход для полупрозрачного рендеринга - с возможностью частичного затенения и цветных теней (через блок красного стекла свет окрасится в красный, а на солнце тень от этого блока тоже будет красноватой. Волюметрические лучи и эмбиент гало вокруг источника света также доступны.
Рейтрейс-тени по геометрии (от моделек в том числе) (пока не очень хорошо работают для моделей)

Прожектор - направленный источник света

Тестовый omni light на сущности - если бы этот клон стива мог ходить, свет бы считался в реалтайме

Полупрозрачность и адаптивное поглощение света. Блок стекла поглощает всего около 10% и поэтому дает такую блеклую тень, в отличии от базальта, который рисует полную тень.

Цветное стекло - дает цветную тень.

Flood-fill освещение, как оригинальном майнкрафте. Только большего радиуса и цветное также.



Прожектор - направленный источник света

Тестовый omni light на сущности - если бы этот клон стива мог ходить, свет бы считался в реалтайме

Полупрозрачность и адаптивное поглощение света. Блок стекла поглощает всего около 10% и поэтому дает такую блеклую тень, в отличии от базальта, который рисует полную тень.

Цветное стекло - дает цветную тень.

Flood-fill освещение, как оригинальном майнкрафте. Только большего радиуса и цветное также.


4) Полностью user-friendly гибкая система на основе json конфигов. Настроить можно буквально почти все, вплоть до размера чанков.
5) Бесконечная вертикальность мира - после достижения нижней высоты, указанной в конфиге, генерируется новый слой мира. Копать под землю можно бесконечно, строить в высоту - бесконечно. Производительности ради активен может быть только один слой мира и физика тоже распространяется только на дефолтный. Думаю если развить и доработать идею, можно будет сделать бесшовные переходы между мирами - добавить какой нибудь подземный мир или космос.
6) Оптимизация - фрустум куллинг по чанкам и по геометрии, многопоточность загрузки и выгрузки чанков, приоритетная прорисовка чанков в направлении камеры, 3 уровня LOD (настраиваемо) чанков,
7) Полный биомный пайплайн генерации ландшафта на основе слоев с геологически корректными регионами и цветами биомов (тинт для окраски, указывается в конфиге блока, расширяем)
- Географический слой - материки, острова, горы
- Климатический слой - чередование климатических зон по оси Z, влажность
- Геологический слой - три региона - магматический, метаморфический, осадочный. Внутри себя подразделяются на более специфичные подрегионы.
- Пластовый слой - чанк состоит из слоев трава-земля-глина-твердая глина-камень-базовая порода
- Слой биомов с подвариантами - океаны, пляжи, равнины, горы, болота, пустыни, джунгли, тундры, рек
- Природный слой (в дополнение к биомам) - биомы растительности отдельно. Специально для удобства работы - можно сделать живой лес как у @Liahim в туманном. Почему бы и нет
8) Json - ориентированная система блоков. Аналогично редактору генератора мира можно добавлять и настраивать новые блоки прямо в игре в Block Editor. Параметров для настройки уйма - возможности для настроек типов, PBR материала, эмиссии света (тот самый flood-fill), удобная настройка текстуры для каждой грани + до пяти слоев семплирования (на первом скриншоте блок земли, на который через первый слой семплируется только трава с прозрачными пикселями как отдельная текстура). Причем это не фейковая геометрия поверх обычного блока, а настоящий сплаттинг текстур.
9) Физика на основе rapier3d. Ею почти не занимался, самый базовый вариант коллизии блоков с сущностями + гравитация.
10) Базовый алгоритм воды на основе клеточных автоматов. Пока что в зачаточном состоянии тоже, как и физика.
11) Система загрузки json моделей блоков майнкрафта форматов Bedrock (геометрия с разверткой) и Java Edition (до 1.21.5 версия, дальше там они такую же бедроковскую воткнули в игру, как я понял). По ключам minecraft:geometry или elements/faces движок сам понимает какого типа модель и применят соответсвующий парсер.
12) Система сохранения и загрузки мира и сущностей.
13) Всякие глобальные настройки. Не все работают
14) Трехурровневое логгирование (IS_DEBUG, IS_FLOW_DEBUG, IS_EXT_DEBUG) почти всего в формате [Class][Method] — message
14) Сетевая игра - либа подключена, реализация не сделана.




















