35 lines
1.5 KiB
Markdown
35 lines
1.5 KiB
Markdown
# Compute Shader Heightmap
|
||
|
||
This demo project gives an example of how to use *compute shaders* in Godot.
|
||
A compute shader is a piece of code that runs on the GPU and is written in GLSL
|
||
(as opposed to the
|
||
[Godot shader language](https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html)).
|
||
|
||
A compute shader can be used to take advantage of the GPU's ability to perform
|
||
massively parallel operations faster than a CPU. This demo can generate the
|
||
heightmap of an island from a noise texture, both on the CPU and the GPU. You
|
||
can try both options to compare the time it takes to generate the heightmap on
|
||
the CPU and GPU respectively.
|
||
|
||
For smaller noise textures, the CPU will often be faster, but the larger the
|
||
gains are by using the GPU. On a PC with a NVIDIA GeForce RTX 3060 and
|
||
11th-generation Intel Core i7 processor, the compute shader was tested to be
|
||
faster for textures 1024×1024 and larger.
|
||
|
||
The dimensions of the image can be set on the exported **Dimensions** property
|
||
on the main scene. By default, it's set to 2048, which creates a 2048×2048
|
||
heightmap.
|
||
|
||
> **Note**
|
||
>
|
||
> The shader code has been structured to be followed step-by-step by the user,
|
||
> and may not necessarily represent best practices. The CPU code is also less
|
||
> optimized than it could be. This is to reflect the GPU code as much as
|
||
> possible. Besides the use of the GPU, no multithreading is used.
|
||
|
||
Languages: GDScript, GLSL
|
||
|
||
Renderer: Forward Mobile
|
||
|
||
![Compute Shader Heightmap](screenshots/compute_shader_heightmap.webp)
|