সম্পাদনা: দয়া করে আমার অন্য উত্তরটি একটি কংক্রিট সমাধান সহ দেখুন।
আমি আমার মাস্টারের থিসিসের জন্য এক বছর আগে সত্যই এই সমস্যাটি সমাধান করেছি। ভালভ কাগজে, তারা দেখায় যে এটি অর্জন করতে আপনি এবং দুটি দূরত্বের ক্ষেত্রগুলি করতে পারেন, যা আপনার কেবলমাত্র একটি উত্তল কোণে থাকবে ততক্ষণ কাজ করে। অবতল কোণগুলির জন্য, আপনাকে ওআর অপারেশনও প্রয়োজন। এই লোকটি চারটি টেক্সচার চ্যানেল ব্যবহার করে দুটি ক্রিয়াকলাপের মধ্যে স্যুইচ করতে আসলে কিছু অস্পষ্ট সিস্টেম বিকাশ করেছিল।
যাইহোক, পরিস্থিতিটির উপর নির্ভর করে আরও অনেক সহজ অপারেশন যা ওআর এবং ওআর উভয়কেই সহজলভ্য করতে পারে এবং এটি আমার থিসিসের মূল ধারণা: তিনটির মাঝারি । সুতরাং মূলত, আপনি ঠিক তিনটি চ্যানেল ব্যবহার করেন (আরজিবির জন্য আদর্শ), যা সম্পূর্ণরূপে বিনিময়যোগ্য এবং মিডিয়ান অপারেশন ব্যবহার করে তাদের একত্রিত করুন (তিনটির মধ্যে মধ্যম মানটি চয়ন করুন)।
অ্যান্টি-এলিয়জিংয়ের জন্য, আমরা কেবল বুলিয়ানগুলির সাথে কাজ করি না, তবে ভাসমান পয়েন্টের মানগুলি ব্যবহার করি এবং অ্যান্ড অপারেশন সর্বনিম্ন হয়ে যায় এবং ওআর সর্বোচ্চ দুটি মানের হয়ে যায়। তিনটির মধ্যম প্রকৃতপক্ষে উভয়ই করতে পারে: যদি একটি < বি , (( ক , ক , খ )) হয়, তবে মধ্যম সর্বনিম্ন এবং ( ক , খ , খ ) এর জন্য, এটি সর্বাধিক।
রেন্ডারিং প্রক্রিয়াটি এখনও অত্যন্ত সহজ। অ্যান্টি-আলিয়াজিং সহ পুরো টুকরা শেডার এর মতো কিছু দেখতে পারে:
int main() {
// Bilinear sampling of the distance field
vec3 s = texture2D(sdf, p).rgb;
// Acquire the signed distance
float d = median(s.r, s.g, s.b) - 0.5;
// Weight between inside and outside (anti-aliasing)
float w = clamp(d/fwidth(d) + 0.5, 0.0, 1.0);
// Combining the background and foreground color
gl_FragColor = mix(outsideColor, insideColor, w);
}
সুতরাং আসল পদ্ধতি থেকে একমাত্র পার্থক্য হ'ল জমিনকে নমুনা দেওয়ার পরে ঠিক মধ্যকটি গণনা করা। আপনাকে মিডিয়ান ফাংশনটি বাস্তবায়ন করতে হবে , যা কেবল 4 মিনিট / সর্বাধিক ক্রিয়াকলাপের সাহায্যে করা যেতে পারে ।
এখন অবশ্যই, প্রশ্নটি হল, আমি কীভাবে এই জাতীয় তিনটি চ্যানেল দূরত্বের ক্ষেত্রটি তৈরি করব?এবং এটি জটিল অংশ। প্রথম দিকে আমি সবচেয়ে স্পষ্ট পদ্ধতিটি গ্রহণ করেছি হ'ল ইনপুট শেপ / গ্লাইফের পচন তিনটি উপাদানগুলিতে করা, এবং তারপরে প্রতিটি থেকে একটি প্রচলিত দূরত্ব ক্ষেত্র তৈরি করা। এই পচনের নিয়মগুলি এত জটিল নয়। প্রথমত, 3 টি চ্যানেলের মধ্যে কমপক্ষে 2 টির অন্তর্ভুক্ত অঞ্চলটি। তারপরে, আপনি যদি এটি আরজিবি রঙিন চ্যানেল হিসাবে কল্পনা করেন তবে উত্তল কোণগুলি অবশ্যই একটি গৌণ রঙের তৈরি হওয়া উচিত এবং এর দুটি প্রাথমিক উপাদান বাহ্যিকভাবে অবিরত থাকবে। কনক্যাভ কোণগুলি বিপরীত: দুটি গৌণ রঙগুলি তাদের সাধারণ প্রাথমিক রঙটি আবদ্ধ করে এবং যেখানে উভয় প্রান্তগুলি অভ্যন্তরের অভ্যন্তরে অব্যাহত থাকে তার মাঝের অংশটি সাদা is আমি আরও দেখতে পেলাম যে কয়েকটি প্যাডিং প্রয়োজনীয় যেখানে দুটি প্রাথমিক বা দুটি গৌণ রঙ অন্যথায় শিল্পকর্মগুলি এড়াতে স্পর্শ করবে (উদাহরণস্বরূপ, "এন" এর মাঝের স্ট্রোকে
নিম্নলিখিত থিমটি আমার থিসিস থেকে প্রোগ্রাম দ্বারা উত্পাদিত একটি উদাহরণ:
এই পদ্ধতির অবশ্য কিছু ত্রুটি রয়েছে। এর মধ্যে একটি হ'ল বিশেষ প্রভাব যেমন বাহ্যরেখা এবং ছায়াগুলি আর সঠিকভাবে কাজ করবে না। ফরচুনেটেললি, আমি একটি দ্বিতীয়, আরও মার্জিত পদ্ধতি নিয়ে এসেছি, যা সরাসরি দূরত্বের ক্ষেত্রগুলি উত্পন্ন করে এবং এমনকি সমস্ত গ্রাফিকাল প্রভাবকে সমর্থন করে। এটি আমার থিসিসের অন্তর্ভুক্ত এবং এটি এক বছরেরও বেশি পুরানো। আমি এখনই আর কোনও বিবরণ দিতে যাচ্ছি না, কারণ আমি বর্তমানে একটি কাগজ লিখছি যা এই দ্বিতীয় কৌশলটি বিশদে বিশদ বর্ণনা করেছে, তবে এটি শেষ হওয়ার সাথে সাথে আমি এখানে এটি পোস্ট করব।
যাইহোক, এখানে মানের পার্থক্যের একটি উদাহরণ। টেক্সচার রেজোলিউশন প্রতিটি চিত্রের ক্ষেত্রে একই, তবে বামে একটি নিয়মিত টেক্সচার ব্যবহার করে, মাঝেরটি একটি সাধারণ দূরত্বের ক্ষেত্র এবং ডানদিকটি আমার তিন-চ্যানেলের দূরত্ব ক্ষেত্রটি ব্যবহার করে। পারফরম্যান্স ওভারহেড কেবল একটি আরবিজি টেক্সচার বনাম মনোক্রোমের একের নমুনার মধ্যে পার্থক্য।