Пример #1
0
        public static void EditorGenerateBaseCloudNoise()
        {
            int resolution = 256;

            Texture2D cpuBaseNoiseTexture = new Texture2D(resolution, resolution, TextureFormat.RGBAFloat, false, true);

            cpuBaseNoiseTexture.wrapMode   = TextureWrapMode.Repeat;
            cpuBaseNoiseTexture.filterMode = FilterMode.Trilinear;

            Vector4[] pixels = new Vector4[resolution * resolution];

            for (int x = 0; x < resolution; x++)
            {
                for (int y = 0; y < resolution; y++)
                {
                    Vector4 result = Vector4.zero;

                    Vector3 coord = new Vector3(x / (float)(resolution), y / (float)(resolution), 0.5f);

                    result.x = WNG.OctaveNoise(coord, 8, 9, 4);
                    result.y = 0.625f * WNG.OctaveNoise(coord, 3, 15, 7) +
                               0.250f * WNG.OctaveNoise(coord, 3, 30, 5) +
                               0.125f * WNG.OctaveNoise(coord, 3, 40, 6);
                    result.z = 1.0f - WNG.OctaveNoise(coord + new Vector3(0.5f, 0.5f, 0.5f), 6, 75);

                    pixels[x + y * resolution] = result;
                }
            }

            List <byte> data = new List <byte>();

            foreach (Vector4 v in pixels)
            {
                byte[] buff = new byte[sizeof(float) * 4];
                Buffer.BlockCopy(BitConverter.GetBytes(v.x), 0, buff, 0 * sizeof(float), sizeof(float));
                Buffer.BlockCopy(BitConverter.GetBytes(v.y), 0, buff, 1 * sizeof(float), sizeof(float));
                Buffer.BlockCopy(BitConverter.GetBytes(v.z), 0, buff, 2 * sizeof(float), sizeof(float));
                Buffer.BlockCopy(BitConverter.GetBytes(v.w), 0, buff, 3 * sizeof(float), sizeof(float));

                data.AddRange(buff);
            }

            cpuBaseNoiseTexture.LoadRawTextureData(data.ToArray());
            cpuBaseNoiseTexture.Apply();

            UnityEditor.AssetDatabase.CreateAsset(cpuBaseNoiseTexture, string.Format("{0}Clouds/baseNoise.asset", baseFolder));
            UnityEditor.AssetDatabase.SaveAssets();
        }
Пример #2
0
        public static void EditorGenerateCloudDetailNoise()
        {
            int resolution = 45;

            Texture3D cpuDetailNoiseTexture = new Texture3D(resolution, resolution, resolution, TextureFormat.RGBAFloat, false);

            cpuDetailNoiseTexture.wrapMode   = TextureWrapMode.Repeat;
            cpuDetailNoiseTexture.filterMode = FilterMode.Trilinear;

            Color[] pixels = new Color[resolution * resolution * resolution];

            for (int x = 0; x < resolution; x++)
            {
                for (int y = 0; y < resolution; y++)
                {
                    for (int z = 0; z < resolution; z++)
                    {
                        Vector3 coord = new Vector3(x / (float)(resolution), y / (float)(resolution), z / (float)(resolution));

                        float r = WNG.OctaveNoise(coord, 16, 3);
                        float g = WNG.OctaveNoise(coord, 4, 8);
                        float b = WNG.OctaveNoise(coord, 4, 16);

                        float c  = Mathf.Max(0.0f, 1.0f - (r + g * 0.5f + b * 0.25f) / 1.75f);
                        float c2 = Mathf.Max(0.0f, 1.0f - (g + r * 0.5f + b * 0.25f) / 1.75f);
                        float c3 = Mathf.Max(0.0f, 1.0f - (r + b * 0.5f + g * 0.25f) / 1.75f);

                        pixels[x + y * resolution + z * resolution * resolution] = new Color(c, c2, c3, 1);
                    }
                }
            }

            cpuDetailNoiseTexture.SetPixels(pixels);
            cpuDetailNoiseTexture.Apply();

            UnityEditor.AssetDatabase.CreateAsset(cpuDetailNoiseTexture, string.Format("{0}Clouds/detailNoise.asset", baseFolder));
            UnityEditor.AssetDatabase.SaveAssets();
        }