While noise is generally a nuisance in everyday life, noise can be especially useful for certain people. Procedural Content Generation (PCG) almost always uses some form of noise, and games especially are benefiting from noise. Games use noise to add realism to hand-crafted models, but realistic landscapes generated procedurally are finding greater use. This paper explains methods of procedural generation techniques for creating random landscapes, including noise algorithms, erosion algorithms, water modeling, and vegetation simulation techniques. These algorithms include the Diamond-Square Algorithm, Midpoint Displacement, Value Noise, Perlin Noise, Simplex Noise, Cell Noise (Whorley Noise), thermal erosion, hydraulic erosion, and various vegetation modeling techniques. This paper aims to consolidate information on all these algorithms, as well as provide information on which algorithms are best for which situations. These algorithms range from very easy to implement, to extremely difficult algorithms like Simplex Noise. All algorithms are compared and contrasted with each other based on speed, resource requirements, and visual quality. Levels of sharpness, isotropicness, detail, balance, scalability, randomness, and other factors determine visual quality. Implementation challenges for each algorithm are also discussed, as well as the accuracy of each algorithm with respect to physical models. Specific applications of each algorithm are covered, as well as limitations of each. Simplex Noise is found to have the best balance of quality and speed of the noise algorithms, while hydraulic erosion is found to give the best quality of all tested erosion algorithms. Optimal and interesting conditions are discussed for select algorithms, especially Cell Noise. Uses for noise in higher dimensions is also discussed, as well as methods for creating it. Abstract uses for noise outside of textures are also explored, such as model movement, level layout, path planning, increasing robustness of learning algorithms, and even primitive artificial intelligence models. All code was created in C++, and is released open source for public use. Directions for finding and using this code are included.
展开▼