itch.io is community of indie game creators and players

Devlogs

Noise function for procedurally generated blocks

Hantverk'n
A downloadable game

I'm using a stateless pgc hash function in 3D coordinate space to generate noise for my procedurally generated blocks.  In case anyone  is curious about the code, here are pcg hash functions for 1D, 2D and 3D in integer coordinates written in C++

inline constexpr uint32_t pcgHash(uint32_t x) {
  uint32_t state = (x * 0x2C9277B5u) + 0xAC564B05u,
           word  = ((state >> ((state >> 28) + 4)) ^ state) *
                   0x108EF2D9u;
  return word ^ (word >> 22);
}
inline constexpr uint32_t pcgHash(uint32_t x, uint32_t y) {
  uint32_t h = pcgHash(x) + pcgHash(y);
  return h ^ (h >> ((x % 15) + 1));
}
inline constexpr uint32_t pcgHash(uint32_t x, uint32_t y,
                                  uint32_t z) {
  uint32_t h = pcgHash(x) + pcgHash(y) + pcgHash(z);
  return h ^ (h >> ((x % 15) + 1));
}

and what the 2D noise it generates looks like via shadertoy

https://www.shadertoy.com/view/Mcsyz4

Update:  The following code yields good looking noise and is slightly faster

inline constexpr uint32_t pcgHash(uint32_t x, uint32_t y) {
  return pcgHash(pcgHash(y) + x);
}
Leave a comment