NoiseGenerator.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using UnityEngine;
  2. public class NoiseGenerator
  3. {
  4. public float GetNoise(float x, float y, float scale)
  5. {
  6. return Mathf.PerlinNoise(x * scale, y * scale) * 2f - 1f;
  7. }
  8. public float GetNoise(float x, float y, float z, float scale)
  9. {
  10. // 3D noise approximation using multiple 2D noise samples
  11. float xy = Mathf.PerlinNoise(x * scale, y * scale);
  12. float xz = Mathf.PerlinNoise(x * scale, z * scale);
  13. float yz = Mathf.PerlinNoise(y * scale, z * scale);
  14. return (xy + xz + yz) / 3f * 2f - 1f;
  15. }
  16. public float GetFractalNoise(float x, float y, float scale, int octaves = 4)
  17. {
  18. float value = 0f;
  19. float amplitude = 1f;
  20. float frequency = scale;
  21. float maxValue = 0f;
  22. for (int i = 0; i < octaves; i++)
  23. {
  24. value += Mathf.PerlinNoise(x * frequency, y * frequency) * amplitude;
  25. maxValue += amplitude;
  26. amplitude *= 0.5f;
  27. frequency *= 2f;
  28. }
  29. return (value / maxValue) * 2f - 1f;
  30. }
  31. }