मैं आपके कोड का ठीक-ठीक पालन नहीं करता, लेकिन यहाँ एल्गोरिथ्म का एक सरलीकृत वर्णन है जो मोटे तौर पर प्रभाव को प्राप्त करेगा (आपके द्वारा पोस्ट की गई छवि के आधार पर)।
निम्नलिखित स्पष्टीकरण सुपर अनुकूलित संस्करण नहीं है, लेकिन एक है जो वैचारिक रूप से स्पष्ट है (मुझे आशा है)। एक बार जब आप इसे चालू कर लेते हैं, तो आप इसे (काफी तेजी से, वास्तव में) अनुकूलित कर सकते हैं।
- एकसमान रैंडम शोर (सिर्फ रैंडम ग्रेस्केल पिक्सल) की एन लेयर्स जनरेट करें।
- अब इनमें से प्रत्येक, 1, 2, 4, 8, ... 2 ^ (n-1) पिक्सल का नमूना लेकर और इंटरमीडिएट पिक्सल को प्रक्षेपित करके नमूना बनाएं। प्रत्येक परत पिछले एक की तुलना में चिकनी है।
- अब 1, 2, 4, 8, आदि के कारक के साथ इनमें से प्रत्येक परत पिछले वाले की तुलना में गहरा है।
- इन सभी को एक साथ मिलाएं।
- प्रत्येक पिक्सेल को (1 + 2 + 4 + 8 + ... 2 ^ (n-1)) से विभाजित करके सामान्य करें।
कठिन कदम नमूना और प्रक्षेप कदम है। मान लीजिए कि हम हर m-th पिक्सेल के नमूने को छोड़ते हुए परत में हैं। यहाँ m> 1 के लिए मूल विचार है (यदि m 1 है, तो हम चित्र का उपयोग इस प्रकार है):
for each pixel x and y
left_sample_coord = m *(x / m) //(integer division, automatically truncated)
right_sample_coord = (left_sample_point + m) % image_width
top_sample_point = m*(y / m)
bottom_sample_coord = (top_sample_point + m) % image_height
horizontal_weight = (x - left_sample_point) / (m - 1)
vertical_weight = (y - top_sample_point) / (m - 1)
sample_top_left = image(left_sample_coord, top_sample_point)
//and the same for the other four corners
//now combine the top two points
top_interpolate = sample_top_left * horizontal_weight + sample_top_right * (1-horizontal_weight)
//now combine the bottom two points
bottom_interpolate = sample_bottom_left * horizontal_weight + sample_bottom_right * (1-horizontal_weight)
//and combine these two last obtained values
smooth_noise(x, y) = top_interpolate * vertical_weight + bottom_interpolate * (1 - vertical_weight)
कुछ सुझाव:
- ऊपर एल्गोरिथ्म का परिणाम थोड़ा धोया हुआ लग सकता है। आप सभी परतों के लिए शोर की एक ही परत का उपयोग करके इस प्रभाव को कम कर सकते हैं, या बाद में छवि को विपरीत कर सकते हैं।
- ऊपर एल्गोरिथ्म रैखिक प्रक्षेप का उपयोग करता है, लेकिन कोसाइन प्रक्षेप (एक खोज करें) बहुत बेहतर परिणाम देता है।
- एल्गोरिथ्म के सभी हिस्सों के दौरान अपनी परतों को अलग से देखना संभव बनाएं। इससे आपको बग्स को जल्दी से बाहर निकालने में मदद मिलेगी।