This page contains important information regarding to changes introduced in new updates that can change current features of Voxel Play. Please note that normal changelog is included in the asset in the README file located at the root of the package.

Version 10.8


- Added "AllowNestedExecutions" to detail generator class
- Voxel Definition: added "Greedy Meshing" option to override materials


- [Fix] Model fitToTerrain property was being ignored when placing models with the default character controllers
- [Fix] Fixed multithreading issue when using Terrain Far Chunks and Unity Terrain Generator

Version 10.7.2


- [Fix] Fixed issue with building steps voxels disappearing when stacking other voxels nearby
- [Fix] Fixed issue with rendering materials that use different relief/normal map settings
- [Fix] Fixed water with no shadows shader render queue which resulted in overdraw with other transparent objects

Version 10.7.1


- Internal improvements to the Unity terrain generator
- Added a warning when water level is higher than maximum terrain height
- Reduced usage of global keywords


- [Fix] Fixed savannah tree 1
- [Fix] Fixed issue with warning when connected texture is not valid
- [Fix] Fixed native URP issue in builds using Unity 2020.3 or later- Connected textures: added slot for optional normal map

Version 10.7


- Custom voxels: added new properties when GPU instancing is enabled: GenerateCollider & GenerateNavMesh. See:
- Custom voxels: added Occludes Forward/Back/Left/Right/Top/Bottom optimization options.
- Item.itemChunk & item.itemVoxelIndex are now generalized for all persistent items. Previously, only torches used those two fields of Item class

Version 10.6


- Connected textures: added slot for optional normal map
- API: added ModelWorldCapture(bounds). Captures a portion of the world into a Model Definition


- [Fix] Fixed potential memory leak with "Unload Far NavMesh" option
- [Fix] Fixed voxel highlight edges material leak when destroying a highlighted custom voxel

Version 10.5.2


- Improvements to water placement/destruction in build mode
- Improvements to realistic water appearance on side faces

- API: added "fallbackVoxelDefinition" to load savegame methods (replaces a missing voxel definition from the savegame with an alternate voxel definition)
- Added an inspector error message if Enable URP Support is activated but Universal RP package is not present or configured
- Added support to origin shift to foes in demo scene flat terrain

- Added SendMessageOptions.DontRequireReceiver to SendMessage commands when loading/saving a scene to prevent console warnings
- Added "Can Climb" option to first person controller
- Added "Manage Voxel Rotation" to character controller


- [Fix] Fixed custom voxels visibility not being preserved when updating a chunk

- [Fix] Fixed character controller position not being applied correctly when loading a saved game
- [Fix] Fixed origin shift regression with first person character controller
- [Fix] Fixed dynamic voxel textures not reflecting all textures when rotating a 6-textured cube

- [Fix] Save/load game fixes

Version 10.4


- Constructor: added tiny delay when returning to focus to prevent accidental clicks
- Constructor: improvements to "Save As New..." option
- API: added VoxelGetRotation methods


- [Fix] Constructor: voxel rotations are lost when using the Displace command
- [Fix] Constructor: voxels at z position=0 were not saved correctly
- [Fix] Fixed footfall sounds update failing when character is not grounded

Version 10.3.1


- API: added ChunkReset() method.

- Minor internal improvements.


- [Fix] Fixed water blocks rendering in black in URP when camera background is set to solid color.

Version 10.3

New features:

- Custom voxels: added "Compute Lighting" option (experimental). This option reads surrounding lighting and AO around the voxel position and bakes that info into the mesh vertex colors of the custom voxel at runtime. It works better with custom voxels that occupy 1x1x1 voxels, like half blocks or similar.


- Internal improvements related to multiple player instances
- DefaultCaveGenerator: added minLength / maxLength properties (length random range for tunnels)
- Improvements to terrain generator and caves
- Improved torch lighting falloff in linear color space


- [Fix] OnGameLoaded event not fired when calling LoadGameFromByteArray
- [Fix] Fixed transparent blocks rendering in black in URP when camera background is set to solid color
- [Fix] Fixed /teleport console command bug
- [Fix] Fixed an error when visible lights exceed 32
- [Fix] Fixed chunk rendering issue when pool is exhausted
- [Fix] Fixed texture bleeding for opaque side textures with solid colors

Version 10.2


- Added debug info when loading connected textures
- Added buoyance effect to particles when underwater (in practice, they fall slower underwater)
- Improved Connected Texture editor visuals
- Added helps section to Voxel Play Environment inspector
- Added menu links to online documentation, youtube tutorials and support forum
- API: improved transition between dynamic voxel to regular voxel using VoxelCancelDynamic method
- API: virtualized methods of character controllers for easier customization


- [Fix] Damage particles now use the textureSample field in voxel definition if present
- [Fix] Voxels were highlighted when highlighting is disabled when using the third person controller

Version 10.1


- Change: chunk.isAboveSurface now defaults to true. Check remarks about isAboveSurface property in the custom terrain generator page.
- Optimization of the voxel thumbnail generation. New "Drop Voxel Texture Resolution". See:

- UI: removed console message when crouching


- [Fix] First person character controller fixes
- [Fix] Fixes related to the water level transition
- [Fix] Fixed model colors imported with Qubicle when rendering in linear color space

Version 10.0

New features/changes:

- Support for URP native lights including point and spot lights with shadows
- Improved underwater effect (fog, caustics) and air to water transition
- Added /fps command to console to toggle fps display on/off


- [Fix] Fixed rogue white pixels on the edges of some voxels visible underground in very dark areas
- [Fix] Fixed an issue with collider rebuild which could led to player falling down

Version 9.8

New features/changes:

- Added VP Model Texture BumpMap shader. New shader that supports bump map in addition to normal texture.

- Simplification of terrain generator classes. Now, Init() and GetHeightAndMoisture() methods are optional, not required if you write your own contents in PaintChunk which do not rely on heightmaps or moisture exposed by the terrain generator.
- Point lights now require the VoxelPlayLight script to be attached to them (check


- Added emission option to VP Model shaders. All model shaders now support an emission map + color options.
- Added enableGeneration option to Voxel Play Environment inspector. By default = true, can be disabled to control when Voxel Play can actually generate the world contents. It's useful if we need to ensure Voxel Play is initialized but delay the world generation until desired.

API changes:

- API: added FitTerrain parameter to ModelPlace overload with voxel definitions array


- [Fix] Fixed issue with damage produced by voxels to players

- [Fix] Chunk's isPopulated state is now store in the savegame to support proper reconstruction of chunks modified after using GetChunkUnpopulated API. Prevents a potential issue related to chunk contents not being filled by the terrain generation.

- [Fix] Fixed an issue that could ignore some chunks when saving a game
- [Fix] Avoid default detail generators overriding saved chunk modifications
- [Fix] Fixed regression with torches positions
- [Fix] Highlight shaders are now compatible with curvature option
- [Fix] Fixed an issue that could remove AO from edge chunks
- [Fix] Fixed 256 texture limit per texture array on mobile devices
- [Fix] Minor fixes to third person controller demo scene
- [Fix] Fixed Voxel.Hole being dark when global illumination is disabled
- [Fix] Fixed voxel rotation issue when placing a model definition

- [Fix] Fixed custom voxel with GPU instancing not disappearing when clearing a chunk using ChunkSetRawData

Version 9.7


- Voxel definitions from models located in the world folders are now preloaded at startup
- Internal dictionary-related improvements leading to a slight perf gain
- Dynamic voxel instance creation optimization

API changes:

- API: added AddExternalForce() to Voxel Play First Person Controller
- API: added isUnderground to Voxel Play Controller Base (true when character is underground or inside a building)
- API: added voxelUnder to Voxel Play Controller Base (voxel definition of the voxel below the character)


- [Fix] Fixed Voxel Play Behaviour unstuck option changes that produce stuttering on some characters

Version 9.6


- Improved support for decorations (wall picture, carpets..)
- First person controller: voxel textures or custom voxels can now be rotated by pressing R
- Improved highlighting on custom voxels without colliders
- Improved thrust movement
- Added "Unstuck Offset" paramter to Voxel Play Behaviour. Allows finer adjustments when reposition a gameobject that has crossed a solid voxel.
- Added "Fits to terrain" parameter to Model Definition
- Added new shader variant for double sided-transparent objects (VPModelTextureAlphaDoubleSided)

API changes:

- API: added OnVoxelAfterPlace event


- [Fix] Fixed face rendering of water & lava when vegetation is adjacent
- [Fix] Fixed custom voxels not being able to collapse as regular voxels

Version 9.5

New features:

- Added "Manage Thrust" option to character controller (disabled by default). Adds vertical propulsion by holding X key.
- Added "Unload Far NavMesh" option. Releases far navmesh earlier when chunk gets out of visible distance.

- Added "Unstuck" option to character controller inspector (enabled by default). This option ensures character doesn't cross solid voxels or fall below terrain.

- Some options in Voxel Play Environment inspector moved to new "Advanced" section to the bottom

API changes:

- API: added chunk.SetVoxel method (low level method that sets voxel type and also updates lightmap properly)
- API: CHANGE: OnChunkBeforeCreate now passes the chunk instead of a voxel[] array. You can still access chunk.voxels array.
- API: added GetChunksPositions(). Returns positions of all chunks within a given bounds.


- Performance optimizations related to custom voxels

Version 9.4

New features:

- Added "Texture Sampling" mode as a global parameter for regular voxels: filter, bilinear, trilinear


- Optimization: NavMesh data is now reused when pool is exhausted
- First person character controller now stops immediately when releasing movement keys


- [Fix] First person character controller fixes

- [Fix] Fixed regression with console visibility
- [Fix] Fixed emitting voxels not updating light intensity after loading a game

Version 9.3


- 30% performance increase when computing lightmap
- Voxel Play now shows the current installed version in the Voxel Play Environment inspector
- Voxels can now be placed on top of custom voxels

Version 9.2


- Change: empty render type changed to "Invisible"
- Unity terrain to voxel generator: added "Show/Hide Terrain" option to inspector
- Unity terrain to voxel generator: terrain no longer needs to be centered around 0,0,0 position
- Water mesh generation optimization when neighbour chunks are missing
- Texture packing optimization
- Faster NavMesh ready check

Version 9.1

This update contains minor enhancements as well as internal API overloads.

Version 9.0

New features:

- Origin shift. New option in Voxel Play Environment to support large worlds and solve rendering problems.


- Internals moved to 64 bit precision.

API additions:

- API: added OriginShiftApply(pivot) 

- API: added OnOriginPreShift / OnOriginPostShift events

- Many methods receive new overloads for improved flexibility


- [Fix] Fixed character controller inspector issue when build mode is enabled 

- [Fix] Fixed bump map not rendering correctly when using DX5 encoding

Version 8.5

New features:

- Ability to store per voxel data (see APIs VoxelSetPropert/VoxelGetProperty)


- First/Third Person Controllers: added manageAttack, manageJump, manageCrouch, manageBuild, manageFly properties
- Voxel Play Environment: added global enableDetailGenerators option
- Model Definition: added "ExclusiveTree" option (no more trees will be placed after this one in the same chunk)
- Voxel Definition: when assigning textures to a transparent voxel type, Voxel Play will ensure that the "AlphaIsTransparent" import setting is enabled


- Console API changes: IsVisible renamed to IsConsoleVisible. Added IsInventoryVisible property.

API additions:

- API: added VoxelSetProperty / VoxelGetProperty. Allows you to store/read custom properties per voxel (float and string values are currently allowed)
- API: added ConsumeAllItems
- API: added SetSunRotation
- API: added GetWaterDepth

Version 8.4

New options:

- Added verbose debug log option to Voxel Play Environment (adds more VP related info to the console)
- Added option to Voxel Play Behaviour to replace gameobject materials with native VP materials automatically
- Mobile UI: added "Action" button
- Mobile controller: adjusted rotation control

- Optimizations


- [Fix] Fixed rotation issue with custom voxels when Compute Buffers are enabled
- [Fix] Fixed rendering issue with GPU instanced voxels that could render twice the voxel
- [Fix] Fixed issue placing water over vegetation
- [Fix] Fixed randomization issue on Android devices
- [Fix] Fixed stairs half block lighting issue
- [Fix] Fixed ambient occlusion issue on some hills

Version 8.3

New options:

- Added "Prefab Spawner" detail generator

- Added "supports Bevel" property to voxel definition
- Added "Island" operator to the terrain default generator


- [Fix] Fixed chunk collider not refreshed when triggering voxels to collapse (ie. breaking a tree)
- [Fix] Fixed bevel effect artifacts on DX cards
- [Fix] Dynamic voxels now receive precise voxel lighting

Version 8.2

New options:

- Ability to combine water and other voxel types in same space. Example:

The BiomeDefinition gets a new underwater vegetation density and underwater vegetation list fields, similar to the vegetation fields, so you can define custom plants, rocks or other underwater stuff to be rendered by the terrain generator in water.

- Biomes can now include underwater plants

There's still a water voxel definition but now, every voxel that has a wateLevel > 0 will add water effect on it, regardless of its type.

API additions:

- API: added captureEvents property (global property to enable/disable events)

Uss this property to temporarily disable event triggering when calling VoxelPlay methods from your own event handlers.

- API: added OnVoxelDamagedHitInfo / OnVoxelAfterDamagedHitInfo events

Similar to OnVoxelDamaged/OnVoxelAfterDamaged events but provide more info in the hitInfo object passed to the event handler.

- API: OnChunkChanged now fires only once per frame (even if a chunk is modified several times in the same frame)

Important optimization to avoid triggering OnChunkChanged multiple times during the same frame (ie. destroying or modifying several voxels in the same chunks by an explosion).


- [Fix] Fixed emissive light not restored when loading a saved game
- [Fix] Fixed Voxel Play Unity Terrain editor referencing deprecated seaLevel field (now uses waterLevel)

Version 8.1

Minor changes and fixes in this update:

- Added new bumped shaders for override materials (single texture, 3-sides and 6-sides)
- NavMesh small generation/update optimization
- Added full namespaces to editor scripts to avoid conflicts with other assets that do not use proper namespaces
- [Fix] Fixed potential chunk collider update issue
- [Fix] Fixed bug in connected voxels config inspector

Version 8.0

This update includes important changes across the asset:

Major new features:

- Added Bevel effect (enable it in Voxel Play Environment inspector). Example:
- Added new promoting system used by upside down voxels
- Added upside down voxel example (Resources/Worlds/Earth/Voxels/Buildings/VoxelBuildingStep)
- Added upside down voxel mode for custom objects (enable it in VoxelDefinition)
- Added Fresnel effect (enable it in Voxel Play Environment inspector)


- Added Parallax Max Distance parameter (improves performance)
- Voxel Definition: added 'Texture Offset' option to Custom Voxels allowing to offset the 'Override Main Texture' if enabled.
- Connected Texture rules can now be specified per voxel side
- Water remains visible now when see-through is active
- Biome Map Explorer improvements


- [Fix] Fixed issue with URP water shader when shadows on water option is enabled
- [Fix] Fixed issue with biome explorer that prevented biome legend colors to show correctly
- [Fix] Fixed issue with qubicle ColorMap creation if file has no name
- [Fix] Fixed animated voxel definition shader regression

Version 7.5

This update includes important changes across the asset:

Major new features:

- Revamped lightmap recalculation system to allow faster updates. Now, voxel destruction or placement result in faster chunk updates thanks to the new, more granular, lightmap update system.


- Caves Default Generator: added Linearity, Verticality, Spawn Probability and Debug options

- Voxel Definition: added "Show Damage Cracks" option

- Voxel Definition: added 'Dense Leaves' setting per voxel

- Voxel Definition: added 'Override Main Texture' option to Custom Voxels allowing to reuse the same prefab but a different texture per voxel definition

- Added "Server Mode" option to Voxel Play Environment. When enabled, voxels won't be rendered (doesn't affect colliders nor NavMesh generation)

- Added integration option with Highlight Plus. See:

- API: added VoxelSetHidden, VoxelIsHidden methods to control voxel visibility


- [Fix] FlatTerrainGenerator now renders correctly voxels regardless of its folder location

- [Fix] Fixed voxel texture not visible when adding voxel definition at runtime

- [Fix] Fixed inventory selector locked to first column

- [Fix] Fixed black flash when replacing some voxels

- [Fix] Fixed rotation not reflected when loading custom voxels with GPU instancing enabled from a saved game 

Version 7.3

- Terrain Generator: added Sample Height Map Fractal operator

- Fog Distance Auto option. Now picks the lower value between camera far clip plane and visible chunk distance if unload far chunks option is enabled

- Improved fog effect on clouds

- API: added event OnItemAdded to VoxelPlayPlayer class

- API: OnSelectedItemChange event renamed to OnItemSelectedChanged

- [Fix] Tree rotations are now deterministic

Version 7.2.2

- API: added OnVoxelCollapse event

- Safety checks added to load/save game methods

- [Fix] Fixed vegetation mesh width

Version 7.2

- Voxel definition: added "Custom Texture Packing" option.

- Custom save game data now supported.

- Smoother fps when creating/updating many models

- Reduced memory usage by greedy meshers

- Vegetation now can receive tint color

- Added "Clouds Layer" option to customize clouds chunks layer

- API: added layer mask option to RayCast methods

- API: performance optimization of VoxelCreateGameObject method

- [Fix] Fixed highlighted model textures preview

- [Fix] Fixed shader issue when curvature mode is enabled

- [Fix] API: fixed an issue with GetVoxelIndices method which returned shifted positions

Version 7.1

- New feature: Connected Voxel.

- Added Obscurance Mode and Obscurance Intensity

- [Fix] Fixed custom materials in prefabs for vegetation showing in black

- [Fix] Fixed bug in one of the GetVoxelIndex overloads

- [Fix] Fixed cutout voxels lighting issue when placing a torch in a chunk without AO

Version 7.0

This update is big! Voxel Play now fully supports Universal Rendering Pipeline. If you're upgrading from a previous version, it's recommended that you remove it Play folder before importing this update. Alternatively you can remove the Shaders folder of Voxel Play only, and then import this new update.

Major changes:

- Minimum version supported upped to Unity 2018.4.

- Added support for Universal Rendering Pipeline in Unity 2019. To enable URP support, please check this page.


- Improved accuracy of biome selection based on altitude and moisture

- Added two more override material shaders examples.

API changes:

- API: added IsTerrainReadyAtPosition(). Returns true if chunk exists and has collider


- [Fix] Fixed orientation of textures in material override when world space UV is used

- [Fix] Fixed raycasting hitting character collider at certain angles in HQ_Forest demo scene

Version 6.8


- Greddy meshing now supports AO resulting in an important reduction of vertex count

- Models now receive torch lighting

- Model materials now receive a Custom Daylight Shadow Atten property

- NavMesh is now generated a bit inflated to ensure overlap between adjacent quads

- Integrated Opaque NOAO shader into regular Opaque, saving one material slot


- Change: Voxel Light material property range changed from 0..1 to 0..15. Custom voxels with custom materials may need to be updated.

- Change: API: VoxelGetGameObject is now GetVoxelGameObject (consistency change)

API changes:

- API: RayCast hitinfo.normal now returns the reversed direction when hitting vegetation instead of zero

- API: added GetVoxelNeighbourhood()

- API: added GetVoxelResistancePoints()


- [Fix] Fixed terrain generation issue when chunk size is set to 32

Version 6.7


- Improved dense tree option (tree leaves appearance). Disable "Dense Trees" in Voxel Play Environment inspector for simplified tree leaves.
- Improved accuracy of noise generation functions. Results in more precise gradients and slopes, especially when using low number of noise textures or steps in the terrain generator.

- Minor UI improvements to biome explorer window
- Terrain generator step: added "User Description" field for user annotations

- Change: tweaked random generator to produce better distribution. Use World Definition seed to produce variant worlds.
- Change: biome zones elevationMin/Max are deprecated. New fields: altitudeMin/AltitudeMax expressed in world units, instead of normalized 0-1 values (eg. altitudeMin = 25). Previous values are automatically migrated.
- Default biome is now added when creating a new world (default biome in World Definition). A default biome uses a white default voxel definition. The default biome can be replaced or removed once biomes are added to the world definition.

Version 6.5/6.6

Cumulative updates with minor improvements and fixes. Some minor new features as well. Please update to v6.6 for latest fixes and improvements:

New sample voxel definitions:

- Added grenade weapon example

- Added bevelled cube custom voxel example


- Custom voxels now can collapse

- Added "Particle Pool Size" field to Voxel Play Environment inspector and increased default value to 1000

- Added option in Voxel Play Environment inspector to generate chunks in a given area at Editor time

- Model materials now support texture tiling and offset options that can be set per material

- Particles generates from custom voxels now use proper textures

- Vegetation now uses same displacement when stacked vertically

API changes:

- API: added ParticleBurst method

- API: added event OnVoxelAfterDamaged


- [Fix] Fixed blur issue on non-AO voxels when HQ filtering is disabled

- [Fix] Fixed desert dirt voxel definition

- [Fix] Fixed model import colors when color map was exported with "Ignore Transparency" option

- [Fix] Fixed damage cracks position when custom model moves/rotates

- [Fix] Model importer fixes

- [Fix] Removed shadow acne

- [Fix] Fixed empty voxels showing up in model preview

Version 6.1..6.4

Cumulative updates with minor improvements and fixes. Some minor new features as well. Please update to v6.4 for latest fixes and improvements:

New Voxel Definition fields:

- "Highlight Offset" option. Use this property to shift highlight box position if needed.

- "Light Sun Attenuation" / "Light Torch Attenuation" parameters. Control the speed at which light attenuates across distance.

- "Light Intensity". Voxels can now emit light without a torch (ie. lava, special voxels, etc.)

- "Generate Colliders" (only applies to Cutout render type like tree leaves)

- "DropItemLifeTime", "DropItemScale" properties to customize the duration and size of recoverable voxels


- Models can now contain torches (and are also saved from the constructor)

- Removed Constructor grid bounds limitation to make easier to build on edges

- Custom voxels performance optimizations

- Improvement to model placement: position can now be moved with mouse and elevation controlled with mouse wheel

- First person controller: added crosshair max distance parameter

- Added a warning to the inspector when Curvature option is enabled but Smooth Lighiting disabled which can cause artifacts

- Added "Ignore Transparency" option to Import Tools window

API changes:

- API: added GetChunks(bounds)

- API: added VoxelRemove

- API: added VoxelDamage (origin, damage, radius, attenuateDamageWithDistance, addParticles, playSound)

- API: ModelFillInside now fills interior of building models with holes to avoid being filled by terrain generator


- [Fix] Fixed rotated voxels placed in constructor not retaining its rotation when placed in world

- [Fix] Fixed drop item animated cube scale issue

- [Fix] Fixed precision issue when compiled with IL2CPP

- [Fix] Fixed building generator not respecting world seed when chosing a random rotation

- [Fix] Fixed Qubicle import tool issue with transparent voxels

- [Fix] Prevent out of range issue with Unity to Voxel Terrain generator after splatmaps are modified/removed

- [Fix] Fixed some generated chunk remains hidden when Unload Far Chunks option is enabled

- [Fix] Fixed override material issue with chunks not using AO

- [Fix] Fixed displacement issue when placing models at certain rotations

- [Fix] Fixed custom voxels not being rotated properly when placed as part of a rotated model definition

- [Fix] API: fixed OnVoxelAfterAreaDamage event not returning the list of damaged voxels if the List is not provided in the function call

Version 6.0

This update contains two widely demanding features: connected textures and animated textures:

Full change log:

- Connected Textures. Textures can change and adapt to surrounding voxels allowing complex patterns using the same voxel definition. Demo scene includes a sample VoxelGlass voxel definition which matches adjacent voxels to create seamless glass areas.

- Animated textures. New render type "Opaque 3 Textures with AO and animation". Assign frame textures to the Additional Textures property in the Voxel definition and specify a speed for the transition.

- Added "Bright Point Lights" option to Voxel Play Environment inspector. Point light contribution is now baked into voxels separated from Sun light contribution to improve lighting fidelity. Bright Point Lights option allows you to combine baked + realtime point lighting.

- Chunk size is now configurable. 16 or 32.

- Optimized mesh generation on border chunks to reduce triangle count.

- Removed Geometry shaders support. After some extensive testing, geometry shaders were not providing substantial performance with regards to non-geometry shaders due to latest optimizations in the asset and mesh generation so they were removed in this update. Builds are now faster as well.

- Added VR support (Multi, Single Pass Stereo and Single Pass Instanced).

- InventoryItem struct now declared as partial to allow custom fields

- Save file format updated to v10. Includes a new field for storing the chunk size.

Version 5.4

This update contains important changes to greedy mesher and other files so you need to remove previous version before importing this update. Otherwise you can receive compilation errors due to duplication of certain files.

Full change log:

- Improved cloud rendering (check demo scene 1)

- Improved multithreading meshing architecture (more parallelism, half buffer memory)

- First person controller: added Smooth Climb option (enabled by default)

- Tweaked mobile UI

- BoxCollider from custom voxels prefab are now extracted to ensure accurate test when calling VoxelOverlap

- API: Voxel Play Player has now a public interface which can be used to implement custom player class. You can use the default Voxel Play Player monobehaviour, inherit from it or create your own player class and implement the IVoxelPlayPlayer interface.

- API: IVoxelPlayPlayer: added PickUpItem method. Gets called when player approaches items and they get collected. Override it from your own class to perform custom actions.

- API: added events OnTreeBeforeCreate / OnTreeAfterCreate. OnTreeBeforeCreate handler can return false to cancel tree placement on a certain position. OnTreeAfterCreate receives a list of VoxelIndex elements with the modified positions.

Version 5.3

Incremental update. Changes:

- Dual touch controller now remains hidden until initialization is complete

- Custom voxels: can now include LOD group

- Custom voxels: can specify a material override to avoid changing the original prefab

- World definition: added Grass Wind Speed / Tree Wind Speed global multipliers

- API: added GetVoxelIndex overload

- New menu: Assets/Voxel Play/Contructor Tools... which opens the constructor

- [Fix] Fixed global scattering and intensity light settings not affecting vegetation

Version 5.2

This update includes the ability to replace default UI and controllers by yours simply assigning new prefabs to Voxel Play Environment inspector. This change allows you to keep your modifications and improve them along time without worrying about upgrading Voxel Play. The change might impact your current code if you have made modifications to the previous Voxel Play UI and DualTouch or KeyboardMouse input controllers. The modifications to the code are minimal though - the key change here is that these scripts are now attached to the prefab so you can simply plug/unplug the UI and/or scripts by using prefabs. Check this page for more details:

Upgrade notice: due to some architecture/file changes, you may get some warnings upon importing the asset. Ignore those warnings. However, if you get any error, then you should remove existing Voxel Play folder and reimport the asset again.

Full change log follows:

- Easier to add your own UI (inventory, console, etc) and Input controllers (see:
- Added "Preview Mobile UI in Editor" option to Voxel Play Environment inspector. Allows you to use the mobile dual touch UI in Unity Editor when a mobile build target is set (ie. Android/iOS);

- Improvements to Dual Touch controller: implemented click (single hit) and long press gestures (continuous hit)

- Torch light is now added to the lightmap algorithm (combines with shader lighting)
- API: added "allowDuplicatedMessages" to ShowMessage method
- API: added OnVoxelBeforeAreaDamage / OnVoxelAfterAreaDamage events
- First person controller: when going underground, camera near clip plane is lowered to 0.08 to avoid face clipping. The value is restored when returning to surface.

- Performance improvements during chunk refresh containing custom voxels
- [Fix] Fixes issues when VoxelPlayEnvironment was instantiated from a prefab
- [Fix] Fixed door rotation bug
- Other fixes and minor code improvements

Version 5.1

This update renames the OnChunkUnload event to OnChunkReuse (triggers when the contents of a chunk are going to be reused for another chunk because the chunk pool is exhausted). Two new events have been added OnChunkExitVisibleDistance and OnChunkEnterVisibleDistance. You may also want to use "Unload Far Chunk" property in Voxel Play Environment inspector.

A new fileformat (v9) is introduced which can also store gameobject references with the saved game. The gameobjects must have the "VoxelPlaySaveThis" component attached to them in order to be included in the saved game and should be instanciable from a prefab. Check out the documentation on Loading & Saving games for more details.

Full change log follows:

- GameObjects and custom state data can now be included in saved games. New save file format (v9, see also:

- Chunks now can be unloaded when out of visible distance. New option added to Voxel Play Environment: "Unload Far Chunks".

- Improvements to the default terrain generator: water can now flow underground

- Improvements to cave generator, improved performance

- Added console command /redraw

- Torches can be recovered:

- Item definition: new properties: canBePicked, pickMode.

- API: added TriggerVoxelClickEvent method

- API: added OnPlayerEnterChunk, OnChunkExitVisibleDistance / OnChunkEnterVisibleDistance events

- API: change OnChunkUnload event renamed to OnChunkReuse

- API: added ChunksRedrawAll

- [Fix] Avoid torches being placed on occupied voxels

- [Fix] Fixed "Free Mode" issue in first person controller

Version 4.0

This update includes significant changes to the project folder and files structure to make it easier to maintain and understand. In order to avoid conflicts or duplications with older file names, please remove existing version of Voxel Play in your project before importing this update.

Full change log follows:

- Ability to override default materials and shaders.

Now you can specify a different material per Voxel Definition to be used instead of the default Voxel Play material/shader (new Vodel Definition property: override material). Note that this feature is aimed to the default shaders used for voxel types like opaque, cutout, transparent, water and cutout cross (vegetation). Custom voxels are not affected as they already can use custom shaders.

Learn more on this help page:


- Added new fields to define world limits in World Definition.

Prior to this change you had to modify the world generator class to skip chunks outside the desired boundaries. Now you can simply specify the world size in the World Definition inspector. 

- API: safety InventoryItems null checks added (thanks to Rafael)
- API: VoxelDropItemEvent now passes the VoxelHitInfo struct instead of just VoxelIndex (thanks to Rafael) 

- Change: Partial class files that extend another file now include the file name of the primary file plus internal folder reorganization for clarity purposes

Voxel Play splits some classes into functional files leveraging the "partial" C# keyword. For convenience, these class files have been moved to VoxelPlayEnvironment folder and also share the same name prefix "VoxelPlayEnvironment.*". For example, the class file VoxelPlayTrees.cs now becomes VoxelPlayEnvironment.Trees.cs and resides in the same folder than VoxelPlayEnvironment.Main.cs, etc.

- Change: seaLevel has been replaced by waterLevel in Terrain Generator. Instead of a 0..1 value, water level is the exact integer altitude of water level.

This change aims better control of the water altitude. In previous version the resulting water level was the result of seaLevel * maxAltitude defined in the terrain generator. Now you can simply set the altitude of the sea.

- Reduced one shader keyword (tinting)

The shader keyword VOXEL_PLAY_TINTING has been removed and both shader and scripts are now automatically updated in Editor based on the "Enable Tinting" option of Voxel Play Environment inspector. This change saves on shader keyword which improves a bit the build time and halves the number of variants included in your game (which probably won't be used).

- [Fix] Fixed character drifting when Use Third Party Controller option is enabled

This bug occured due to the Zero Friction material included in the Third Party Controller prefab to make climbing easier. Now this material is not attached to the collider of the prefab if you use third party controller option.

Version 3.7

- A new savegame format (7.0) has been introduced which avoids problems due to missing voxel definitions. Any previous saved game will use the new savegame file format when saved again.

- New mod/extension called "Terrain More Voxels" is available for download here.

Version 3.2

- The access modifier for the Init method of the terrain generators has been changed from public to protected. If you need to initialize a terrain generator manually for any reason, call the Initialize() method which will also call Init() method of your terrain generator.

- "Only Generate In Frustum" option has been removed. Use "Only Render In Frustum" to reduce the number of generated/rendered chunks based on camera view.

- Ore system has been reworked and new options have been added. Check this help page for more details.

- Item system has also been improved. Check this page for details.

Version 3.1.1

Some enum names have been changed to reflect the code guidelines. For example the enum ITEM_CATEGORY is now defined as ItemCategory. This change should not affect your world/voxel definitions but if you have modified/expanded the code of Voxel Play you may get errors. Just change your enum references to the new names.

Version 3.0

Due to the amount of changes it's recommended to remove existing version before updating. However it's not necessary if you have custom modifications.

GPU instanced rendering has been introduced in version 3 for custom voxels. Please refer to this article for more details.

If you're used to Github workflow, you can now apply for a contributor license which allows you to directly fetch latest commits from our private repository.

Join our Discord server for late minute info about Voxel Play.

Version 2.0:

Ambient occlusion option removed and replaced by Smooth Lighting with faster calculation.

Gamedata now is saved with ".bytes" extension instead of ".txt". If you have any saved game data, please rename the extension to be able to load it in this new version.

Lighting has been changed to accommodate the new normal mapping and emission/glowing features.

Version 1.5:

GetVoxelDefinitionByName is deprecated. Use GetVoxelDefinition(name) instead.

Version 1.2:

Quick save and load hotkeys have been changed to Control + F4 and Control + F3 respectively.

Version 1.1:

Default opaque factor for Cutout voxels has been increased to 3 (previously 2).

Detail generators should call SetChunkIsDirty() method to inform chunk changes.

Beta 0.20:

A new option has been added to Voxel Play Environment inspector that allows automatic change of camera's far clipping plane and fog effect. By default this option is enabled and ensures no rendered chunk is visible beyond visible chunk distance resulting in better performance. Previously camera's far clipping plane distance and fog parameters needed to be set manually based on visible chunk distance. 

Beta 0.19:

Voxel structure has been optimized for improved memory alignment resulting in dramatic reduction in memory size per chunk (up to 47% less with tinting option disabled or 24% less with tinting support). This change results in improved reliability on mobile and WebGL platforms.

Enabling or disabling tinting in Voxel Play Environment will automatically modify Voxel.cs script to include or omit per voxel color fields that otherwise would take additional memory unnecessarily.

Beta 0.18:

VoxelDefinition's pivotY property no longer exists. It's not called "offset" of Vector3 type. This change can affect any voxel definition of type "Custom".

Beta 0.17:

Saved games file format has been improved. New file format version is 3.0, binary, RLE compressed (see file format description here).

New API methods have been added (LoadGameBinary, GetSaveGameBinary, SaveGameBinary, SaveGameToByteArray, LoadGameFromByteArray) and previous methods (LoadGame, GetSaveGame, ... everything without the "binary" suffix) has been marked as obsolete.

When trying to load saved games from previous formats, Voxel Play will use the obsolete methods so they should still load fine. However it's mandatory to use the new methods in new builds.

Beta 0.9:

1. Chunk dimensions now defaults to 16x16x16. Previously a chunk would internally reserve a block of 18x18x18 voxels to account for neighbours and optimize some checks. During the development of the detail generators (version .09 adds caves and a simple village spawner), lot of complexities rose from that decision so the design has changed to simplify the engine. 

2. VoxelTerrainChunk class is renamed to VoxelChunk class.

Beta 0.8:

1. Thanks for the community feedback we have decided to add full support to standard Unity collider system. This change means:

- Voxel Play Collider component is deprecated and no longer shipped with the product. Since voxels, particles and players can now interact with standard collider system, the component that shipped with previous version is no longer needed. 

- Voxel Play Behaviour component is a new component included in the package that can be used to automatically apply smooth lighting/voxel global illumination to gameobjects. Just attach a Voxel Play Behaviour component to your gameobjects and they will receive the GI information from Voxel Play. It's recommended that your models use either the VP Model Lit or VP Model Texture materials provided by Voxel Play. If you prefer to use your own materials, Voxel Play Behaviour will modify the intensity of the mail color of your material to reflect lighting at gameobject position.

2. Full vertex/fragment shaders support with optimized pixel shaders. The option for Geometry Shaders is still there and it's recommended for desktop platforms that support them (DX/OpenGL yes, Metal does not support Geometry Shaders). If you target mobile or Metal platforms, disable the checkbox "Use Geometry Shaders".

As with each beta lot of internal changes, improvements and additions to features are included. Please keep up to date with the latest Voxel Play version to enjoy the best experience.