FastNoise C# and Unity released

FastNoise C# GitHub

FastNoise is a C++ noise generation library I designed for real-time terrain generation. Since the library has reached all my feature and performance goals, I decided to convert and release a C# version.

Features

  • Value Noise 2D, 3D
  • Perlin Noise 2D, 3D
  • Simplex Noise 2D, 3D, 4D
  • Position Warping 2D, 3D
  • Multiple fractal options for all of the above
  • Cellular (Voronoi) Noise 2D, 3D
  • White Noise 2D, 3D, 4D
  • Noise Examples

FastNoise Unity Asset Store

Along with a pure C# version I wanted to create a Unity Asset featuring Unity editor integration and FastNoise SIMD support. FastNoise SIMD has a similar feature set to FastNoise but uses CPU intrinsic functions to process data in sets of 4/8, this gives around a 300-400% performance increase over FastNoise making it ideal for 3D terrain generation.

Features over pure C# version

  • Unity editor integration with live noise preview
  • Precompiled C++ libraries for FastNoise SIMD (Windows(32/64bit), Mac OSX(32/64bit), Linux(32/64bit))
  • C# interface to use FastNoise SIMD libraries
  • Voxel terrain engine
  • Help support continued development of these open source noise libraries

The voxel terrain engine included in the Unity asset is designed as a learning tool for people starting out with voxels in Unity, while being fairly simple it is well designed for expansion and has a heavy focus on optimisation.

Voxel Terrain Engine Demo Video

Unity Voxel Terrain Engine Features

  • Chunk management system
  • Infinite generation in all 3 axis
  • Multi-threaded terrain generation
  • Baked ambient occlusion
  • Naive surface meshing
  • Flexible classes allow easy customisation
  • 5 different terrain generators
  • Commented code to help people understand the workings of a voxel engine

unityss3

Let me know if you have any ideas or questions!

You may also like...

2 Responses

  1. Hi Jordan,
    I’ve just purchased the Unity FastNoise plugin, and am having difficulties getting going. I can implement the float[] noiseSet = myNoise.GetNoiseSet(0, 0, 0, 16, 16, 16); example from the documentation, within a c# script on an object with a mesh. This happily returns noise values.
    I cannot, however, find a way to use the VectorSet function. I want to pass in a Vector3[] array (of vertex points) and get a float[] array back of noise values (for the vertex 3D coords). I am trying:
    FastNoiseSIMD myVectorSet = new VectorSet(); …and variations including FastNoiseSIMD myVectorSet = new VectorSet(sphereVertices); …where ‘sphereVertices’ is a non-null Vector3[].
    But I am getting errors, such as; “The type or namespace name ‘VectorSet’ could not be found. Are you missing a using directive or an assembly reference?”
    I am obviously doing something basically wrong here. Could you give me a couple of pointers, or maybe an example that achieves what I am trying (including “using LibraryX” headers for the c# code)?

    • Hi Simon,
      You need to use new FastNoiseSIMD.VectorSet(Vector3[] vectors)
      Try to reuse vector sets as much as you can by using them with position offsets in GetNoise(), since there is some overhead to create them.
      Hope this helps.

Leave a Reply to Jordan Peck Cancel reply