Repository navigation
Version 0.1.2
Carrot Particle Editor v0.1.2
A standalone Dear PyGui editor and GDevelop extension for authoring 2D/3D particle effects.
Effect format v1.1 (v1.0 files are migrated automatically).
Highlights
- Up to ~48× fewer draw calls in 3D via GPU instancing (~580 → ~12), with pixel-identical output.
- New blend modes: Screen, Lighten, and Overlay.
- Deterministic playback with a per-effect seed.
- New force fields: turbulence, vortex, attractor, and a collision plane.
Added
Editor
- Deterministic
seedfor identical replay across platforms (0keeps legacy behavior). - Force fields (all disabled by default): turbulence, Y-axis vortex, attractor, and a collision plane with bounce and friction.
- Effect format v1.1 with schema validation and automatic migration from v1.0.
- Sample effect:
sample_blend_layers.json.
Blend modes
- Screen (2D + 3D), Lighten (3D, max equation), Overlay (2D).
- Unsupported modes fall back to Normal and log a single warning.
- Per-emitter
blendingMode, selectable from the sidebar dropdown.
Setting the object's'JSON'option uses each emitter's own mode; any explicit value overrides all emitters.
Improved
3D runtime performance
- InstancedMesh batching: ~580 draw calls reduced to ~12 buckets. Output is verified pixel-identical per particle (matrix, color, alpha), including morph flips and all blend modes.
- Buckets are created lazily per shape in use; empty buckets add no draw calls.
- Leaner sampling: static tracks are skipped and colors are pre-parsed, with no visual change.
- Mesh and material pooling, shared geometries, and zero per-frame allocations in steady state.
- Automatic fallback to the classic rendering path when instancing is unavailable.
Fixed
- Extension crash on adding an object: helper definitions ran before
var Fwas initialized, causing aTypeErroron the first frame. - Export / Save / Open did nothing: Dear PyGui dialogs returned empty payloads. The editor now uses native OS file dialogs.
- 3D Subtractive blend was silently rendering as Normal because of a wrong THREE constant.
- Incorrect GL constant:
ONE_MINUS_SRC_COLORwas mapped toONE_MINUS_DST_COLOR(found by the new pixel-comparison tests).
Downloads
| File | Description |
|---|---|
CarrotParticleEditor.exe |
Windows build. No Python installation required. |
AdvancedParticleEmitter.json |
GDevelop extension. Import it into GDevelop/Carrots. Each effect uses a ParticleJSON resource plus a Models GLB resource. |