All Projects → Computer-Graphics-And-Pretty-Pictures → Procedural-Generation

Computer-Graphics-And-Pretty-Pictures / Procedural-Generation

Licence: other
An Overview of Procedural Generation Techniques and Applications

Programming Languages

javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to Procedural-Generation

Three.terrain
A procedural terrain generation engine for use with the Three.js 3D graphics library for the web.
Stars: ✭ 353 (+1434.78%)
Mutual labels:  threejs, procedural-generation, noise
Erics Magicavoxel Shaders
Shaders for MagicaVoxel including Terrain Generator, Life Game, Waterflow Emulator, Advanced Flood System etc.
Stars: ✭ 99 (+330.43%)
Mutual labels:  procedural-generation, noise
Noise Rs
Procedural noise generation library for Rust.
Stars: ✭ 302 (+1213.04%)
Mutual labels:  procedural-generation, noise
city-tour
A procedurally generated city built with WebGL and three.js
Stars: ✭ 57 (+147.83%)
Mutual labels:  threejs, procedural-generation
DungeonTemplateLibraryUnity
🌏: Dungeon free resources (terrain & roguelike generation)
Stars: ✭ 51 (+121.74%)
Mutual labels:  procedural-generation, noise
Texturegenerator
3D and 2D Texture generation using the compute shaders within the Unity engine.
Stars: ✭ 142 (+517.39%)
Mutual labels:  procedural-generation, noise
Fastnoise2
Modular node based noise generation library using SIMD, C++17 and templates
Stars: ✭ 196 (+752.17%)
Mutual labels:  procedural-generation, noise
three-noise
Simple gradient noise library for use with Three.js. Now with fBm!
Stars: ✭ 31 (+34.78%)
Mutual labels:  threejs, noise
Filament
Interactive Music Visualizer
Stars: ✭ 22 (-4.35%)
Mutual labels:  threejs, noise
Terrain Builder
🏔 Procedural terrain using Three.js and perlin noise, Now Accelerated by your GPU!
Stars: ✭ 228 (+891.3%)
Mutual labels:  threejs, procedural-generation
CubicNoise
1D & 2D Random noise with bicubic interpolation
Stars: ✭ 76 (+230.43%)
Mutual labels:  procedural-generation, noise
zeo
Multiplayer WebVR worlds made out of npm modules.
Stars: ✭ 47 (+104.35%)
Mutual labels:  threejs, procedural-generation
fractal-noise-js
Fractal noise functions
Stars: ✭ 37 (+60.87%)
Mutual labels:  procedural-generation, noise
DoomlikeDungeons
A procedural multi-room dungeon generator for Minecraft
Stars: ✭ 23 (+0%)
Mutual labels:  procedural-generation
js-libp2p-noise
Noise libp2p handshake for js-libp2p
Stars: ✭ 21 (-8.7%)
Mutual labels:  noise
fastbloom
A simple but fast bloomfilter written in Python
Stars: ✭ 21 (-8.7%)
Mutual labels:  hash
UnityModularSystem
Unity Modular system let's you create game object with procedural generated parts.
Stars: ✭ 31 (+34.78%)
Mutual labels:  procedural-generation
xxhash-rust
Rust implementation of xxhash
Stars: ✭ 56 (+143.48%)
Mutual labels:  hash
xxhash
A super-fast hash algorithm in a single C++ header
Stars: ✭ 48 (+108.7%)
Mutual labels:  hash
agent-python
Official python agent for using the distributed hashcracker Hashtopolis
Stars: ✭ 39 (+69.57%)
Mutual labels:  hash

Procedural Generation

Procedural generation is a tool that is extremely useful in creating many different kinds of content. The core idea is to create a generative program and feed it random values as parameters. It can be tricky to constrain the influence of the random values while maintaining good variety, but doing it right can produce an endless amount of effects that would be impossible to create by hand!

So how does it work?

At the base of any random number generator is a hash function. The image below links to an interactive implementation of a simple alias-based hash function in desmos. Note that this is a different design than hashes used in cryptography, but serves the same purpose of scrambling input into an seemingly random output. The demo then goes on to show how the hash function can be used to create "fractal noise"

Below is an example of a 2D random number generator implemented for the GPU with a shader, and explores a few transformations to create different distributions. This is very efficient and is an essential building block of many effects. This also can be replaced with a pre-generated random texture, which can be used in the exact same way with perhaps less computational cost. The 2D noise is easily interpreted as an image, and looks like the screen of a TV with no antenna.

Here is 3D noise, smoothed and layered at multiple frequencies (as in the desmos example) to synthesize interesting textures on the fly.

From this point on it is okay to treat random number generators as a black-box. Understanding how they work is not necessary to use them, just fun.

This music visualizer demonstrates a more indirect use of 3D fractal noise. Rather than simply dumping the values onto the screen, the noise is used to displace the geometry of a mesh. By mapping the amplitudes of frequencies extracted from the music onto the amplitude of each noise frequency, the geometry becomes responsive to the music in a unique way.

The index.html file in this repository demonstrates the application of noise onto the height displacement of a plane. With just a few iterations a procedural terrain effect is possible. This is a simplified version of the way terrain generation in games like minecraft work.

Inigo Quilez's famous "elevated" terrain

It turns out lots of beautiful things in nature can be synthesized by applying simple transformations to noise.

Procedural generation can be used for a lot more than just visual effects. Here is an example of randomly generated music, using some of the same principals. Every measure, a random root note from a scale is selected, and then a chord configuration is created based on that root. A melody is created at every eight note by randomly selecting from one of the following: A: random note on the scale, B: ascending scale, C: descending scale, D: the root, E: a note from the chord other than the root. The result is a surprisingly natural sounding song.

This is only scratching the surface! Writing generative programs is like meta-creativity- telling the machine which parameters can vary and in what ways allows it to generate unlimited "original" content. It's definitely worth the careful tuning it can require!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].