public void GenerateTexture() { Profiler.BeginSample("Perlin Noise Generation"); Color[] pixels = new Color[resolution.x * resolution.y * resolution.z]; noiseTexture = new Texture3D(resolution.x, resolution.y, resolution.z, TextureFormat.ARGB32, true); SeedGenerator((uint)seed); float[] pixelsFloats = new float[resolution.x * resolution.y * resolution.z]; switch (noiseType) { case NoiseType.PerlinNoise: GeneratePerlinNoiseImage3D((uint)resolution.x, (uint)resolution.y, (uint)resolution.z, (uint)scale.x, (uint)scale.y, (uint)scale.z, octaves, persistence, contrast, inMapMin, inMapMax, outMapMin, outMapMax, pixelsFloats); break; case NoiseType.WorleyNoise: case NoiseType.InverseWorleyNoise: GenerateWorleyNoiseImage3D((uint)resolution.x, (uint)resolution.y, (uint)resolution.z, (uint)scale.x, (uint)scale.y, (uint)scale.z, octaves, persistence, contrast, inMapMin, inMapMax, outMapMin, outMapMax, pixelsFloats); break; case NoiseType.PerlinWorleyNoise: GeneratePerlinWorleyNoiseImage3D((uint)resolution.x, (uint)resolution.y, (uint)resolution.z, (uint)scale.x, (uint)scale.y, (uint)scale.z, octaves, persistence, contrast, inMapMin, inMapMax, outMapMin, outMapMax, pixelsFloats); break; default: break; } for (int i = 0; i < pixelsFloats.Length; i++) { float value = pixelsFloats[i]; if (noiseType == NoiseType.InverseWorleyNoise) { value = 1.0f - value; } pixels[i].r = value; pixels[i].g = value; pixels[i].b = value; pixels[i].a = value; } noiseTexture.SetPixels(pixels); noiseTexture.Apply(); Texture3D.DontDestroyOnLoad(noiseTexture); GeneratePreview(); Profiler.EndSample(); }