The project generates a single export-ready standard EPAL 1 Euro Pallet through the Blender Python API. No meshes, texture files or external images are imported — all geometry and materials are fully procedural. The generated scene contains only the pallet model.
The pallet follows the EPAL 1 standard: five lengthwise top deck boards, three transverse intermediate stringers, three lengthwise bottom deck boards and nine support blocks arranged in a 3×3 grid. The origin point sits at the centre of the bottom surface, ensuring the pallet rests exactly on the warehouse floor plane (Z = 0).
All dimensions in the JSON/YAML configuration are millimetres.

Configure a PyCharm external tool or run configuration to invoke Blender with:
blender --background --python main.pyFor a custom configuration file:
PALLET_CONFIG=config/pallet_config.json blender --background --python main.pyThe generator works identically in Ubuntu Linux, Blender CLI, PyCharm and batch-generation scenarios. No source-code modifications are required after checkout.
Four quality levels are generated in a single run:
| Level | Polygons | Format | Use case |
|---|---|---|---|
high |
10 000 – 30 000 | pallet_high.blend |
Presentations, animations, rendering |
medium |
2 000 – 5 000 | pallet_medium.fbx |
Demonstration scenes, mid-size warehouses |
low |
300 – 1 000 | pallet_low.obj |
Large warehouse simulations |
ultra_low |
50 – 300 | pallet_ultra_low.obj |
Massive digital twins, 10 000+ instances |
Exported model files are placed in the root exports/ directory. A preview render is written to the root renders/ directory. Materials use fully procedural Cycles/EEVEE Principled BSDF shaders with Noise and Voronoi textures — no external images.
The generator creates a fully procedural model of a standard EPAL 1 four-way Euro Pallet consisting of wooden boards and support blocks. The pallet is intended as a standalone object for automated warehouse simulations, distribution centres, sorting centres and digital twins.
| Parameter | Value | Note |
|---|---|---|
| Length | 1 200 mm | Default value from config.py |
| Width | 800 mm | Default value from config.py |
| Height | 144 mm | Bottom surface to top of deck |
| Origin | Centre of bottom surface, Z = 0 | Same coordinate system as Floor Tile, AGV, POD |
| Component | Quantity | Dimensions (mm) | Notes |
|---|---|---|---|
| Top deck boards | 5 | 1 200 × 145 / 100 × 22 | Lengthwise deck boards across the 800 mm width |
| Intermediate stringers | 3 | 145 × 800 × 22 | Transverse boards aligned with the 3 block rows |
| Bottom deck boards | 3 | 1 200 × 145 × 22 | Lengthwise lower boards aligned with block columns |
| Support blocks | 9 | 145 × 100 × 78 | 3×3 grid, 145 mm along length and 100 mm across width |
Block layout (top view):
■ ■ ■
■ ■ ■
■ ■ ■
| Parameter | Value |
|---|---|
| Type | Fully procedural — no external textures |
| Shader | Principled BSDF |
| Textures | Noise, Voronoi, Musgrave |
| Effects | Color Ramp, Bump, Hue/Saturation variation |
| Base colour | Warm wood tone (configurable) |
| Roughness | 0.65 (USED), 0.50 (NEW), 0.80 (DAMAGED) |
Three visual states are supported:
- NEW — clean wood with minimal colour variation and low roughness. For presentations, new warehouse complexes, demonstration renders.
- USED (default) — light wear traces, subtle wood shade differences, minimal scuffing. For standard warehouse simulations.
- DAMAGED — small chips, minor individual component damage. Structure remains operationally sound. Demonstration purposes only.
All digital warehouse objects share a unified coordinate system:
CARGO
|
|
PALLET
144 mm
|
------------------------------------ Z = 0
upper surface of the floor
|
FLOOR TILE
120 mm
|
------------------------------------ Z = −120 mm
The pallet bottom surface is always at Z = 0. Changing the concrete floor thickness does not affect pallet positioning.
The pallet is fully compatible with the following warehouse system components:
- Floor Tile — shares the same Z = 0 floor plane
- AGV — origin at bottom centre enables correct robot pickup
- POD — pallet fits standard storage pod shelves
- Warehouse Cell — dimensions match cell grid spacing
- Warehouse Module Generator — compatible with module assembly
- Warehouse Builder — correct origin placement for automated layout
Compatibility is ensured through the unified coordinate system, origin point convention, export rules and shared project architecture.
The generator supports creating tens of thousands of pallet instances via collection instancing:
from warehouse.pallet import EuroPallet, PalletConfig
from warehouse.pallet.config import QualityLevel
config = PalletConfig(quality=QualityLevel.ULTRA_LOW)
pallet = EuroPallet(config)
instances = pallet.generate_mass(count=10000, spacing_x=1.5, spacing_y=1.1)Geometry is never modified after creation. All parameters are defined exclusively through configuration files.
Default configuration is loaded from config/pallet_config.json:
{
"pallet": {
"standard": "EPAL_1",
"quality": "medium",
"state": "used",
"dimensions": {
"length": 1200,
"width": 800,
"height": 144
},
"export_path": "exports"
}
}The architecture supports future pallet types (EPAL 2, EPAL 3, plastic pallets, metal pallets) without changing the coordinate system.
All generation operations execute in strict order with detailed logging:
Loading Configuration → Parameters Validation → Geometry Generation →
Geometry Validation → Material Generation → Material Validation →
LOD Generation → Export to exports/ → Export Validation → Render to renders/ → Scene Cleaning