コード例 #1
0
    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();
    }