Macaw - Noise in GameMaker
A downloadable tool
If you've spent a long enough time in game dev, you've probably been interested in generating various kinds of noise at least a few times. It's useful for quite a number of things:
- Anything to do with procedural generation
- Terrain generation
- Texture generation
- Actual clouds
- Probably a ton of things I haven't thought of yet
Here's a nice little system I wrote for doing exactly that!
Features
- Fractal and Perlin noise
- Control the number of octaves/smoothness used in generation
- Control the amplitude of the noise (eg if you're generating a sprite you probably want the noise to have a range between 0 and 255)
- Native GML (cross-platform), a shader (cross-platform), or via a DLL (Windows only)
- Helper function to convert the raw noise data to a sprite (see screenshots)
- Helper function to convert the raw noise data to a vertex buffer (this is probably not very useful to you)
Performance
The shader versions are cross-platform and very fast. On my 3GB GTX 1060, large 2K and 4K noise textures can be computed in some tens of milliseconds.
Regular noise:
Perlin noise stacks up similarly:
The CPU code versions are a tad slower. The native GML implementation performs reasonably well on small scales. Here are some numbers for the fractal noise:
- 64x64: 40 ms
- 256x256: 700 ms
- 2048x2048: 48,500 ms ("reasonably" is relative)
Obviously, the YYC improves things rather dramatically.
And the DLL version, which lives in the nether realm of C++, blows GML out of the water.
For small noise-related tasks the native GML version is perfectly fine, although if you're doing anything exotic you probably want to use the DLL.
If you want to use the DLL on something that isn't Windows, let me know and I'll see if I can work something out. I might demand money or something.
Documentation
is available here.
Price
As usual, the asset is free as-is. I'll fix simple or game-breaking bugs but more involved support requires payment via either Itch or Patreon. I get the final say in what constitutes "game-breaking."
Credits
- The demo makes use of Emu (also by me), which uses Scribble by @jujuadams
- Macaw by Lars Meiertoberens from NounProject.com
| Status | Released |
| Category | Tool |
| Rating | Rated 5.0 out of 5 stars (1 total ratings) |
| Author | Dragonite |
| Made with | GameMaker |
| Tags | GameMaker, noise, perlin-noise, randomness |
| Average session | A few minutes |
Download
Click download now to get access to the following files:
Development log
- GML fractal noise optimizationJan 19, 2025
- Faster shader noise, and other noise typesFeb 23, 2024
- Small fix for "seams" appearing in generated noiseFeb 11, 2022







Comments
Log in with itch.io to leave a comment.
hello your Get function was broken
I changed (line 263)
return buffer_peek(self.noise, ((x * self.height) + y) * 2, buffer_f16);
to
return buffer_peek(self.noise, ((x * self.height) + y) * 4, buffer_f32);
and it seems to be working
thank you for this amazing program, do I need to credit you anywhere?
Good catch, not sure how that never came up before!
Very amazing, but I had a question, how could I use offset?