টেক্সচার অ্যাটলেস এবং সংলগ্ন টেক্সেলগুলি ফাঁস ব্যবহারের সমস্যাটি লিনিয়ার টেক্সচার ফিল্টারিংয়ের সাথে সম্পর্কিত।
টেক্সেলের কেন্দ্রে হ'ল নমুনাযুক্ত জমিনের যে কোনও বিন্দুর জন্য, লিনিয়ার স্যাম্পলিং 4 সংলগ্ন টেক্সেলকে নমুনা দেবে এবং আপনি भारিত (নমুনা বিন্দু থেকে দূরত্বের ভিত্তিতে) সমস্ত 4 এর গড় হিসাবে গড় হিসাবে জিজ্ঞাসিত স্থানে মূল্য গণনা করবে নমুনা।
সমস্যার একটি দুর্দান্ত দৃশ্যায়ন এখানে:
যেহেতু আপনি GL_CLAMP_TO_EDGE
টেক্সচার অ্যাটলাসের মতো কিছু ব্যবহার করতে পারবেন না , তাই আপনাকে প্রতিটি জমিনের প্রান্তের চারদিকে বর্ডার টেক্সট তৈরি করতে হবে। এই সীমান্ত পাঠ্যগুলি উপরে বর্ণিত ওজনযুক্ত অন্তরঙ্গকরণের মাধ্যমে প্রতিবেশী নমুনাগুলিকে আটলাসের সম্পূর্ণ আলাদা টেক্সচার থেকে প্রতিরোধ করবে।
মনে রাখবেন যে আপনি যখন অ্যানিসোট্রপিক ফিল্টারিং ব্যবহার করেন তখন আপনার সীমানার প্রস্থ বৃদ্ধি করতে হতে পারে। এর কারণ এটিসোট্রপিক ফিল্টারিং চূড়ান্ত কোণগুলিতে নমুনা পাড়ার আকার বাড়িয়ে তুলবে।
প্রতিটি টেক্সচারের প্রান্তের চারপাশে একটি সীমানা ব্যবহার করে আমি কী বোঝাতে চাইছি তা বোঝাতে, ওপেনজিএলে উপলব্ধ বিভিন্ন মোড়ানো মোডগুলি বিবেচনা করুন। বিশেষ মনোযোগ দিন CLAMP TO EDGE
।
"ক্ল্যাম্প টু বর্ডার" নামে পরিচিত একটি মোড থাকা সত্ত্বেও এটি আমাদের আগ্রহী নয় mode এই মোডটি আপনাকে আপনার টেক্সচারের চারপাশে সীমানা হিসাবে কোনও টেক্সচারের স্থানাঙ্কের জন্য ব্যবহার করতে একটি রঙকে সংজ্ঞায়িত করতে দেয় যা স্বাভাবিকের বাইরে চলে যায় [0.0] -1.0] পরিসীমা।
আমরা যা চাই তা আচরণের প্রতিলিপি করা CLAMP_TO_EDGE
যেখানে কোনও টেক্সচার (উপ-) টেক্সচারের জন্য উপযুক্ত পরিসরের বাইরে স্থানাঙ্কের বাইরে থাকা শেষ টেক্সেল কেন্দ্রের মানটি অর্জন করে Since যেহেতু আপনার উপর প্রায় সম্পূর্ণ নিয়ন্ত্রণ রয়েছে Since একটি অ্যাটলাস সিস্টেমে টেক্সচার সমন্বয় হয়, একমাত্র দৃশ্যে (কার্যকর) টেক্সচার সমন্বয়গুলি আপনার টেক্সচারের বাইরের কোনও অবস্থান উল্লেখ করতে পারে টেক্সচার ফিল্টারিংয়ের ভারিত গড় পদক্ষেপের সময়।
আমরা জানি যে GL_LINEAR
উপরের চিত্রটিতে দেখা হিসাবে 4 নিকটতম প্রতিবেশী নমুনা হবে, সুতরাং আমাদের শুধুমাত্র 1-টেক্সেল সীমানা প্রয়োজন। আপনি যদি অ্যানিসোট্রপিক ফিল্টারিং ব্যবহার করেন তবে আপনার আরও বৃহত্তর টেক্সেল সীমানার প্রয়োজন হতে পারে, কারণ এটি কিছু শর্তে নমুনা পাড়ার আকার বাড়িয়ে তোলে।
এখানে এমন একটি জমিনের উদাহরণ যা সীমানাকে আরও স্পষ্টভাবে চিত্রিত করে, যদিও আপনার উদ্দেশ্যে আপনি সীমানাটি 1 টেক্সেল বা 2 টেক্সেল প্রশস্ত করতে পারেন।
(দ্রষ্টব্য: আমি যে সীমান্তের কথা উল্লেখ করছি তা চিত্রের চারটি প্রান্তের কালো নয়, তবে সেই অঞ্চলটি যেখানে চেকবোর্ড প্যাটার্নটি নিয়মিত পুনরাবৃত্তি থামিয়ে দেয়)
আপনি যদি ভাবছিলেন, এই কারণেই আমি অ্যানিসোট্রপিক ফিল্টারিং নিয়ে আসছি। এটি কোণের ভিত্তিতে নমুনা পাড়ার আকৃতি পরিবর্তন করে এবং ফিল্টারিংয়ের জন্য 4 টিরও বেশি টেক্সেল ব্যবহার করতে পারে:
http://www.arcsynthesis.org/gltut/Texturing/ParallelogramDiag.svg
আপনি যে পরিমাণ অ্যানিসোট্রপির ডিগ্রি ব্যবহার করেন তত বেশি পরিমাণে আপনাকে 4 টিরও বেশি টেক্সেলযুক্ত নমুনা পাড়াগুলির সাথে ডিল করতে হবে। বেশিরভাগ অ্যানিসোট্রপিক ফিল্টারিং পরিস্থিতির জন্য একটি 2 টেক্সেলের সীমানা পর্যাপ্ত হওয়া উচিত।
সর্বশেষে তবে শেষ পর্যন্ত, এখানে একটি প্যাকড টেক্সচার অ্যাটলাস কীভাবে তৈরি করা হবে যা টেক্সচার ফিল্টারের GL_CLAMP_TO_EDGE
উপস্থিতিতে আচরণের প্রতিরূপ তৈরি করবে GL_LINEAR
:
( কালো স্থানাঙ্কে এক্স এবং ওয়াইয়ের 1 টি বিয়োগ করুন, আমি পোস্ট করার আগে ছবিটি পড়ার প্রমাণ পাইনি ))
সীমান্ত স্টোরেজ হওয়ার কারণে, এই অ্যাটলাসে 4 256x256 টেক্সচার সংরক্ষণের জন্য 516x516 মাত্রা সহ একটি জমিন প্রয়োজন। অ্যাটলাস তৈরির সময় আপনি কীভাবে টেক্সেল ডেটা দিয়ে তা পূরণ করবেন তার উপর ভিত্তি করে সীমানাগুলি রঙিন কোড করা হয়:
- লাল = সরাসরি নীচে টেক্সেল দিয়ে প্রতিস্থাপন করুন
- হলুদ = সরাসরি উপরে টেক্সেল দিয়ে প্রতিস্থাপন করুন
- সবুজ = টেক্সেল দিয়ে সরাসরি বাম দিকে প্রতিস্থাপন করুন
- নীল = টেক্সেলটি সরাসরি ডানদিকে প্রতিস্থাপন করুন
কার্যকরভাবে এই বস্তাবন্দী উদাহরণে, অ্যাটলাসের প্রতিটি টেক্সচারটি আটলাসের একটি 258x258 অঞ্চল ব্যবহার করে, তবে আপনি সেই মানচিত্রটি দৃশ্যমান 256x256 অঞ্চলে সমন্বয় তৈরি করবেন। সীমানা টেক্সটগুলি কেবল তখনই ব্যবহৃত হয় যখন টেক্সচার ফিল্টারিংটি আটলাসে টেক্সচারের প্রান্তে করা হয় এবং যেভাবে সেগুলি নকশাকৃত GL_CLAMP_TO_EDGE
আচরণের নকশা করা হয় ।
আপনি যদি ভাবছিলেন, আপনি একই ধরণের পদ্ধতির সাহায্যে অন্যান্য ধরণের মোড়কের পদ্ধতিগুলি GL_REPEAT
প্রয়োগ করতে পারেন - টেক্সচার অ্যাটলাসে বাম / ডান এবং উপরের / নীচে বর্ডার টেক্সটগুলি এবং একটি চৌকস টেক্সচারের সমন্বয় গণিতকে কিছুটা বিনিময় করে প্রয়োগ করা যেতে পারে shader। এটি কিছুটা জটিল, তাই আপাতত এটি নিয়ে চিন্তা করবেন না। যেহেতু আপনি কেবল স্প্রিট শিটগুলি নিয়েই নিজেকে সীমাবদ্ধ করছেন GL_CLAMP_TO_EDGE
:)
GL_NEAREST
বাGL_LINEAR
রেন্ডারিংয়ের জন্য?