diff --git a/.gitignore b/.gitignore
index 9e1eece7..57596293 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
*.obj
*.pyc
*.tmp
+.DS_Store
diff --git a/doc/source/blocky_terrain.md b/doc/source/blocky_terrain.md
index 2e6d6b32..179f76ed 100644
--- a/doc/source/blocky_terrain.md
+++ b/doc/source/blocky_terrain.md
@@ -18,7 +18,7 @@ The mesher has a `library` property of type `VoxelBlockyLibrary`. This is a reso
First, set how many voxel types you need by setting the `voxel_count` property. If you need more later, you can increase it.
A list of voxel types is shown below:
-![Screenshot of the list of voxels in VoxelBlockyLibrary](images/voxel_library_voxels_list.png)
+![Screenshot of the list of voxels in VoxelBlockyLibrary](images/voxel_library_voxels_list.webp)
Each slot can contain a `VoxelBlockyModel` resource. The index shown on their left will be the ID they use in voxel data. Voxel `0` is a special case: by convention, it may be used as the default "air" voxel. You may assign a new `VoxelBlockyModel` resource to each slot, and fill in their properties.
@@ -30,25 +30,25 @@ A simple start is to set the `geometry_type` to `Cube`, so the voxel will be a c
With this mesher, using atlases is recommended to allow re-using materials and reduce the number of draw calls. You can create a texture containing all the tiles your voxels can use. For example, here is one from the [blocky game](https://github.com/Zylann/voxelgame/tree/master/project/blocky_game) demo:
-![Atlas used in the blocky game demo](images/blocky_game_atlas.png)
+![Atlas used in the blocky game demo](images/blocky_game_atlas.webp)
This atlas is a square texture and can contain up to 16x16 tiles. This number is important and needs to be set on the `VoxelBlockyLibrary` `atlas_size` property, so texture coordinates can be generated properly when you use the `Cube` geometry type:
-![VoxelBlockyLibrary atlas size property screenshot](images/voxel_library_atlas_size_property.png)
+![VoxelBlockyLibrary atlas size property screenshot](images/voxel_library_atlas_size_property.webp)
Voxel types using the `Cube` geometry can have different tiles on each of their faces. You can decide which one to use by assigning properties of `Voxel`, under the `Cube tiles` category. Coordinates here are in tiles, not pixels.
-![Voxel cube tile properties screenshot](images/voxel_cube_tiles_properties.png)
+![Voxel cube tile properties screenshot](images/voxel_cube_tiles_properties.webp)
For example, if you want to use the "planks" tile, you may use x=3 and y=1:
-![Tile coordinates](images/cube_tile_coordinates.png)
+![Tile coordinates](images/cube_tile_coordinates.webp)
So far we defined a cubic voxel with specific texture coordinates on its faces, but we still have to actually assign the texture and material used to render it. This can be done in the `Material overrides` section, in which you can assign a material with the texture in it.
Make sure to assign its `albedo_texture` to your texture. You may also check the `Vertex Color/Use as albedo` property, because this will allow the mesher to bake ambient occlusion on the edge of cubes.
-![Material for blocky terrain](images/material_blocky_game.png)
+![Material for blocky terrain](images/material_blocky_game.webp)
Each model can use different materials with different textures, but keep in mind the more you re-use materials, the better. It reduces the number of draw calls and makes rendering faster.
@@ -56,7 +56,7 @@ Each model can use different materials with different textures, but keep in mind
Creating voxel types with the `Cube` geometry is a shortcut that can be used for simple voxels, but the most versatile workflow is to use actual meshes. If you change `geometry_type` to `CustomMesh`, you are allowed to assign a mesh resource. In this mode, the `Cube tiles` properties are not available, because you will have to assign texture coordinates of the mesh within a 3D modeler like Blender.
-![Blender screenshot for UV editing a block](images/blender_block_uv_mapping.png)
+![Blender screenshot for UV editing a block](images/blender_block_uv_mapping.webp)
Meshes can have any shape you want, however there are a few constraints to respect:
@@ -66,7 +66,7 @@ Meshes can have any shape you want, however there are a few constraints to respe
- Keep it low-poly. The mesher can deal with large models, but performance can decrease very quickly if a complex model appears a lot of times.
- Faces lying on the sides of the 1x1x1 unit cube will be the only faces that can be culled by the mesher. Make sure they are perfectly lining up. If they don't, it can cause dramatic slowdowns due to the amount of generated geometry not getting culled.
-![Blender screenshot for face lining up with cube side](images/blender_face_cube_side.png)
+![Blender screenshot for face lining up with cube side](images/blender_face_cube_side.webp)
The best format to use to export your meshes is OBJ. Godot imports this format by default as a mesh resource. Other formats are not suitable because Godot imports them as scenes, and `VoxelBlockyModel` resources require meshes, not scenes.
You can choose to export materials from here too, but it is recommended to do it in Godot because it allows you to re-use them.
@@ -101,13 +101,13 @@ Both require to use a different material from the default one you may have used.
`VoxelBlockyModel` resources also have a `transparency_index` property. This property allows to tune how two voxels occlude their faces. For example, let's say you have two transparent voxels, glass and leaves. By default, if you put them next to each other, the face they share will be culled, allowing you to see through the leaves from the glass block:
-![Screenshot of transparency index not being exploited](images/transparency_index_example1.png)
+![Screenshot of transparency index not being exploited](images/transparency_index_example1.webp)
If two faces touch each other, if they have the same transparency index, they can get culled. But if their transparency index is different, they may not. This allows to see the leaves directly behind glass, instead of seeing the insides.
Here, glass has `transparency_index=2`, and leaves have `transparency_index=1`:
-![Screenshot of transparency index being exploited](images/transparency_index_example2.png)
+![Screenshot of transparency index being exploited](images/transparency_index_example2.webp)
### Random tick
diff --git a/doc/source/editor.md b/doc/source/editor.md
index 15d54a00..d28ff758 100644
--- a/doc/source/editor.md
+++ b/doc/source/editor.md
@@ -4,7 +4,7 @@ Editor
Previewing in the editor
---------------------------
-![Screemshot of the editor](images/editor_preview_smooth_2d_noise_terrain.png)
+![Screemshot of the editor](images/editor_preview_smooth_2d_noise_terrain.webp)
### Preview options
@@ -14,7 +14,7 @@ If the generator or stream is providing a type of voxel data which is not suppor
The whole terrain can be told to re-mesh or re-load by using one of the options in the `Terrain` menu:
-![Re-generate menu](images/menu_regenerate.png)
+![Re-generate menu](images/menu_regenerate.webp)
!!! warning
If you use a script on either [VoxelGeneratorScript](api/VoxelGeneratorScript.md) or [VoxelStreamScript](api/VoxelStreamScript.md), the `run_stream_in_editor` option will automatically turn off and the volume will not be visible. If a script gets modified while it is used by a thread in the editor, unpredictable bugs can happen. You can force it by enabling the option, but you have to make sure no change happens. This limitation is tracked in [issue177](https://github.com/Zylann/godot_voxel/issues/177).
@@ -24,7 +24,7 @@ The whole terrain can be told to re-mesh or re-load by using one of the options
Blocks will only load around the node's origin by default. If the volume is very big or uses LOD, it will not load further and concentrate detail at its center. You can override this by going in the `Terrain` menu and enabling `Stream follow camera`. This will make the terrain adapt its level of detail and blocks to be around the editor's camera, and will update as the camera moves. Turning off the option will freeze the terrain.
-![Stream follow camera menu](images/menu_stream_follow_camera.png)
+![Stream follow camera menu](images/menu_stream_follow_camera.webp)
This option exists for large volumes because they need to stream blocks in and out as you move around. While this is often done in a controlled manner in a game, in the editor the camera could be moving very fast without any restriction, which can demand much more work for the CPU.
You can monitor the amount of ongoing tasks in the bottom panel, while the node is selected.
diff --git a/doc/source/generators.md b/doc/source/generators.md
index d91ea51f..dde3b91b 100644
--- a/doc/source/generators.md
+++ b/doc/source/generators.md
@@ -29,19 +29,19 @@ The following screenshots use a smooth `VoxelLodTerrain`.
Generates a flat ground.
-![Screenshot of flat generator](images/generator_flat.png)
+![Screenshot of flat generator](images/generator_flat.webp)
### [Waves](api/VoxelGeneratorWaves.md)
Generates waves.
-![Screenshot of waves generator](images/generator_waves.png)
+![Screenshot of waves generator](images/generator_waves.webp)
### [Image](api/VoxelGeneratorImage.md)
Generates a heightmap based on an image, repeated infinitely.
-![Screenshot of image generator](images/generator_image.png)
+![Screenshot of image generator](images/generator_image.webp)
!!! note
With this generator, an `Image` resource is required. By default, Godot imports image files as `StreamTexture`. You may change this in the Import dock. At time of writing, in Godot 3, this requires an editor restart.
@@ -50,13 +50,13 @@ Generates a heightmap based on an image, repeated infinitely.
Generates a heightmap based on fractal noise.
-![Screenshot of 2D noise generator](images/generator_noise2d.png)
+![Screenshot of 2D noise generator](images/generator_noise2d.webp)
### [Noise (3D)](api/VoxelGeneratorNoise.md)
Generates a blobby terrain with overhangs using 3D fractal noise. A gradient is applied along height so the volume becomes air when going up, and closes down into matter when going down.
-![Screenshot of 3D noise generator](images/generator_noise3d.png)
+![Screenshot of 3D noise generator](images/generator_noise3d.webp)
Node-graph generators (VoxelGraphs)
@@ -86,11 +86,11 @@ The simplest possible graph with a visible output is a flat plane. The SDF of a
Right-click the background of the graph, choose the nodes `InputY` and `SdfOutput`, then connect them together by dragging their ports together.
-![Plane voxel graph screenshot](images/voxel_graph_flat.png)
+![Plane voxel graph screenshot](images/voxel_graph_flat.webp)
It is possible to decide the height of the plane by subtracting a constant (`sdf = y - height`), so that `sdf == 0` will occur at a higher coordinate. To do this, an extra node must be added:
-![Offset plane voxel graph screenshot](images/voxel_graph_flat_offset.png)
+![Offset plane voxel graph screenshot](images/voxel_graph_flat_offset.webp)
By default, the `Add` node does nothing because its `b` port is not connected to anything. It is possible to give a default value to such port. You can set it by clicking on the node and changing it in the inspector.
@@ -106,33 +106,33 @@ There are several types of noise available, each with their own parameters. At t
!!! note
After you create this node, a new `FastNoiseLite` resource must be created in its parameters. If that resource is not setup, an error will occur and no voxels will be generated.
-![Voxel graph 2D noise](images/voxel_graph_noise2d.png)
+![Voxel graph 2D noise](images/voxel_graph_noise2d.webp)
3D noise is more expensive to compute, but is interesting because it actually produces overhangs or even small caves. It is possible to replace 2D noise with 3D noise in the previous setup:
-![Voxel graph 3D noise](images/voxel_graph_noise3d_not_expanded.png)
+![Voxel graph 3D noise](images/voxel_graph_noise3d_not_expanded.webp)
You might notice that despite it being 3D, it still appears to produce a heightmap. That's because the addition of `Y` in the graph is gradually offsetting noise values towards higher and higher values when going towards the sky, which makes the surface fade away quickly. So if we multiply `Y` with a small value, it will increase slower, letting the 3D noise expand more (`sdf = y * height_multiplier - height + noise3d(x, y, z)`):
-![Voxel graph 3D noise expanded](images/voxel_graph_noise3d_expanded.png)
+![Voxel graph 3D noise expanded](images/voxel_graph_noise3d_expanded.webp)
#### Planet
We are not actually forced to keep generating the world like a plane. We can go even crazier, and do planets. A good way to begin a planet is to make a sphere with the `SdfSphere` node:
-![Voxel graph sdf sphere node](images/voxel_graph_sphere.png)
+![Voxel graph sdf sphere node](images/voxel_graph_sphere.webp)
We cannot really use 2D noise here, so we can add 3D noise as well:
-![Voxel graph sdf sphere with noise](images/voxel_graph_sphere_with_noise.png)
+![Voxel graph sdf sphere with noise](images/voxel_graph_sphere_with_noise.webp)
However you might still want a heightmap-like result. One way to do this is to feed the 3D noise normalized coordinates, instead of global ones. Picking a ridged fractal can also give an eroded look, although it requires to negate the noise multiplier node to invert its distance field (if we leave it positive it will look puffed instead of eroded).
-![Voxel graph sdf sphere with height noise](images/voxel_graph_sphere_with_noise2.png)
+![Voxel graph sdf sphere with height noise](images/voxel_graph_sphere_with_noise2.webp)
!!! note
You can obtain a donut-shaped planet if you replace the `SdfSphere` node with a `SdfTorus` node.
- ![Torus voxel graph](images/voxel_graph_torus.png)
+ ![Torus voxel graph](images/voxel_graph_torus.webp)
#### Caves
@@ -142,23 +142,23 @@ However you might still want a heightmap-like result. One way to do this is to f
It is possible to generate caves by subtracting noise "worms" from a base SDF terrain. To simplify the approach, let's first look at what 2D noise looks like, with a few octaves:
-![Noise](images/noise.png)
+![Noise](images/noise.webp)
If we multiply that noise by itself (i.e square it), we obtain this:
-![Squared noise](images/squared_noise.png)
+![Squared noise](images/squared_noise.webp)
And if we clamp it to highlight values below a threshold close to zero, we can notice a path-like pattern going on:
-![Squared noise path highlight](images/squared_noise_with_highlight.png)
+![Squared noise path highlight](images/squared_noise_with_highlight.webp)
In 2D (or in 3D when using normalized coordinates) this is the key to produce rivers, or ravines. But the problem with caves is to obtain 3D, round-shaped "worms", not just 2D shapes. So we can cheat a little, by still using 2D noise, but instead we modulate the threshold along the Y axis. We need a parabola-shaped curve for this, which can be obtained with a second-degree polynome like `y^2 - 1`:
-![Cave threshold modulation](images/cave_threshold_modulation.png)
+![Cave threshold modulation](images/cave_threshold_modulation.webp)
Back to the voxel graph, we may connect directly the cave generation nodes to the output just to preview what they look like, without the rest of the terrain:
-![Cave voxel graph](images/caves_flat.png)
+![Cave voxel graph](images/caves_flat.webp)
After tweaking noise and other values, we obtain those famous worms, but there are two problems:
@@ -167,15 +167,15 @@ After tweaking noise and other values, we obtain those famous worms, but there a
We can fix the first problem by adding an extra layer of 2D noise to the Y coordinate so it can perturb the caves vertically. Re-using the ground surface noise with an extra multiplier can prove effective sometimes, so we avoid computing extra noise.
-![Caves perturb](images/caves_perturb.png)
+![Caves perturb](images/caves_perturb.webp)
The second problem can also be fixed with yet another layer of low-frequency noise, which can be added to the cave threshold so caves will shrink to become dead-ends on some regions. Again, adding multipliers may change how sharply that transition occurs.
-![Cave voxel graph perturb and modulated](images/caves_perturb_modulated.png)
+![Cave voxel graph perturb and modulated](images/caves_perturb_modulated.webp)
Finally, we can blend our terrain with caves by subtracting them. This can be done with the `SdfSmoothSubtract` node, essentially doing `terrain - caves`.
-![Cave voxel graph terrain subtract](images/caves_composed.png)
+![Cave voxel graph terrain subtract](images/caves_composed.webp)
There are likely variants of this to obtain different results.
@@ -186,15 +186,15 @@ It is possible to use this generator with `VoxelMesherBlocky` by using an `Outpu
The simplest example is to pick any existing SDF generator, and replace `OutputSDF` with a `Select` node connected to an `OutputType`. The idea is to choose between the ID of two different voxel types (like air or stone) if the SDF value is above or below a threshold.
-![Example screenshot of a basic blocky heightmap made with a graph generator](images/voxel_graph_blocky_basic_heightmap.png)
+![Example screenshot of a basic blocky heightmap made with a graph generator](images/voxel_graph_blocky_basic_heightmap.webp)
If more variety is needed, `Select` nodes can be chained to combine multiple layers, using different thresholds and sources.
-![Example screenshot of a blocky heightmap with two biomes made with a graph generator](images/voxel_graph_blocky_biome.png)
+![Example screenshot of a blocky heightmap with two biomes made with a graph generator](images/voxel_graph_blocky_biome.webp)
`Select` creates a "cut" between the two possible values, and it may be desirable to have some sort of transition. While this isn't possible with `VoxelMesherBlocky` without a lot of different types for each value of the gradient (usually done with a shader), it is however easy to add a bit of noise to the threshold. This reproduces a similar "dithered" transition, as can be seen in Minecraft between sand and dirt.
-![Example screenshot of a blocky heightmap with two biomes and dithering](images/voxel_graph_blocky_biome_dithering.png)
+![Example screenshot of a blocky heightmap with two biomes and dithering](images/voxel_graph_blocky_biome_dithering.webp)
Currently, graph generators only work per voxel. That makes them good to generate base ground and biomes, but it isn't practical to generate structures like trees or villages with it. This may be easier to accomplish using a second pass on the whole block instead, using a custom generator.
@@ -211,7 +211,7 @@ Contrary to many node-based or expression tools existing in Godot so far, voxel
So instead, outputs of each node are associated small buffers for a subset of the voxels, say, a 16x16 slice. Then, the graph is traversed once ahead-of-time to obtain a simple list of operations. It is guaranteed that if a node depends on another, the other will have run before.
-![Graph to operations schema](images/voxel_graph_operation_list.png)
+![Graph to operations schema](images/voxel_graph_operation_list.webp)
Finally, the generator executes the list, node by node, and each node computes a bunch of voxels at once instead of just one. This ensures that the CPU is almost exclusively used for the operations themselves, providing performance similar to C++, while graph traversal becomes neglibible. It also offers the opportunity to use [SIMD](https://en.wikipedia.org/wiki/SIMD) very easily, which can be even faster than if the code was written in plain C++.
@@ -223,11 +223,11 @@ Before processing voxels in a specific region of space (a box), the generator fi
It is possible to inspect results of this pass in the editor by enabling it with the `Analyse range` button. The analysis will focus on the box specified in the dialog, which will appear as a yellow wireframe in the 3D viewport.
-![Analyse range editor screenshot](images/range_analysis_dialog.png)
+![Analyse range editor screenshot](images/range_analysis_dialog.webp)
You can also hover the output label of any node to see what range was calculated for it:
-![Range analysis tooltips](images/range_analysis_tooltip.png)
+![Range analysis tooltips](images/range_analysis_tooltip.webp)
!!! note
Noise is typically between -1 and 1, but we take it a step further. Ranges are approximated using maximum derivatives, which is how fast noise can vary along a given distance. Each noise algorithm has its own. We calculate noise at the center of the box, and add half of the maximum derivative, positively and negatively. In other words, in the box, we know noise cannot exceed the central value + the maximum variation along extents of the box. At close range, this can successfully detect valleys and hills, without fully computing them.
@@ -244,17 +244,17 @@ It is possible to choose that threshold with the `sdf_clip_threshold` property i
It is exposed because in some situations, clipping can cause artifacts when the edge of a block is too close from a clipped one. Indeed, clipping blocks cause discontinuities in the distance field.
-![Sdf clipping schema](images/sdf_clipping.png)
+![Sdf clipping schema](images/sdf_clipping.webp)
Usually they happen far enough from the surface to be of any concern, but sometimes they can come close if the threshold is too low:
-![Sdf clipping artifacts](images/sdf_clipping_artifacts.png)
+![Sdf clipping artifacts](images/sdf_clipping_artifacts.webp)
So by default the threshold is above zero and should cover most cases.
It is also possible to instruct the generator to invert clipped blocks, which will make them stand out:
-![Sdf clipping debug](images/sdf_clip_debug.png)
+![Sdf clipping debug](images/sdf_clip_debug.webp)
#### Local optimization
@@ -263,11 +263,11 @@ Conditionals (`if/else`) are not supported by this voxel graph implementation. T
Let's consider an example world made of two biomes, each generated with a big node setup, and blended together across the world's X axis.
-![Two biomes](images/biomes.png)
+![Two biomes](images/biomes.webp)
If we don't optimize this, both biomes will constantly get calculated at every point of space close enough to the surface. But if we look at the range analysis we performed earlier, and focus on one of the biomes, we notice that the range of values received by the `Mix` node are such that only one biome is blended. In other words, one of the inputs of `Mix` has no effect on its result, and is therefore ignored there.
-![Ignored input](images/range_of_ignored_input.png)
+![Ignored input](images/range_of_ignored_input.webp)
So each biome then only computes its own branch when far away enough from the blending area:
@@ -277,7 +277,7 @@ Thanks again to range analysis, the generator is able to detect this locally, an
Internally, the generator parses the graph locally (using a faster data structure since the graph is compiled) to obtain an alternative list of operations. This list is currently nicknamed an `execution map`, because it maps the full list of operations to a reduced one.
-![Execution map schema](images/voxel_graph_operation_list_optimized.png)
+![Execution map schema](images/voxel_graph_operation_list_optimized.webp)
This setting can be toggled in the inspector.
diff --git a/doc/source/getting_the_module.md b/doc/source/getting_the_module.md
index 89912dd6..78a34523 100644
--- a/doc/source/getting_the_module.md
+++ b/doc/source/getting_the_module.md
@@ -26,7 +26,7 @@ A new build is made each time commits are pushed to the main branch, but also wh
In case there are multiple downloadable artifacts, the editor build will be the one with `opt.tools` in the name (because it is built with optimizations enabled, and includes tools).
-![Github actions screenshot](images/github_actions_windows_artifacts.png)
+![Github actions screenshot](images/github_actions_windows_artifacts.webp)
!!! note
You will need a Github account to be able to download development builds. Otherwise, links will not work.
diff --git a/doc/source/images/biomes.png b/doc/source/images/biomes.png
deleted file mode 100644
index 1cc9fec0..00000000
Binary files a/doc/source/images/biomes.png and /dev/null differ
diff --git a/doc/source/images/biomes.webp b/doc/source/images/biomes.webp
new file mode 100644
index 00000000..2fa663da
Binary files /dev/null and b/doc/source/images/biomes.webp differ
diff --git a/doc/source/images/biomes_optimization.png b/doc/source/images/biomes_optimization.png
index 0747b181..31a06dd7 100644
Binary files a/doc/source/images/biomes_optimization.png and b/doc/source/images/biomes_optimization.png differ
diff --git a/doc/source/images/blender_block_uv_mapping.png b/doc/source/images/blender_block_uv_mapping.png
deleted file mode 100644
index 748a1824..00000000
Binary files a/doc/source/images/blender_block_uv_mapping.png and /dev/null differ
diff --git a/doc/source/images/blender_block_uv_mapping.webp b/doc/source/images/blender_block_uv_mapping.webp
new file mode 100644
index 00000000..fb454269
Binary files /dev/null and b/doc/source/images/blender_block_uv_mapping.webp differ
diff --git a/doc/source/images/blender_face_cube_side.png b/doc/source/images/blender_face_cube_side.png
deleted file mode 100644
index dee362e4..00000000
Binary files a/doc/source/images/blender_face_cube_side.png and /dev/null differ
diff --git a/doc/source/images/blender_face_cube_side.webp b/doc/source/images/blender_face_cube_side.webp
new file mode 100644
index 00000000..bd8605e9
Binary files /dev/null and b/doc/source/images/blender_face_cube_side.webp differ
diff --git a/doc/source/images/block_map_storage.png b/doc/source/images/block_map_storage.png
deleted file mode 100644
index e2da98bc..00000000
Binary files a/doc/source/images/block_map_storage.png and /dev/null differ
diff --git a/doc/source/images/block_map_storage.webp b/doc/source/images/block_map_storage.webp
new file mode 100644
index 00000000..c4648b0a
Binary files /dev/null and b/doc/source/images/block_map_storage.webp differ
diff --git a/doc/source/images/blocky_game_atlas.png b/doc/source/images/blocky_game_atlas.png
deleted file mode 100644
index 41be774f..00000000
Binary files a/doc/source/images/blocky_game_atlas.png and /dev/null differ
diff --git a/doc/source/images/blocky_game_atlas.webp b/doc/source/images/blocky_game_atlas.webp
new file mode 100644
index 00000000..776d9a22
Binary files /dev/null and b/doc/source/images/blocky_game_atlas.webp differ
diff --git a/doc/source/images/blocky_screenshot.png b/doc/source/images/blocky_screenshot.png
deleted file mode 100644
index 337b55a7..00000000
Binary files a/doc/source/images/blocky_screenshot.png and /dev/null differ
diff --git a/doc/source/images/blocky_screenshot.webp b/doc/source/images/blocky_screenshot.webp
new file mode 100644
index 00000000..10bd0909
Binary files /dev/null and b/doc/source/images/blocky_screenshot.webp differ
diff --git a/doc/source/images/blocky_sdf.png b/doc/source/images/blocky_sdf.png
deleted file mode 100644
index 0157d83f..00000000
Binary files a/doc/source/images/blocky_sdf.png and /dev/null differ
diff --git a/doc/source/images/blocky_sdf.webp b/doc/source/images/blocky_sdf.webp
new file mode 100644
index 00000000..0f3196ba
Binary files /dev/null and b/doc/source/images/blocky_sdf.webp differ
diff --git a/doc/source/images/cave_threshold_modulation.png b/doc/source/images/cave_threshold_modulation.png
deleted file mode 100644
index 7abde370..00000000
Binary files a/doc/source/images/cave_threshold_modulation.png and /dev/null differ
diff --git a/doc/source/images/cave_threshold_modulation.webp b/doc/source/images/cave_threshold_modulation.webp
new file mode 100644
index 00000000..600342c3
Binary files /dev/null and b/doc/source/images/cave_threshold_modulation.webp differ
diff --git a/doc/source/images/caves_composed.png b/doc/source/images/caves_composed.png
deleted file mode 100644
index 88a8c174..00000000
Binary files a/doc/source/images/caves_composed.png and /dev/null differ
diff --git a/doc/source/images/caves_composed.webp b/doc/source/images/caves_composed.webp
new file mode 100644
index 00000000..b681d90d
Binary files /dev/null and b/doc/source/images/caves_composed.webp differ
diff --git a/doc/source/images/caves_flat.png b/doc/source/images/caves_flat.png
deleted file mode 100644
index d58ed105..00000000
Binary files a/doc/source/images/caves_flat.png and /dev/null differ
diff --git a/doc/source/images/caves_flat.webp b/doc/source/images/caves_flat.webp
new file mode 100644
index 00000000..8b757889
Binary files /dev/null and b/doc/source/images/caves_flat.webp differ
diff --git a/doc/source/images/caves_perturb.png b/doc/source/images/caves_perturb.png
deleted file mode 100644
index 12892587..00000000
Binary files a/doc/source/images/caves_perturb.png and /dev/null differ
diff --git a/doc/source/images/caves_perturb.webp b/doc/source/images/caves_perturb.webp
new file mode 100644
index 00000000..63077cde
Binary files /dev/null and b/doc/source/images/caves_perturb.webp differ
diff --git a/doc/source/images/caves_perturb_modulated.png b/doc/source/images/caves_perturb_modulated.png
deleted file mode 100644
index 452767a4..00000000
Binary files a/doc/source/images/caves_perturb_modulated.png and /dev/null differ
diff --git a/doc/source/images/caves_perturb_modulated.webp b/doc/source/images/caves_perturb_modulated.webp
new file mode 100644
index 00000000..55a4da50
Binary files /dev/null and b/doc/source/images/caves_perturb_modulated.webp differ
diff --git a/doc/source/images/cube_tile_coordinates.png b/doc/source/images/cube_tile_coordinates.png
deleted file mode 100644
index cb27d220..00000000
Binary files a/doc/source/images/cube_tile_coordinates.png and /dev/null differ
diff --git a/doc/source/images/cube_tile_coordinates.webp b/doc/source/images/cube_tile_coordinates.webp
new file mode 100644
index 00000000..d705f8e1
Binary files /dev/null and b/doc/source/images/cube_tile_coordinates.webp differ
diff --git a/doc/source/images/cubes_and_marching_cubes.png b/doc/source/images/cubes_and_marching_cubes.png
deleted file mode 100644
index b56bb90b..00000000
Binary files a/doc/source/images/cubes_and_marching_cubes.png and /dev/null differ
diff --git a/doc/source/images/cubes_and_marching_cubes.webp b/doc/source/images/cubes_and_marching_cubes.webp
new file mode 100644
index 00000000..2a8b3e6a
Binary files /dev/null and b/doc/source/images/cubes_and_marching_cubes.webp differ
diff --git a/doc/source/images/cubes_and_wireframe.png b/doc/source/images/cubes_and_wireframe.png
deleted file mode 100644
index fbc95523..00000000
Binary files a/doc/source/images/cubes_and_wireframe.png and /dev/null differ
diff --git a/doc/source/images/cubes_and_wireframe.webp b/doc/source/images/cubes_and_wireframe.webp
new file mode 100644
index 00000000..f969a983
Binary files /dev/null and b/doc/source/images/cubes_and_wireframe.webp differ
diff --git a/doc/source/images/editor_preview_smooth_2d_noise_terrain.png b/doc/source/images/editor_preview_smooth_2d_noise_terrain.png
deleted file mode 100644
index f1f91b6a..00000000
Binary files a/doc/source/images/editor_preview_smooth_2d_noise_terrain.png and /dev/null differ
diff --git a/doc/source/images/editor_preview_smooth_2d_noise_terrain.webp b/doc/source/images/editor_preview_smooth_2d_noise_terrain.webp
new file mode 100644
index 00000000..73a93af5
Binary files /dev/null and b/doc/source/images/editor_preview_smooth_2d_noise_terrain.webp differ
diff --git a/doc/source/images/fixed_bounds_octrees.png b/doc/source/images/fixed_bounds_octrees.png
deleted file mode 100644
index 6ae88296..00000000
Binary files a/doc/source/images/fixed_bounds_octrees.png and /dev/null differ
diff --git a/doc/source/images/fixed_bounds_octrees.webp b/doc/source/images/fixed_bounds_octrees.webp
new file mode 100644
index 00000000..2de01161
Binary files /dev/null and b/doc/source/images/fixed_bounds_octrees.webp differ
diff --git a/doc/source/images/flat_shading.png b/doc/source/images/flat_shading.png
deleted file mode 100644
index 9e77add0..00000000
Binary files a/doc/source/images/flat_shading.png and /dev/null differ
diff --git a/doc/source/images/flat_shading.webp b/doc/source/images/flat_shading.webp
new file mode 100644
index 00000000..48b8a689
Binary files /dev/null and b/doc/source/images/flat_shading.webp differ
diff --git a/doc/source/images/game_examples.png b/doc/source/images/game_examples.png
deleted file mode 100644
index 6cb6ed02..00000000
Binary files a/doc/source/images/game_examples.png and /dev/null differ
diff --git a/doc/source/images/game_examples.webp b/doc/source/images/game_examples.webp
new file mode 100644
index 00000000..4e89b6f5
Binary files /dev/null and b/doc/source/images/game_examples.webp differ
diff --git a/doc/source/images/generator_flat.png b/doc/source/images/generator_flat.png
deleted file mode 100644
index d36955ce..00000000
Binary files a/doc/source/images/generator_flat.png and /dev/null differ
diff --git a/doc/source/images/generator_flat.webp b/doc/source/images/generator_flat.webp
new file mode 100644
index 00000000..a4708190
Binary files /dev/null and b/doc/source/images/generator_flat.webp differ
diff --git a/doc/source/images/generator_image.png b/doc/source/images/generator_image.png
deleted file mode 100644
index c1d73e32..00000000
Binary files a/doc/source/images/generator_image.png and /dev/null differ
diff --git a/doc/source/images/generator_image.webp b/doc/source/images/generator_image.webp
new file mode 100644
index 00000000..8612b586
Binary files /dev/null and b/doc/source/images/generator_image.webp differ
diff --git a/doc/source/images/generator_noise2d.png b/doc/source/images/generator_noise2d.png
deleted file mode 100644
index 0f803ac2..00000000
Binary files a/doc/source/images/generator_noise2d.png and /dev/null differ
diff --git a/doc/source/images/generator_noise2d.webp b/doc/source/images/generator_noise2d.webp
new file mode 100644
index 00000000..25438d2d
Binary files /dev/null and b/doc/source/images/generator_noise2d.webp differ
diff --git a/doc/source/images/generator_noise3d.png b/doc/source/images/generator_noise3d.png
deleted file mode 100644
index a07a6093..00000000
Binary files a/doc/source/images/generator_noise3d.png and /dev/null differ
diff --git a/doc/source/images/generator_noise3d.webp b/doc/source/images/generator_noise3d.webp
new file mode 100644
index 00000000..a7a4edcf
Binary files /dev/null and b/doc/source/images/generator_noise3d.webp differ
diff --git a/doc/source/images/generator_waves.png b/doc/source/images/generator_waves.png
deleted file mode 100644
index ae980ee7..00000000
Binary files a/doc/source/images/generator_waves.png and /dev/null differ
diff --git a/doc/source/images/generator_waves.webp b/doc/source/images/generator_waves.webp
new file mode 100644
index 00000000..df712c08
Binary files /dev/null and b/doc/source/images/generator_waves.webp differ
diff --git a/doc/source/images/github_actions_windows_artifacts.png b/doc/source/images/github_actions_windows_artifacts.png
deleted file mode 100644
index 90fabc0e..00000000
Binary files a/doc/source/images/github_actions_windows_artifacts.png and /dev/null differ
diff --git a/doc/source/images/github_actions_windows_artifacts.webp b/doc/source/images/github_actions_windows_artifacts.webp
new file mode 100644
index 00000000..b6b6c4d3
Binary files /dev/null and b/doc/source/images/github_actions_windows_artifacts.webp differ
diff --git a/doc/source/images/graph_in_editor_with_fast_noise_lite.png b/doc/source/images/graph_in_editor_with_fast_noise_lite.png
deleted file mode 100644
index e1961a79..00000000
Binary files a/doc/source/images/graph_in_editor_with_fast_noise_lite.png and /dev/null differ
diff --git a/doc/source/images/graph_in_editor_with_fast_noise_lite.webp b/doc/source/images/graph_in_editor_with_fast_noise_lite.webp
new file mode 100644
index 00000000..f16897b9
Binary files /dev/null and b/doc/source/images/graph_in_editor_with_fast_noise_lite.webp differ
diff --git a/doc/source/images/instance_library_menu.png b/doc/source/images/instance_library_menu.png
deleted file mode 100644
index adfd1740..00000000
Binary files a/doc/source/images/instance_library_menu.png and /dev/null differ
diff --git a/doc/source/images/instance_library_menu.webp b/doc/source/images/instance_library_menu.webp
new file mode 100644
index 00000000..b9c889db
Binary files /dev/null and b/doc/source/images/instance_library_menu.webp differ
diff --git a/doc/source/images/instances_lod_index.png b/doc/source/images/instances_lod_index.png
deleted file mode 100644
index 6102fba4..00000000
Binary files a/doc/source/images/instances_lod_index.png and /dev/null differ
diff --git a/doc/source/images/instances_lod_index.webp b/doc/source/images/instances_lod_index.webp
new file mode 100644
index 00000000..30fe360a
Binary files /dev/null and b/doc/source/images/instances_lod_index.webp differ
diff --git a/doc/source/images/instances_procgen.png b/doc/source/images/instances_procgen.png
deleted file mode 100644
index f1aba8c7..00000000
Binary files a/doc/source/images/instances_procgen.png and /dev/null differ
diff --git a/doc/source/images/instances_procgen.webp b/doc/source/images/instances_procgen.webp
new file mode 100644
index 00000000..9369716c
Binary files /dev/null and b/doc/source/images/instances_procgen.webp differ
diff --git a/doc/source/images/landscape_with_instances.png b/doc/source/images/landscape_with_instances.png
deleted file mode 100644
index b7726dcd..00000000
Binary files a/doc/source/images/landscape_with_instances.png and /dev/null differ
diff --git a/doc/source/images/landscape_with_instances.webp b/doc/source/images/landscape_with_instances.webp
new file mode 100644
index 00000000..a37bec2e
Binary files /dev/null and b/doc/source/images/landscape_with_instances.webp differ
diff --git a/doc/source/images/lod_density_schema.png b/doc/source/images/lod_density_schema.png
deleted file mode 100644
index c49488fb..00000000
Binary files a/doc/source/images/lod_density_schema.png and /dev/null differ
diff --git a/doc/source/images/lod_density_schema.webp b/doc/source/images/lod_density_schema.webp
new file mode 100644
index 00000000..26314bcc
Binary files /dev/null and b/doc/source/images/lod_density_schema.webp differ
diff --git a/doc/source/images/lod_example.png b/doc/source/images/lod_example.png
deleted file mode 100644
index 2988ea0c..00000000
Binary files a/doc/source/images/lod_example.png and /dev/null differ
diff --git a/doc/source/images/lod_example.webp b/doc/source/images/lod_example.webp
new file mode 100644
index 00000000..3ded45a1
Binary files /dev/null and b/doc/source/images/lod_example.webp differ
diff --git a/doc/source/images/material_blocky_game.png b/doc/source/images/material_blocky_game.png
deleted file mode 100644
index 7bed2a2e..00000000
Binary files a/doc/source/images/material_blocky_game.png and /dev/null differ
diff --git a/doc/source/images/material_blocky_game.webp b/doc/source/images/material_blocky_game.webp
new file mode 100644
index 00000000..e62439af
Binary files /dev/null and b/doc/source/images/material_blocky_game.webp differ
diff --git a/doc/source/images/menu_regenerate.png b/doc/source/images/menu_regenerate.png
deleted file mode 100644
index f9f83f6f..00000000
Binary files a/doc/source/images/menu_regenerate.png and /dev/null differ
diff --git a/doc/source/images/menu_regenerate.webp b/doc/source/images/menu_regenerate.webp
new file mode 100644
index 00000000..89a3cd20
Binary files /dev/null and b/doc/source/images/menu_regenerate.webp differ
diff --git a/doc/source/images/menu_stream_follow_camera.png b/doc/source/images/menu_stream_follow_camera.png
deleted file mode 100644
index b7036c4c..00000000
Binary files a/doc/source/images/menu_stream_follow_camera.png and /dev/null differ
diff --git a/doc/source/images/menu_stream_follow_camera.webp b/doc/source/images/menu_stream_follow_camera.webp
new file mode 100644
index 00000000..f46016a8
Binary files /dev/null and b/doc/source/images/menu_stream_follow_camera.webp differ
diff --git a/doc/source/images/mesh_lod_properties.png b/doc/source/images/mesh_lod_properties.png
deleted file mode 100644
index f3181aff..00000000
Binary files a/doc/source/images/mesh_lod_properties.png and /dev/null differ
diff --git a/doc/source/images/mesh_lod_properties.webp b/doc/source/images/mesh_lod_properties.webp
new file mode 100644
index 00000000..4ee0c548
Binary files /dev/null and b/doc/source/images/mesh_lod_properties.webp differ
diff --git a/doc/source/images/mesh_lods.png b/doc/source/images/mesh_lods.png
deleted file mode 100644
index 809a2f05..00000000
Binary files a/doc/source/images/mesh_lods.png and /dev/null differ
diff --git a/doc/source/images/mesh_lods.webp b/doc/source/images/mesh_lods.webp
new file mode 100644
index 00000000..f554124c
Binary files /dev/null and b/doc/source/images/mesh_lods.webp differ
diff --git a/doc/source/images/misaligned_instances.png b/doc/source/images/misaligned_instances.png
deleted file mode 100644
index 90baccae..00000000
Binary files a/doc/source/images/misaligned_instances.png and /dev/null differ
diff --git a/doc/source/images/misaligned_instances.webp b/doc/source/images/misaligned_instances.webp
new file mode 100644
index 00000000..7502f309
Binary files /dev/null and b/doc/source/images/misaligned_instances.webp differ
diff --git a/doc/source/images/noise.png b/doc/source/images/noise.png
deleted file mode 100644
index a7ab8fca..00000000
Binary files a/doc/source/images/noise.png and /dev/null differ
diff --git a/doc/source/images/noise.webp b/doc/source/images/noise.webp
new file mode 100644
index 00000000..e9ba4240
Binary files /dev/null and b/doc/source/images/noise.webp differ
diff --git a/doc/source/images/range_analysis_dialog.png b/doc/source/images/range_analysis_dialog.png
deleted file mode 100644
index 4f80ff51..00000000
Binary files a/doc/source/images/range_analysis_dialog.png and /dev/null differ
diff --git a/doc/source/images/range_analysis_dialog.webp b/doc/source/images/range_analysis_dialog.webp
new file mode 100644
index 00000000..cfff529c
Binary files /dev/null and b/doc/source/images/range_analysis_dialog.webp differ
diff --git a/doc/source/images/range_analysis_tooltip.png b/doc/source/images/range_analysis_tooltip.png
deleted file mode 100644
index 2f93cd23..00000000
Binary files a/doc/source/images/range_analysis_tooltip.png and /dev/null differ
diff --git a/doc/source/images/range_analysis_tooltip.webp b/doc/source/images/range_analysis_tooltip.webp
new file mode 100644
index 00000000..e9365ecc
Binary files /dev/null and b/doc/source/images/range_analysis_tooltip.webp differ
diff --git a/doc/source/images/range_of_ignored_input.png b/doc/source/images/range_of_ignored_input.png
deleted file mode 100644
index 37ac3214..00000000
Binary files a/doc/source/images/range_of_ignored_input.png and /dev/null differ
diff --git a/doc/source/images/range_of_ignored_input.webp b/doc/source/images/range_of_ignored_input.webp
new file mode 100644
index 00000000..25ad75d1
Binary files /dev/null and b/doc/source/images/range_of_ignored_input.webp differ
diff --git a/doc/source/images/region_file_seen_as_image.png b/doc/source/images/region_file_seen_as_image.png
index acff2ee9..6311e2c9 100644
Binary files a/doc/source/images/region_file_seen_as_image.png and b/doc/source/images/region_file_seen_as_image.png differ
diff --git a/doc/source/images/sdf_clip_debug.png b/doc/source/images/sdf_clip_debug.png
deleted file mode 100644
index 3b5b7631..00000000
Binary files a/doc/source/images/sdf_clip_debug.png and /dev/null differ
diff --git a/doc/source/images/sdf_clip_debug.webp b/doc/source/images/sdf_clip_debug.webp
new file mode 100644
index 00000000..e25f85ae
Binary files /dev/null and b/doc/source/images/sdf_clip_debug.webp differ
diff --git a/doc/source/images/sdf_clipping.png b/doc/source/images/sdf_clipping.png
deleted file mode 100644
index db36d991..00000000
Binary files a/doc/source/images/sdf_clipping.png and /dev/null differ
diff --git a/doc/source/images/sdf_clipping.webp b/doc/source/images/sdf_clipping.webp
new file mode 100644
index 00000000..34533b38
Binary files /dev/null and b/doc/source/images/sdf_clipping.webp differ
diff --git a/doc/source/images/sdf_clipping_artifacts.png b/doc/source/images/sdf_clipping_artifacts.png
deleted file mode 100644
index 872eba36..00000000
Binary files a/doc/source/images/sdf_clipping_artifacts.png and /dev/null differ
diff --git a/doc/source/images/sdf_clipping_artifacts.webp b/doc/source/images/sdf_clipping_artifacts.webp
new file mode 100644
index 00000000..5d2b3d70
Binary files /dev/null and b/doc/source/images/sdf_clipping_artifacts.webp differ
diff --git a/doc/source/images/sdf_example_blocky.png b/doc/source/images/sdf_example_blocky.png
deleted file mode 100644
index 454f3c60..00000000
Binary files a/doc/source/images/sdf_example_blocky.png and /dev/null differ
diff --git a/doc/source/images/sdf_example_blocky.webp b/doc/source/images/sdf_example_blocky.webp
new file mode 100644
index 00000000..520a45e7
Binary files /dev/null and b/doc/source/images/sdf_example_blocky.webp differ
diff --git a/doc/source/images/sdf_example_clamped.png b/doc/source/images/sdf_example_clamped.png
deleted file mode 100644
index a0895a7c..00000000
Binary files a/doc/source/images/sdf_example_clamped.png and /dev/null differ
diff --git a/doc/source/images/sdf_example_clamped.webp b/doc/source/images/sdf_example_clamped.webp
new file mode 100644
index 00000000..ebaa5fc8
Binary files /dev/null and b/doc/source/images/sdf_example_clamped.webp differ
diff --git a/doc/source/images/sdf_example_true.png b/doc/source/images/sdf_example_true.png
deleted file mode 100644
index 96ef7126..00000000
Binary files a/doc/source/images/sdf_example_true.png and /dev/null differ
diff --git a/doc/source/images/sdf_example_true.webp b/doc/source/images/sdf_example_true.webp
new file mode 100644
index 00000000..ffe96d8a
Binary files /dev/null and b/doc/source/images/sdf_example_true.webp differ
diff --git a/doc/source/images/sdf_sphere_blocky.png b/doc/source/images/sdf_sphere_blocky.png
deleted file mode 100644
index b0b51377..00000000
Binary files a/doc/source/images/sdf_sphere_blocky.png and /dev/null differ
diff --git a/doc/source/images/sdf_sphere_blocky.webp b/doc/source/images/sdf_sphere_blocky.webp
new file mode 100644
index 00000000..57b38d32
Binary files /dev/null and b/doc/source/images/sdf_sphere_blocky.webp differ
diff --git a/doc/source/images/sdf_sphere_smooth.png b/doc/source/images/sdf_sphere_smooth.png
deleted file mode 100644
index 7a460a49..00000000
Binary files a/doc/source/images/sdf_sphere_smooth.png and /dev/null differ
diff --git a/doc/source/images/sdf_sphere_smooth.webp b/doc/source/images/sdf_sphere_smooth.webp
new file mode 100644
index 00000000..3d3232f4
Binary files /dev/null and b/doc/source/images/sdf_sphere_smooth.webp differ
diff --git a/doc/source/images/smooth_screenshot.png b/doc/source/images/smooth_screenshot.png
deleted file mode 100644
index a28bece6..00000000
Binary files a/doc/source/images/smooth_screenshot.png and /dev/null differ
diff --git a/doc/source/images/smooth_screenshot.webp b/doc/source/images/smooth_screenshot.webp
new file mode 100644
index 00000000..148297d3
Binary files /dev/null and b/doc/source/images/smooth_screenshot.webp differ
diff --git a/doc/source/images/smooth_voxel_painting_on_plane.png b/doc/source/images/smooth_voxel_painting_on_plane.png
deleted file mode 100644
index 84ad166c..00000000
Binary files a/doc/source/images/smooth_voxel_painting_on_plane.png and /dev/null differ
diff --git a/doc/source/images/smooth_voxel_painting_on_plane.webp b/doc/source/images/smooth_voxel_painting_on_plane.webp
new file mode 100644
index 00000000..c3c154fb
Binary files /dev/null and b/doc/source/images/smooth_voxel_painting_on_plane.webp differ
diff --git a/doc/source/images/squared_noise.png b/doc/source/images/squared_noise.png
deleted file mode 100644
index bd45f0bd..00000000
Binary files a/doc/source/images/squared_noise.png and /dev/null differ
diff --git a/doc/source/images/squared_noise.webp b/doc/source/images/squared_noise.webp
new file mode 100644
index 00000000..b0e0e1bc
Binary files /dev/null and b/doc/source/images/squared_noise.webp differ
diff --git a/doc/source/images/squared_noise_with_highlight.png b/doc/source/images/squared_noise_with_highlight.png
deleted file mode 100644
index dd97dec8..00000000
Binary files a/doc/source/images/squared_noise_with_highlight.png and /dev/null differ
diff --git a/doc/source/images/squared_noise_with_highlight.webp b/doc/source/images/squared_noise_with_highlight.webp
new file mode 100644
index 00000000..8ec667ed
Binary files /dev/null and b/doc/source/images/squared_noise_with_highlight.webp differ
diff --git a/doc/source/images/threads_schema.png b/doc/source/images/threads_schema.png
deleted file mode 100644
index 135a2f7a..00000000
Binary files a/doc/source/images/threads_schema.png and /dev/null differ
diff --git a/doc/source/images/threads_schema.webp b/doc/source/images/threads_schema.webp
new file mode 100644
index 00000000..890bb428
Binary files /dev/null and b/doc/source/images/threads_schema.webp differ
diff --git a/doc/source/images/tracy.png b/doc/source/images/tracy.png
deleted file mode 100644
index 99f890d9..00000000
Binary files a/doc/source/images/tracy.png and /dev/null differ
diff --git a/doc/source/images/tracy.webp b/doc/source/images/tracy.webp
new file mode 100644
index 00000000..4171b5e8
Binary files /dev/null and b/doc/source/images/tracy.webp differ
diff --git a/doc/source/images/tracy_profile_slow_vulkan_dealloc.png b/doc/source/images/tracy_profile_slow_vulkan_dealloc.png
deleted file mode 100644
index d30dbd97..00000000
Binary files a/doc/source/images/tracy_profile_slow_vulkan_dealloc.png and /dev/null differ
diff --git a/doc/source/images/tracy_profile_slow_vulkan_dealloc.webp b/doc/source/images/tracy_profile_slow_vulkan_dealloc.webp
new file mode 100644
index 00000000..0ba8d3e2
Binary files /dev/null and b/doc/source/images/tracy_profile_slow_vulkan_dealloc.webp differ
diff --git a/doc/source/images/transparency_index_example1.png b/doc/source/images/transparency_index_example1.png
deleted file mode 100644
index fe9876e4..00000000
Binary files a/doc/source/images/transparency_index_example1.png and /dev/null differ
diff --git a/doc/source/images/transparency_index_example1.webp b/doc/source/images/transparency_index_example1.webp
new file mode 100644
index 00000000..aa1ee889
Binary files /dev/null and b/doc/source/images/transparency_index_example1.webp differ
diff --git a/doc/source/images/transparency_index_example2.png b/doc/source/images/transparency_index_example2.png
deleted file mode 100644
index 853764ae..00000000
Binary files a/doc/source/images/transparency_index_example2.png and /dev/null differ
diff --git a/doc/source/images/transparency_index_example2.webp b/doc/source/images/transparency_index_example2.webp
new file mode 100644
index 00000000..d84dd83b
Binary files /dev/null and b/doc/source/images/transparency_index_example2.webp differ
diff --git a/doc/source/images/voxel_cube_tiles_properties.png b/doc/source/images/voxel_cube_tiles_properties.png
deleted file mode 100644
index da0bba23..00000000
Binary files a/doc/source/images/voxel_cube_tiles_properties.png and /dev/null differ
diff --git a/doc/source/images/voxel_cube_tiles_properties.webp b/doc/source/images/voxel_cube_tiles_properties.webp
new file mode 100644
index 00000000..192b495e
Binary files /dev/null and b/doc/source/images/voxel_cube_tiles_properties.webp differ
diff --git a/doc/source/images/voxel_graph_blocky_basic_heightmap.png b/doc/source/images/voxel_graph_blocky_basic_heightmap.png
deleted file mode 100644
index 1cbd6154..00000000
Binary files a/doc/source/images/voxel_graph_blocky_basic_heightmap.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_blocky_basic_heightmap.webp b/doc/source/images/voxel_graph_blocky_basic_heightmap.webp
new file mode 100644
index 00000000..9f100258
Binary files /dev/null and b/doc/source/images/voxel_graph_blocky_basic_heightmap.webp differ
diff --git a/doc/source/images/voxel_graph_blocky_biome.png b/doc/source/images/voxel_graph_blocky_biome.png
deleted file mode 100644
index 3f1f5df4..00000000
Binary files a/doc/source/images/voxel_graph_blocky_biome.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_blocky_biome.webp b/doc/source/images/voxel_graph_blocky_biome.webp
new file mode 100644
index 00000000..6041b237
Binary files /dev/null and b/doc/source/images/voxel_graph_blocky_biome.webp differ
diff --git a/doc/source/images/voxel_graph_blocky_biome_dithering.png b/doc/source/images/voxel_graph_blocky_biome_dithering.png
deleted file mode 100644
index 579097bc..00000000
Binary files a/doc/source/images/voxel_graph_blocky_biome_dithering.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_blocky_biome_dithering.webp b/doc/source/images/voxel_graph_blocky_biome_dithering.webp
new file mode 100644
index 00000000..99eebff0
Binary files /dev/null and b/doc/source/images/voxel_graph_blocky_biome_dithering.webp differ
diff --git a/doc/source/images/voxel_graph_flat.png b/doc/source/images/voxel_graph_flat.png
deleted file mode 100644
index 58c326b1..00000000
Binary files a/doc/source/images/voxel_graph_flat.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_flat.webp b/doc/source/images/voxel_graph_flat.webp
new file mode 100644
index 00000000..3625f044
Binary files /dev/null and b/doc/source/images/voxel_graph_flat.webp differ
diff --git a/doc/source/images/voxel_graph_flat_offset.png b/doc/source/images/voxel_graph_flat_offset.png
deleted file mode 100644
index 146b4359..00000000
Binary files a/doc/source/images/voxel_graph_flat_offset.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_flat_offset.webp b/doc/source/images/voxel_graph_flat_offset.webp
new file mode 100644
index 00000000..9eb30b78
Binary files /dev/null and b/doc/source/images/voxel_graph_flat_offset.webp differ
diff --git a/doc/source/images/voxel_graph_noise2d.png b/doc/source/images/voxel_graph_noise2d.png
deleted file mode 100644
index 2fbeb99a..00000000
Binary files a/doc/source/images/voxel_graph_noise2d.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_noise2d.webp b/doc/source/images/voxel_graph_noise2d.webp
new file mode 100644
index 00000000..ff5089e4
Binary files /dev/null and b/doc/source/images/voxel_graph_noise2d.webp differ
diff --git a/doc/source/images/voxel_graph_noise3d_expanded.png b/doc/source/images/voxel_graph_noise3d_expanded.png
deleted file mode 100644
index 7cabf176..00000000
Binary files a/doc/source/images/voxel_graph_noise3d_expanded.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_noise3d_expanded.webp b/doc/source/images/voxel_graph_noise3d_expanded.webp
new file mode 100644
index 00000000..838fda37
Binary files /dev/null and b/doc/source/images/voxel_graph_noise3d_expanded.webp differ
diff --git a/doc/source/images/voxel_graph_noise3d_not_expanded.png b/doc/source/images/voxel_graph_noise3d_not_expanded.png
deleted file mode 100644
index b85a5d59..00000000
Binary files a/doc/source/images/voxel_graph_noise3d_not_expanded.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_noise3d_not_expanded.webp b/doc/source/images/voxel_graph_noise3d_not_expanded.webp
new file mode 100644
index 00000000..e6ff3bf9
Binary files /dev/null and b/doc/source/images/voxel_graph_noise3d_not_expanded.webp differ
diff --git a/doc/source/images/voxel_graph_operation_list.png b/doc/source/images/voxel_graph_operation_list.png
deleted file mode 100644
index cf66de99..00000000
Binary files a/doc/source/images/voxel_graph_operation_list.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_operation_list.webp b/doc/source/images/voxel_graph_operation_list.webp
new file mode 100644
index 00000000..da07a424
Binary files /dev/null and b/doc/source/images/voxel_graph_operation_list.webp differ
diff --git a/doc/source/images/voxel_graph_operation_list_optimized.png b/doc/source/images/voxel_graph_operation_list_optimized.png
deleted file mode 100644
index 39926990..00000000
Binary files a/doc/source/images/voxel_graph_operation_list_optimized.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_operation_list_optimized.webp b/doc/source/images/voxel_graph_operation_list_optimized.webp
new file mode 100644
index 00000000..39f9e6bb
Binary files /dev/null and b/doc/source/images/voxel_graph_operation_list_optimized.webp differ
diff --git a/doc/source/images/voxel_graph_sphere.png b/doc/source/images/voxel_graph_sphere.png
deleted file mode 100644
index 08b25b01..00000000
Binary files a/doc/source/images/voxel_graph_sphere.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_sphere.webp b/doc/source/images/voxel_graph_sphere.webp
new file mode 100644
index 00000000..893946fd
Binary files /dev/null and b/doc/source/images/voxel_graph_sphere.webp differ
diff --git a/doc/source/images/voxel_graph_sphere_with_noise.png b/doc/source/images/voxel_graph_sphere_with_noise.png
deleted file mode 100644
index 99a2996e..00000000
Binary files a/doc/source/images/voxel_graph_sphere_with_noise.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_sphere_with_noise.webp b/doc/source/images/voxel_graph_sphere_with_noise.webp
new file mode 100644
index 00000000..1817697f
Binary files /dev/null and b/doc/source/images/voxel_graph_sphere_with_noise.webp differ
diff --git a/doc/source/images/voxel_graph_sphere_with_noise2.png b/doc/source/images/voxel_graph_sphere_with_noise2.png
deleted file mode 100644
index 8e83d9d9..00000000
Binary files a/doc/source/images/voxel_graph_sphere_with_noise2.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_sphere_with_noise2.webp b/doc/source/images/voxel_graph_sphere_with_noise2.webp
new file mode 100644
index 00000000..db0220ae
Binary files /dev/null and b/doc/source/images/voxel_graph_sphere_with_noise2.webp differ
diff --git a/doc/source/images/voxel_graph_torus.png b/doc/source/images/voxel_graph_torus.png
deleted file mode 100644
index d7cb2a74..00000000
Binary files a/doc/source/images/voxel_graph_torus.png and /dev/null differ
diff --git a/doc/source/images/voxel_graph_torus.webp b/doc/source/images/voxel_graph_torus.webp
new file mode 100644
index 00000000..9e0db51c
Binary files /dev/null and b/doc/source/images/voxel_graph_torus.webp differ
diff --git a/doc/source/images/voxel_library_atlas_size_property.png b/doc/source/images/voxel_library_atlas_size_property.png
deleted file mode 100644
index 36eddf65..00000000
Binary files a/doc/source/images/voxel_library_atlas_size_property.png and /dev/null differ
diff --git a/doc/source/images/voxel_library_atlas_size_property.webp b/doc/source/images/voxel_library_atlas_size_property.webp
new file mode 100644
index 00000000..0b2b2afb
Binary files /dev/null and b/doc/source/images/voxel_library_atlas_size_property.webp differ
diff --git a/doc/source/images/voxel_library_voxels_list.png b/doc/source/images/voxel_library_voxels_list.png
deleted file mode 100644
index b691f704..00000000
Binary files a/doc/source/images/voxel_library_voxels_list.png and /dev/null differ
diff --git a/doc/source/images/voxel_library_voxels_list.webp b/doc/source/images/voxel_library_voxels_list.webp
new file mode 100644
index 00000000..43d9ff8b
Binary files /dev/null and b/doc/source/images/voxel_library_voxels_list.webp differ
diff --git a/doc/source/images/voxel_terrain_material_properties.png b/doc/source/images/voxel_terrain_material_properties.png
deleted file mode 100644
index 8eba7c00..00000000
Binary files a/doc/source/images/voxel_terrain_material_properties.png and /dev/null differ
diff --git a/doc/source/images/voxel_terrain_material_properties.webp b/doc/source/images/voxel_terrain_material_properties.webp
new file mode 100644
index 00000000..6e14fc31
Binary files /dev/null and b/doc/source/images/voxel_terrain_material_properties.webp differ
diff --git a/doc/source/index.md b/doc/source/index.md
index 009f60ec..10a6e5f7 100644
--- a/doc/source/index.md
+++ b/doc/source/index.md
@@ -10,9 +10,9 @@ Explore categories on the left to get started!
!!! note
This module is under development. A lot of features are available and can be used for games, but some other parts still need work and can change, so it's possible some information is not much detailed yet.
-![Blocky screenshot](images/blocky_screenshot.png)
+![Blocky screenshot](images/blocky_screenshot.webp)
-![Editor screenshot](images/graph_in_editor_with_fast_noise_lite.png)
+![Editor screenshot](images/graph_in_editor_with_fast_noise_lite.webp)
-![Smooth screenshot](images/smooth_screenshot.png)
+![Smooth screenshot](images/smooth_screenshot.webp)
diff --git a/doc/source/instancing.md b/doc/source/instancing.md
index db4afc3a..fab4dec0 100644
--- a/doc/source/instancing.md
+++ b/doc/source/instancing.md
@@ -22,7 +22,7 @@ In order to spawn items, `VoxelInstancer` needs a [VoxelInstanceLibrary](api/Vox
Select a `VoxelInstancer`. In the inspector, assign a library to the `library` property, or create a new embedded one. Then click on the library resource. Buttons appear at the top of the inspector:
-![Screenshot of the VoxelInstanceLibrary menu](images/instance_library_menu.png)
+![Screenshot of the VoxelInstanceLibrary menu](images/instance_library_menu.webp)
You can add items to the library by clicking the "+" icon, and choose `Add Multimesh item`.
@@ -36,15 +36,15 @@ Items created this way come with a default setup, so you should be able to see s
The range at which items spawn is based on the LOD system of the voxel terrain itself. This is configured in the `lod_index` property of [VoxelInstanceLibraryItem](api/VoxelInstanceLibraryItem.md). For example, choosing `0` will make the item spawn at the closest range, and fade quickly in the distance. Higher indexes will spawn on a larger range, so will also start to appear earlier as the player gets closer. Instances spawn in the same "blocks" as the ground.
-![Screenshot showing the effect of lod_index on the range of instances](images/instances_lod_index.png)
+![Screenshot showing the effect of lod_index on the range of instances](images/instances_lod_index.webp)
Usually landscapes may be composed of multiple layers so that the closer you get, the more details come in. Bigger items use high lod indexes to be seen from far away, while smaller items may use lower indexes.
-![Screenshot of landscape using layers of instances](images/landscape_with_instances.png)
+![Screenshot of landscape using layers of instances](images/landscape_with_instances.webp)
There is a balance to consider when choosing the appropriate `lod_index`: currently, larger indexes are *much more imprecise*, because they work on top of a lower-resolution mesh. When getting closer, it's possible that such instances are seen floating above ground, or sinking into it. This mostly happens in areas with sharp changes such as ridges, crevices or caves:
-![Screemshot of misaligned instances](images/misaligned_instances.png)
+![Screemshot of misaligned instances](images/misaligned_instances.webp)
To combat this, you can adjust the `offset_along_normal` parameter in the `generator` associated to the item. This depends on the asset, so designing them such that they can have part of their bottom sunk into the ground can give some margin of error.
@@ -64,13 +64,13 @@ A secondary LOD system is included, which applies to meshes themselves, to some
To use this, you have to fill the 3 mesh LOD properties on your `VoxelInstanceLibraryItem`:
-![Screenshot of mesh LOD properties](images/mesh_lod_properties.png)
+![Screenshot of mesh LOD properties](images/mesh_lod_properties.webp)
If only the `mesh` property is set, no LOD will be used.
The distance at which a LOD will be chosen is currently hardcoded, because it depends on the `lod_index` the blocks for that item are loaded into, which in turn depends on the `split_scale` property of the parent voxel terrain.
-![Screenshot of mesh LODs with colors](images/mesh_lods.png)
+![Screenshot of mesh LODs with colors](images/mesh_lods.webp)
If you need fewer LODs, you can assign twice the same mesh. This system is quite rigid because in Godot 4 it might be changed to only have a single slot dedicated to impostor meshes. Indeed, Godot 4 might support LOD on meshes, but it is not planned for the last LODs to become impostors, so this should still be possible to achieve.
@@ -137,7 +137,7 @@ Procedural generation
### Built-in generator
-![Screenshot of a layer of instances using noise](images/instances_procgen.png)
+![Screenshot of a layer of instances using noise](images/instances_procgen.webp)
Items are added with a default built-in generator, so they will already spawn based on procedural rules rather than being painted manually. You can tweak the generator by inspecting the `generator` property of [VoxelInstanceLibraryItem](api/VoxelInstanceLibraryItem.md).
diff --git a/doc/source/module_development.md b/doc/source/module_development.md
index b2ea5559..be0dbf64 100644
--- a/doc/source/module_development.md
+++ b/doc/source/module_development.md
@@ -80,7 +80,7 @@ Threads
The module uses several background threads to process voxels. The number of threads can be adjusted in Project Settings.
-![Schema of threads](images/threads_schema.png)
+![Schema of threads](images/threads_schema.webp)
There is one pool of threads. This pool can be given many tasks and distributes them to all its threads. So the more threads are available, the quicker large amounts of tasks get done. Tasks are also sorted by priority, so for example updating a mesh near a player will run before generating a voxel block 300 meters away.
Some tasks are scheduled in a "serial" group, which means only one of them will run at a time (although any thread can run them). This is to avoid clogging up all the threads with waiting tasks if they all lock a shared resource. This is used for I/O such as loading and saving to disk.
@@ -263,7 +263,7 @@ Profile with Tracy
This module contains macros to profile specific code sections. By default, these macros expand to [Tracy Profiler](https://github.com/wolfpld/tracy) zones. It allows to check how long code takes to run, and displays it in a timeline.
-![Tracy screenshot](images/tracy.png)
+![Tracy screenshot](images/tracy.webp)
### How to use profiler scopes
diff --git a/doc/source/overview.md b/doc/source/overview.md
index 4974ef29..a45f0efb 100644
--- a/doc/source/overview.md
+++ b/doc/source/overview.md
@@ -7,7 +7,7 @@ This section explains the main concepts used in this voxel engine and which part
What voxels are
------------------
-![Cubes and marching cubes](images/cubes_and_marching_cubes.png)
+![Cubes and marching cubes](images/cubes_and_marching_cubes.webp)
"Voxel" is short for "volumetric picture element", similar to "pixel" which means "picture element". They compose volumes, as opposed to simple 2D images, which allows to make 3D terrains or models that 3 dimensions. Instead of representing solely the surface of objects like classic polygon-based models do, they also represent the insides as well, in every point of space.
@@ -45,7 +45,7 @@ Types of generators include:
Storing voxels
---------------
-![Block map storage schema](images/block_map_storage.png)
+![Block map storage schema](images/block_map_storage.webp)
Even if it needs lots of memory, we still have to store voxel data at some point. This is important for passing voxels around, storing player edits which cannot be reproduced with a generator, or saving terrains to disk.
@@ -77,7 +77,7 @@ This block-based approach is especially useful if the world is very large. In co
Turning voxels into meshes
----------------------------
-![Cubes and wireframe](images/cubes_and_wireframe.png)
+![Cubes and wireframe](images/cubes_and_wireframe.webp)
Today's graphics cards are getting more and more powerful, but in average, polygons (meshes) remain the fastest way to render 3D models. So we are not really going to directly draw voxels. Instead, we have to convert them into polygons, which will then be rendered. To do this, this engine uses a resource called [VoxelMesher](api/VoxelMesher.md).
@@ -92,7 +92,7 @@ There are several ways to produce polygons from voxel data, and the engine provi
Putting it together with nodes
-------------------------------
-![Game screenshots](images/game_examples.png)
+![Game screenshots](images/game_examples.webp)
So far, we could consider that there are enough tools to use voxels within games. It's a bit more work to take it from there, though.
diff --git a/doc/source/performance.md b/doc/source/performance.md
index 10375ac9..88f08362 100644
--- a/doc/source/performance.md
+++ b/doc/source/performance.md
@@ -83,7 +83,7 @@ If you move fast while near a terrain with a lot of chunks (mesh size 16 and hig
This was observed by profiling with Tracy in a `release_debug` build (typical mode used for official optimized builds):
-![Screenshot of Tracy profiler showing slow buffer deallocation](images/tracy_profile_slow_vulkan_dealloc.png)
+![Screenshot of Tracy profiler showing slow buffer deallocation](images/tracy_profile_slow_vulkan_dealloc.webp)
Lots of buffers get freed on the main thread at the end of the frame, and it can take a while, causing a CPU spike.
On the other hand, there is no such issue when the same amount of meshes is allocated.
diff --git a/doc/source/smooth_terrain.md b/doc/source/smooth_terrain.md
index 2d441180..68aa1226 100644
--- a/doc/source/smooth_terrain.md
+++ b/doc/source/smooth_terrain.md
@@ -30,11 +30,11 @@ else:
Which gives the following:
-![Blocky SDF](images/sdf_example_blocky.png)
+![Blocky SDF](images/sdf_example_blocky.webp)
Each voxel has binary values, either 1 or 0. But that gives no information about how the transition occurs between "matter" and "air", so if we were to render this using Transvoxel, the result would be:
-![SDF sphere blocky](images/sdf_sphere_blocky.png)
+![SDF sphere blocky](images/sdf_sphere_blocky.webp)
It is kinda blocky. Now, we might indeed want this result (see section about shaders). But if we dont, we will need to change the code. In fact, if we walk back one step, the answer is already there:
@@ -44,11 +44,11 @@ voxel = distance(origin, position) - radius
This is the signed distance of a sphere. Here shown normalized, so voxels close to `0` are grey:
-![True SDF](images/sdf_example_true.png)
+![True SDF](images/sdf_example_true.webp)
Every voxel now contains a slowly changing gradient, so when Transvoxel marches through all cells to find the surface, it will see much more precise variations than just `0` or `1`, which allows it to produce smooth polygons.
-![SDF sphere blocky](images/sdf_sphere_smooth.png)
+![SDF sphere blocky](images/sdf_sphere_smooth.webp)
### Scaling and clamping
@@ -59,7 +59,7 @@ Voxels far away in the sky are actually not interesting for us. The surface is w
So the sphere SDF we've seen earlier would actually look like this in the data:
-![Clamped SDF](images/sdf_example_clamped.png)
+![Clamped SDF](images/sdf_example_clamped.webp)
Over multiple chunks, all regions without a gradient will take very little space in memory.
@@ -152,7 +152,7 @@ The method involves projecting the texture on to the part of object that directl
Look at how the brick textures are blended together on the top right sphere.
-![Triplanar mapping image](https://docs.godotengine.org/en/3.1/_images/spatial_material25.png)
+![Triplanar mapping image](https://docs.godotengine.org/en/3.1/_images/spatial_material25.webp)
Read about [triplanar mapping in Godot](https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html#triplanar-mapping).
@@ -296,7 +296,7 @@ void fragment() {
}
```
-![Smooth voxel painting prototype](images/smooth_voxel_painting_on_plane.png)
+![Smooth voxel painting prototype](images/smooth_voxel_painting_on_plane.webp)
!!! note
If you only need 4 textures, then you can leave indices to their default values (which contains `0,1,2,3`) and only use weights. When using `VoxelTool`, you may only use texture indices 0, 1, 2 or 3. Texture arrays are less relevant in this case.
@@ -325,13 +325,13 @@ It is currently not possible to make the mesher produce vertices with split flat
NORMAL = normalize(cross(dFdx(VERTEX), dFdy(VERTEX)));
```
-![Flat shading](images/flat_shading.png)
+![Flat shading](images/flat_shading.webp)
### Blocky look
It is also possible to give a "blocky" look to "smooth" voxels:
-![Flat shading](images/blocky_sdf.png)
+![Flat shading](images/blocky_sdf.webp)
This can be done by saturating SDF values in the voxel generator: they have to be always -1 or 1, without transition values. Since values are clamped when using `set_voxel_f`, multiplying by a large number also works. Built-in basic generators might not have this option, but you can do it if you use your own generator script or `VoxelGeneratorGraph`.
@@ -357,12 +357,12 @@ Level of detail (LOD)
LOD (Level Of Detail) is a technique used to change the amount of geometry dymamically, such that meshes close to the viewer have high definition, while meshes far from the viewer are simplified down. This aims at improving performance.
-![LOD example](images/lod_example.png)
+![LOD example](images/lod_example.webp)
!!! note
Careful: in this engine, `LOD` *levels* are frequently represented with numbers from `0` to `N-1`, where `N` is the number of LODs. `0` is the *highest level of detail*, while LOD `1`, `2` etc up to `N-1` are *lower levels of detail*.
-![Illustration of level of detail with a grid of voxels](images/lod_density_schema.png)
+![Illustration of level of detail with a grid of voxels](images/lod_density_schema.webp)
When going from LOD `i` to `i+1`, voxels and blocks double in size, covering more space. However resolution of blocks doesn't change, so detail density is lower and consumes less resources.
@@ -393,7 +393,7 @@ Reducing the number of LODs reduces the size of octrees, however it also means t
If you are not making an infinite terrain, you may give it fixed bounds with the `bounds` property, as well as a very large view distance so it stays in view.
`bounds` will be rounded to octree size: for example, with 4 LODs and mesh block size of 16, LOD0 blocks will be 16, LOD1 will be 32, LOD2 will be 64... and LOD3 (the biggest) will be 128. Since the current implementation keeps at minimum 8 octrees around the origin, optimal bounds for this setup would be 256.
-![Screenshot of fixed bounds LOD terrain](images/fixed_bounds_octrees.png)
+![Screenshot of fixed bounds LOD terrain](images/fixed_bounds_octrees.webp)
Following the same logic, fixed bounds of 512 is optimal with 5 LODs, 1024 is optimal with 6 LODs and so on.
This is based on mesh block size of `16`, so if you set it to `32`, you may set one less LOD since meshes are twice as big.
diff --git a/editor/icons/VoxelLodTerrain.svg b/editor/icons/VoxelLodTerrain.svg
index ca778378..7387eb14 100644
--- a/editor/icons/VoxelLodTerrain.svg
+++ b/editor/icons/VoxelLodTerrain.svg
@@ -1,71 +1 @@
-
-
+
diff --git a/editor/icons/VoxelTerrain.svg b/editor/icons/VoxelTerrain.svg
index ca778378..7387eb14 100644
--- a/editor/icons/VoxelTerrain.svg
+++ b/editor/icons/VoxelTerrain.svg
@@ -1,71 +1 @@
-
-
+
diff --git a/editor/icons/VoxelTerrainLarge.svg b/editor/icons/VoxelTerrainLarge.svg
index e65616bb..721271ba 100644
--- a/editor/icons/VoxelTerrainLarge.svg
+++ b/editor/icons/VoxelTerrainLarge.svg
@@ -1,137 +1 @@
-
-
+