logo enkisoftware
Independent game developer making AVOYD
en  fr

Voxel Editor Evolved

Juliette Foucaut - 06 Feb 2018


An update on our progress with the voxel editor and what we've been working on lately: I'll explain why our voxels are weirdly shaped, all the things you can do with the voxel editor, and what's coming next: the movement system and procedural generation.


Avoyd procedural voxel tree experiment Procedural tree experiment


So a year ago we stealth released the Voxel Editor part of Avoyd. Since then we've issued 33 updates, adding functionality and fixing issues we've discovered. (Releases are announced in the forum.)

The voxel editor will become the editor for making everything in the game Avoyd. For now, you can use it to make large voxel environments. It's designed to be fast, smooth (Avoyd is an FPS), and usable by multiple people over a network together (networking is currently disabled).

Constrained morphing voxels

The voxels in Avoyd are a little special: they’re constrained morphing voxels. This means their shape depends both on how full of material they are, and their neighbours. They change shape to keep in contact with the voxels next to them. For example, a full voxel is always a cube, but if we remove half its material, it becomes a cube half the size. If it has neighbours, it sticks to them, deforming like a soap bubble.

We came up with the constrained morphing voxels model in the original Avoyd 1999 to help with movement. With avatars about a third the size of a voxel, moving between one voxel cube and the next in zero g could cause brutal, disorienting changes from a first person point of view (picture stepping on a wall). Flattening the angles to create slopes helped.


Screenshot of Avoyd 1999 showing the original constrained morphing voxels with avatar for scale Avoyd 1999 screenshot showing the original constrained morphing voxels with the avatar for scale.


Avoyd screenshot showing the current iteration of constrained morphing voxels. Avoyd screenshot showing the current iteration of constrained morphing voxels.


In the current version of Avoyd, avatars are larger than a voxel. But we’ve decided to keep the constrained morphing voxels as we like their organic, low poly looks. We’ve enhanced the mesh generation algorithm slightly, and to reduce visual noise have decided not to use textures in order to make the environment more readable.

Voxel editor features



An overview of what you can do with the voxel editor:

  • Build very large voxel environment, up to 262k voxels a side (262142 cubed to be precise, so 18013986195767288 voxels, 18 million billion cubes)
  • Editor tool
    • Material / colour palette
    • Selection of full and hollow shapes

      Avoyd screenshot of shapes available in the voxel editor. Starting from the top left: wedge, box, sphere, cylinder, a rotated wedge, an ellipsoid, two tubes, a cube, a cone and a corner. Some of the shapes available to use as brushes. Starting from the top left: wedge, box, sphere, cylinder, a rotated wedge, an ellipsoid, two tubes, a cube, a cone and a corner.


    • Add / Remove shapes
    • Cut / Copy / Paste shapes (including across different world files and with rotations)
    • Paint / Pick colour
    • Undo / Redo
    • Change the amount of material
    • Adjustable tool distance (enter a number or use the mouse wheel)
    • Anchor tool
    • Constraints: snap to grid, offset etc
    • Symmetry planes
    • Load brush: use a world file as a brush. Also works with .vox, MagicaVoxel and Minecraft files.


  • Materials
    • 12 default materials with their palettes
    • Material palettes: 10, 16 or 256 colours / metallic / smoothness combinations
    • Custom material palettes creation
  • Lighting
    • Main light direction
    • Light parameter: Light, Ambient, Mie and Rayleigh colour, Mie Amplitude, Scattering g factor
    • Atmosphere density and half length
  • Camera
    • Position and speed
    • Movement keys
      • Press tab or right-mouse button to move the camera (your point of view)
      • Translation - WASD
        • W - forward
        • S - backwards
        • A - strafe left
        • D - strafe right
        • Space - up
        • Ctrl - down
      • Rotation
        • Pitch and Yaw - aim using the mouse
          • Pitch - Mouse up and down
          • Yaw - Mouse left and right
        • Roll
          • Q - roll left
          • E - roll right
      • Shift + movement key = move faster
    • ArcBall camera
    • Cinematic (smoothness)
    • Field of view (FOV)
    • Auto align to axis
  • Options
    • Accessibility: menu background colour, cursors and markers brightness, mouse sensitivity, font size and type
    • Performance: level of detail (LOD), lighting quality etc.
    • Window resizing and fullscreen
    • Right-mouse menu for quick access whilst editing
  • Save / Load
    • Save / Load worlds, materials and atmospheric settings
    • Import Minecraft and .vox files (MagikaVoxel)
  • Shortcuts
    • Tab - toggle between edit mode and camera view
    • Ctrl + m - hide/display editor menu
    • Ctrl + z - undo
    • Ctrl + y - redo
    • F10 - take a screenshot, saved in '..\Avoyd\Screenshots'
  • Other
    • 'X2' multiply the scale of all objects in the world by two: e.g. a 3x3x3 cube becomes a 6x6x6 cube. Can be applied multiple times.
    • Edit tool shapes include abstract procedural trees
    • Power save : stop rendering when the mouse cursor stops moving (doesn't affect the performance)
    • Settings are automatically saved when closing Avoyd
    • Help - tooltips and Introductory tutorial: adding, deleting and painting shapes

Movement

We've achieved most of what we wanted to do with the editor and are moving on to gameplay, starting with 6 degrees of freedom in zero gravity. There are several ways to move around in Avoyd:

  • without inertia: constant speed, high maneuverability: start, stop and change direction on the spot
  • with inertia: acceleration enables higher speeds, to the detriment of maneuverability
  • Jumping
  • Flying
  • Hovering, clamped on any surface
We'll play around with these modes until it feels right. This video is an early trial:



Procedural generation

The next release of Avoyd will include the movement prototype, so we need surfaces to move on. To keep the download small, we're exploring procedural generation. When I began learning procgen I made trees as a prototype for in-game growing organisms, but they have an unintended flaw: their fine branches make great traps for the avatars! The goal now is to create a bunch of simple, smooth, interconnected volumes. I've also started experimenting with greeble to add a sense of scale.


Avoyd screenshot showing experiments with procedurally generated greeble. Procedurally generated greeble experiments


(Anyhow, if you want to grow voxel trees, follow these instructions.)

2023
 › Optimising Voxel Meshes for Games Using Blender
 › Implementing a GPU Voxel Octree Path Tracer
 › Avoyd Release Streams and Minecraft Lit Materials
 › Avoyd Beta Stream
2022
 › Isometric Render of a Minecraft Map in Avoyd Voxel Editor
2021
 › Importing Minecraft maps in Avoyd Voxel Editor improved
2020
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
2019
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › Procedural python word generator: making user names out of 4 syllables
 › In-game building
 › Player-deployable turrets in Avoyd
2018
 › Avoyd Game Singleplayer and Coop Multiplayer Test
 ›› Voxel Editor Evolved 
2017
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Multiplayers toxic last hit kill and how to heal it
 › Avoyd Editor Prototype
2016
 › Black triangles and Peter Highspot
 › Colour palettes and lighting
 › Concept art by Rebecca Michalak
2015
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › Feral Vector
 › Normal generation in the pixel shader
2014
 › Python Google App Engine debugging with PyCharm CE
 › Lighting voxel octrees and procedural texturing
 › Patterns and spheres
 › Python Google App Engine debugging with PyTools
 › Interview
 › Domain masking using Google App Engine
 › Octree streaming - part 4
 › Black triangles and nervous_testpilot
 › Presskit for Google App Engine
 › Octree streaming - part 3
 › Octree streaming - part 2
 › Octree streaming
2013
 › LAN discovery with multiple adapters
 › Playing with material worlds
 › Developer Diary archive
 › Website redesign
 › First Person Editor
 › First Avoyd tech update video
 › Implementing a static website in Google App Engine
 › Multiplayer editing
 › First screenshots
 › Thoughts on gameplay modes
 › Back in 1999
2002
 › ECTS 2002
 › Avoyd Version 1.6.1 out
 › Avoyd Version 1.6 out
2001
 › Biting the bullet
 › Avoyd version 1.5 out
 › Monday Mayhem
 › Avoyd version 1.5 alpha 1 out
 › Avoyd version 1.4 out
 › ECTS 2001
 › Fun with Greek letters
 › Closer just a little closer
 › Back already
 › Artificial Humanity
 › Products and promises
 › Ecommerce
 › Explosions galore
 › Spring fixes
 › Open source and ports to other operating systems
 › Avoyd LAN Demo Version 1.1 is out
 › Thanks for the support
 › Avoyd LAN Demo Ready
 › Game Tech
 › Optimising Voxel Meshes for Games Using Blender
 › Implementing a GPU Voxel Octree Path Tracer
 › Importing Minecraft maps in Avoyd Voxel Editor improved
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › Procedural python word generator: making user names out of 4 syllables
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › Normal generation in the pixel shader
 › Lighting voxel octrees and procedural texturing
 › Octree streaming - part 4
 › Octree streaming - part 3
 › Octree streaming - part 2
 › Octree streaming
 › LAN discovery with multiple adapters
 › enkiTS
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › RCC++
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Web Tech
 › Procedural python word generator: making user names out of 4 syllables
 › Python Google App Engine debugging with PyCharm CE
 › Python Google App Engine debugging with PyTools
 › Domain masking using Google App Engine
 › Presskit for Google App Engine
 › Implementing a static website in Google App Engine
 › Avoyd
 › Implementing a GPU Voxel Octree Path Tracer
 › Avoyd Release Streams and Minecraft Lit Materials
 › Avoyd Beta Stream
 › Isometric Render of a Minecraft Map in Avoyd Voxel Editor
 › Importing Minecraft maps in Avoyd Voxel Editor improved
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › In-game building
 › Player-deployable turrets in Avoyd
 › Avoyd Game Singleplayer and Coop Multiplayer Test
 ›› Voxel Editor Evolved 
 › Multiplayers toxic last hit kill and how to heal it
 › Avoyd Editor Prototype
 › Black triangles and Peter Highspot
 › Colour palettes and lighting
 › Concept art by Rebecca Michalak
 › Feral Vector
 › Patterns and spheres
 › Interview
 › Black triangles and nervous_testpilot
 › Playing with material worlds
 › Website redesign
 › First Person Editor
 › First Avoyd tech update video
 › Multiplayer editing
 › First screenshots
 › Thoughts on gameplay modes
 › Back in 1999
 › Avoyd 1999
 › Developer Diary archive
 › Back in 1999
 › ECTS 2002
 › Avoyd Version 1.6.1 out
 › Avoyd Version 1.6 out
 › Biting the bullet
 › Avoyd version 1.5 out
 › Monday Mayhem
 › Avoyd version 1.5 alpha 1 out
 › Avoyd version 1.4 out
 › ECTS 2001
 › Fun with Greek letters
 › Closer just a little closer
 › Back already
 › Artificial Humanity
 › Products and promises
 › Ecommerce
 › Explosions galore
 › Spring fixes
 › Open source and ports to other operating systems
 › Avoyd LAN Demo Version 1.1 is out
 › Thanks for the support
 › Avoyd LAN Demo Ready