আমি আপনার কোডটি যথাযথভাবে অনুসরণ করি না, তবে এখানে অ্যালগরিদমের একটি সরল বর্ণনা রয়েছে যা মোটামুটি প্রভাব অর্জন করবে (আপনি যে চিত্র পোস্ট করেছেন তার উপর ভিত্তি করে)।
নীচের ব্যাখ্যাটি সুপার অপ্টিমাইজড সংস্করণ নয়, এটি একটি যা ধারণাগতভাবে পরিষ্কার (আমি আশা করি) clear আপনি এটি চালিয়ে যাওয়ার পরে, আপনি এটিকে অপ্টিমাইজ করতে পারেন (বেশ মারাত্মকভাবে, আসলে)।
- অভিন্ন র্যান্ডম শব্দের n স্তরগুলি তৈরি করুন (কেবলমাত্র এলোমেলো গ্রেস্কেল পিক্সেল)।
- এখন প্রতিটি, 1, 2, 4, 8, ... 2 ^ (এন -1) পিক্সেল, এবং মধ্যবর্তী পিক্সেলগুলি ইন্টারপোল্ট করে নমুনা করুন। প্রতিটি স্তর পূর্ববর্তী তুলনায় মসৃণ।
- এখন 1, 2, 4, 8, ইত্যাদির গুণক সহ এর স্কেল করুন প্রতিটি স্তর পূর্ববর্তীটির চেয়ে গা dark়।
- এই সমস্ত একসাথে যোগ করুন।
- প্রতিটি পিক্সেলকে (1 + 2 + 4 + 8 + ... 2 ^ (এন -1)) দিয়ে ভাগ করে সাধারণ করুন।
কঠিন পদক্ষেপটি স্যাম্পলিং এবং ইন্টারপোলেশন পদক্ষেপ। মনে করুন আমরা প্রতিটি এম-পিক্সেল পিক্সেলের নমুনা এড়িয়ে চলেছি layer এখানে এম> 1 এর প্রাথমিক ধারণাটি রয়েছে (যদি এম 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)
কয়েকটি টিপস:
- উপরের অ্যালগরিদমের ফলাফলটি কিছুটা ধুয়ে গেছে বলে মনে হচ্ছে। আপনি এই স্তরটি সমস্ত স্তরগুলির জন্য একই স্তরের শব্দের ব্যবহার করে হ্রাস করতে পারেন, বা চিত্রটিকে পরে উন্নত করতে হবে।
- উপরের অ্যালগরিদম লিনিয়ার ইন্টারপোলেশন ব্যবহার করে তবে কোসাইন ইন্টারপোলেশন (একটি অনুসন্ধান করুন) আরও ভাল ফলাফল দেয়।
- অ্যালগোরিদমের সমস্ত অংশের সময় পৃথকভাবে আপনার স্তরগুলি দেখে নেওয়া সম্ভব করুন। এটি আপনাকে বাগগুলি দ্রুত বের করতে সহায়তা করবে।