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(); }
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(); }