This project presents a voxel-based procedural content generation model for Minecraft, leveraging a conditional Denoising Diffusion Probabilistic Model (DDPM). The model generates 32×32×32 block structures using a 3D U-Net architecture with self-conditioning to ensure temporal consistency and contextual coherence.
- Adaptive Block Representation:
- Block2vec Embeddings: Used for encoding smooth terrains (e.g., grasslands). See implementation in
model/by_block2vec/block2vec/. - Analog Bits Representation: Handles discrete, high-variance structures (e.g., trees, buildings) at a bit-level. This is integral to the diffusion process in
model/ddpm/diffusion.py.
- Block2vec Embeddings: Used for encoding smooth terrains (e.g., grasslands). See implementation in
- Conditional Generation:
- Biome-Aware: Supports generation tailored to specific biomes, configurable via files like
config_Forest.pyandconfig_Village.py. - Inpainting: Enables natural integration of generated chunks into diverse landscapes. See
model/ddpm/inpaint.py.
- Biome-Aware: Supports generation tailored to specific biomes, configurable via files like
- Advanced Model Architecture & Training:
- 3D U-Net: The core architecture for generation, defined in
model/ddpm/model.py. - Self-Conditioning: Enhances temporal consistency and contextual coherence, configured in the diffusion process.
- Cosine-Based Noise Scheduling: Incorporated for improved denoising performance.
- Spatiotemporal Attention: Utilized within the U-Net for enhanced detail and structure.
- 3D U-Net: The core architecture for generation, defined in
The repository includes the following key components:
- Data Preprocessing:
chunk_generation.py: Script for automating the generation of Minecraft worlds.chunk_process.py: Script for processing generated chunks and extracting data for training.
- Representation Learning (Block2vec):
- Located under
model/by_block2vec/block2vec/. block2vec.py: Defines the CustomBlock2Vec Lightning module.skipgram.py: Implements the SkipGram model.train.py: Training script for Block2vec embeddings.
- Located under
- DDPM (Denoising Diffusion Probabilistic Model):
- Located under
model/ddpm/. model.py: Contains the 3D U-Net definition (UNet3D) and time embeddings (SinusoidalTimeEmbedding).diffusion.py: Implements the BitDiffusion process.train.py: Main training script for the diffusion model.data.py: Data loading and preprocessing for DDPM training.- Configuration files:
config.py,config_Forest.py,config_Village.py.
- Located under
- Generation and Utility Scripts:
model/ddpm/inpaint.py: Script for performing inpainting using a trained model.demo/: Contains scripts for interacting with Minecraft worlds.write_to_world.py: Writes generated structures to a Minecraft world.read_from_world.py: Reads data from a Minecraft world.
model/ddpm/utils.py: Utility functions, including logging samples.
-
Prerequisites:
- Java (e.g., OpenJDK 21)
- Python and relevant libraries (PyTorch, Accelerate, Diffusers, Amulet-Core, etc.)
- Minecraft server (PaperMC is used in
chunk_generation.py) - Chunky plugin (downloaded by
chunk_generation.py)
-
Data Preparation:
- Run
chunk_generation.pyto generate raw Minecraft world data.python chunk_generation.py --memory 6G --chunk-radius 16
- Process the generated world data using
chunk_process.pyto create training samples.
- Run
-
Representation Learning (Optional but Recommended for Block2vec):
- Train Block2vec embeddings:
python model/by_block2vec/block2vec/train.py
- Train Block2vec embeddings:
-
Train Diffusion Model:
- Configure your training settings in one of the
config_*.pyfiles (e.g.,model/ddpm/config_Forest.py). - Run the training script:
(Ensure your
accelerate launch model/ddpm/train.py
accelerateconfig is set up if not using default, or modifytrain.pyif it uses a specific config module likeTrainConfigdirectly).
- Configure your training settings in one of the
-
Generation/Inpainting:
- Use
model/ddpm/inpaint.pyfor generating structures or performing inpainting, loading a trained model checkpoint. - Use scripts in
demo/to integrate generated data with Minecraft worlds.
- Use
Refer to individual script arguments (--help) and configuration files for more detailed options.
The setup.sh script might assist with initial environment setup.
Server properties can be configured via server.properties.