- Core world model (World, Dimension, Tile, Terrain, Platform) - NBT reader/writer with full tag support - Anvil region (.mca) format reader with chunk parsing - Block palette compression and export - Biome database with Minecraft 1.21 biomes - CLI commands: new, import, export, info, render - GUI application with egui (viewport, tools, undo/redo) - Noise-based heightmap generation and editing operations License: GPL-3.0-or-later
5.3 KiB
Executable file
5.3 KiB
Executable file
Terrafier
Rust-native Minecraft world painter — быстрее, легче, современнее.
Нативная замена WorldPainter на Rust. Рендеринг карт через GPU, параллельный экспорт, CLI-first архитектура.
Архитектура
┌────────────────────────────────────────────────────┐
│ terrafier-cli terrafier-gui Библиотека │
│ (clap + json) (egui + eframe) (crates.io) │
├───────────────────┬────────────────────────────────┤
│ terrafier-core │ модель мира, I/O, операции │
│ ┌──────┬──────┬──┴─────┬────────┐ │
│ │World │Tile │Export │Import │ │
│ │Model │Ops │Pipeline│Anvil │ │
│ └──────┴──────┴────────┴────────┘ │
├────────────────────────────────────────────────────┤
│ Foundation crates │
│ nbt │ fastanvil │ noise │ palette-compress │
│ biome-db │
└────────────────────────────────────────────────────┘
Текущий статус (v0.1.0)
Реализовано
- Модель мира: World, Dimension, Tile (128×128), Terrain (7 типов), Layer trait, Platform
- Система координат: явные конвертации BlockCoords → ChunkCoords → RegionCoords → TileCoords
- NBT: full read/write, все типы тегов, gzip support
- Anvil: чтение/запись .mca регионов, разбор чанков, секций, палитры
- Экспорт: Terrafier → Java Edition 1.18+ save (секции, block_states, биомы)
- Импорт: Java Edition save → Terrafier world (level.dat, регионы, surface)
- CLI: new, import, export, info, render (с прогресс-барами, dry-run)
- GUI: редактор на egui (viewport, инструменты, undo/redo)
- Операции: Raise, Lower, Smooth, Flatten, Paint — с MultiTile поддержкой
- Heightmap: noise-based генерация (OpenSimplex), flat, combined
В работе / не реализовано
- GPU-рендеринг (wgpu) — ключевая фича, пока весь рендер CPU
- Слои: Caves, Rivers, Frost, Trees, Resources, Biome
- Импорт .world (WorldPainter format)
- Плагины (WASM)
Стек
| Компонент | Технология |
|---|---|
| Язык | Rust (edition 2024) |
| GUI | egui + eframe |
| GPU | (план) wgpu |
| NBT | Самописный nbt crate |
| Anvil | Самописный fastanvil crate |
| Шум | noise-rs |
| Параллелизм | rayon |
| CLI | clap + indicatif |
| Изображения | image crate |
| Сериализация | serde + bincode |
Почему egui, а не Tauri
egui выбран за:
- Immediate mode — нет оверхэда как у React, подходит для тулов
- Нативная интеграция с Rust (без bridge)
- wgpu-рендеринг напрямую (когда будет реализован)
- Бинарник 2–3 MB vs Tauri 5–10 MB + WebView
Roadmap
Phase 0 (done) — Foundation
NBT парсер, Anvil reader, workspace setup
Phase 1 (done) — Core Model
Tile, Dimension, World, Terrain, Brush, Operation
Phase 2 (done) — Minecraft I/O + CLI
Импорт/экспорт Java Edition, CLI команды
Phase 3 — Operations & Layers
Инструменты (raise, erode, smooth, flatten, fill, paint) Слои (caves, river, frost, trees, biome, resources) Экспортёры слоёв
Phase 4 — GUI
GPU-рендеринг через wgpu (шейдеры, 30-60 FPS) Панорамирование, зум, оверлей кисти Панель слоёв, инструментов, диалоги
Phase 5 — Полировка
Бенчмарки, оптимизация, i18n, пакеты (AppImage/msi/app)
Будущее
Импорт .world, WASM плагины, Bedrock Edition, скриптинг
Модель данных
struct Tile { // 128×128 блоков
heightmap: [i16; 16384], // карта высот
terrain: [u8; 16384], // тип террейна
water_level: [u8; 16384], // уровень воды
layer_data: HashMap<u32, LayerBuffer>,
}
struct Dimension {
tiles: HashMap<(i32, i32), Tile>,
min_height, max_height: i16,
seed: u64,
}
struct World {
name: String,
dimensions: Vec<Dimension>,
platform: Platform,
seed: u64,
}