2012-05-24 36 views
7

Tôi đang tìm cách điều chỉnh thuật toán tiếng ồn Perlin 3D để giảm kích thước, nhưng tôi gặp sự cố với hàm gradient, vì tôi không hiểu đầy đủ lý do.Perlin noise gradient function

Hàm Perlin gốc ban đầu có bốn đối số: hash và tọa độ ba chiều (x, y, z). Kết quả của hàm được trả về dựa trên giá trị của hash mod 16, như được liệt kê bên dưới.

  • 0: x + y
  • 1: -x + y
  • 2: x - y
  • 3: -x - y
  • 4: x + z
  • 5: -x + z
  • 6: x - z
  • 7: -x - z
  • 8: y + z
  • 9: -y + z
  • 10: y - z
  • 11: -y - z
  • 12: y + x
  • 13: -y + z
  • 14: y - x
  • 15: -y - z

Các giá trị trả lại 0-11 làm cho một loại mô hình, vì mỗi sự kết hợp được biểu diễn một lần. Tuy nhiên, bốn cái cuối cùng là bản sao. Tại sao họ được chọn để phù hợp với bốn giá trị trả lại cuối cùng? Và những trường hợp hậu môn nào có hai số (x, y) và một kích thước (x)?

Trả lời

9

... là câu trả lời muộn hơn không? ;-)

Hàm grad trong triển khai "cải thiện tiếng ồn" tính toán một sản phẩm dấu chấm giữa véc tơ x, y, z và vector gradient ngẫu nhiên giả.

Trong triển khai này, vector gradient được chọn từ 12 tùy chọn. Họ thả thống nhất của việc lựa chọn và thêm số 12 và 14, bởi vì nó là nhanh hơn để làm hash & 15 hơn hash % 12

Đối với một tiếng ồn Perlin 2D Tôi đã sử dụng chỉ có 4 vectơ dốc mà không cần bất kỳ vấn đề có thể nhìn thấy như thế này:

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y); 
+1

Cảm ơn câu trả lời! Tôi luôn vô cùng biết ơn những anh hùng đã xông vào để cứu những câu hỏi đã quên lãng cũ. –