রেন্ডারিংয়ের বাহ্যরেখাগুলি, আপনি কেবলমাত্র এক ডজন অক্ষর রেন্ডার না করলে, আনুমানিক বক্ররেখায় প্রতিটি চরিত্রের জন্য প্রয়োজনীয় উল্লম্ব সংখ্যার কারণে "যান না" থেকে যায়। পরিবর্তে পিক্সেল শেডারে বেজিয়ার রেখাচিত্রগুলি মূল্যায়নের জন্য পন্থাগুলি পাওয়া গেছে, এগুলি সহজেই অ্যান্টায়ালাইজড না হওয়ার কারণে ভোগেন, যা দূরত্বের মানচিত্রের টেক্সচারযুক্ত কোয়াড ব্যবহার করে তুচ্ছ এবং শ্যাডারে বক্ররেখার মূল্যায়ন এখনও প্রয়োজনীয়তার তুলনায় কম বেশি ব্যয়বহুল।
"দ্রুত" এবং "গুণমান" এর মধ্যে সেরা বাণিজ্য বন্ধ হ'ল এখনও স্বাক্ষরিত দূরত্বের ক্ষেত্রের টেক্সচার সহ কোয়াডস টেক্সচার। এটি একটি সাধারণ সাধারণ টেক্সচারযুক্ত কোয়াড ব্যবহার করার চেয়ে খুব সামান্য ধীর, তবে এত বেশি নয়। অন্যদিকে গুণমানটি পুরোপুরি আলাদা বলপার্কে রয়েছে। ফলাফলগুলি সত্যই অত্যাশ্চর্য, আপনি যত তাড়াতাড়ি পেতে পারেন তত দ্রুত এবং গ্লোয়ের মতো প্রভাবগুলিও তুচ্ছভাবে যুক্ত করা সহজ। এছাড়াও, কৌশলটি পুরানো হার্ডওয়্যারে সুন্দরভাবে ডাউনগ্রেড করা যেতে পারে, যদি প্রয়োজন হয়।
কৌশলটির জন্য বিখ্যাত ভালভ কাগজটি দেখুন ।
কৌশলটি ধারণামূলকভাবে কীভাবে অন্তর্নিহিত পৃষ্ঠগুলি (বিপাক এবং এ জাতীয়) কাজ করে, যদিও এটি বহুভুজ উৎপন্ন করে না তার অনুরূপ। এটি পুরোপুরি পিক্সেল শেডারে চলে এবং টেক্সচার থেকে দূরত্ব ফাংশন হিসাবে নমুনাযুক্ত দূরত্ব গ্রহণ করে। নির্বাচিত প্রান্তিকের উপরে (সাধারণত 0.5) সমস্ত কিছু "ইন" হয়, অন্য সব কিছুই "আউট" থাকে। সবচেয়ে সহজ ক্ষেত্রে, 10 বছরের পুরানো নন-শ্যাডার-সক্ষম হার্ডওয়ারের ক্ষেত্রে, আলফা পরীক্ষার প্রান্তিক মান 0.5 তে নির্ধারণ করা সঠিক কাজটি করবে (যদিও কোনও বিশেষ প্রভাব এবং অ্যান্টিঅ্যালাইজিং ছাড়াই)।
যদি কেউ হরফ (ফোক্স বোল্ড) এর সাথে আরও কিছু ওজন যুক্ত করতে চায়, তবে একটি সামান্য ছোট থ্রেশহোল্ড কোনও একক লাইনের কোড পরিবর্তন না করে কৌশলটি সম্পাদন করবে (কেবলমাত্র আপনার "ফন্ট_ওয়েট" ইউনিফর্ম পরিবর্তন করুন)। একটি আভাসের প্রভাবের জন্য, একটি কেবল একটি প্রান্তিকের উপরে থাকা সমস্ত কিছুকে "ইন" এবং অন্যটির চেয়ে ছোট (ছোট) প্রান্তিকের উপরে "আউট, তবে গ্লোতে" এবং দুটির মধ্যে এলইআরপি হিসাবে বিবেচনা করে। অ্যান্টিয়ালাইজিং একইভাবে কাজ করে।
একক বিটের পরিবর্তে 8-বিট স্বাক্ষরিত দূরত্বের মানটি ব্যবহার করে, এই কৌশলটি আপনার টেক্সচার মানচিত্রের কার্যকর রেজোলিউশনকে প্রতিটি মাত্রায় 16 গুণ করে বাড়িয়ে তোলে (কালো এবং সাদা পরিবর্তে, সমস্ত সম্ভাব্য ছায়াগুলি ব্যবহার করা হয়, সুতরাং আমাদের 256 বার হয় একই স্টোরেজ ব্যবহার করে তথ্য)। আপনি যদি 16x ছাড়িয়েও বাড়িয়ে তোলেন তবে ফলাফলটি এখনও বেশ গ্রহণযোগ্য বলে মনে হচ্ছে। দীর্ঘ সরল রেখাগুলি অবশেষে কিছুটা ডাবলু হয়ে উঠবে, তবে কোনও আদর্শ "ব্লকি" নমুনা নিদর্শন থাকবে না।
পয়েন্টের বাইরে কোয়াড তৈরি করতে আপনি জ্যামিতি শেডার ব্যবহার করতে পারেন (বাস ব্যান্ডউইথ হ্রাস করুন), তবে সত্যি বলতে লাভগুলি বরং প্রান্তিক। জিপিজি 8-তে বর্ণিত বর্ণনামূলক রেন্ডারিংয়ের ক্ষেত্রেও একই কথা। ইনস্ট্যান্সিংয়ের ওভারহেডটি কেবল তখনই অনুশীলন করা হয় যদি আপনার কাছে আঁকার মতো অনেকগুলি পাঠ্য থাকে। লাভগুলি, আমার মতে, যুক্ত হওয়া জটিলতা এবং অ-ডাউনগ্রেডিবিলিটির কোনও সম্পর্ক নেই। এছাড়াও, আপনি হয় ধ্রুবক নিবন্ধকের পরিমাণের দ্বারা সীমাবদ্ধ, বা আপনাকে একটি টেক্সচার বাফার অবজেক্ট থেকে পড়তে হবে, যা ক্যাশে সংহতির জন্য অনুকূল নয় (এবং অভিপ্রায়টি শুরু করার জন্য অনুকূল ছিল!)।
একটি সাধারণ, সরল পুরাতন ভার্টেক্স বাফার ঠিক তত দ্রুত (সম্ভবত দ্রুত) যদি আপনি সময়ের সাথে আপলোডটি কিছুটা সময় নির্ধারণ করে থাকেন এবং গত 15 বছরে নির্মিত প্রতিটি হার্ডওয়্যারে চালিত হন। এবং এটি আপনার ফন্টের অক্ষরগুলির কোনও নির্দিষ্ট সংখ্যার মধ্যেই সীমাবদ্ধ নয়, বা রেন্ডার করতে কোনও নির্দিষ্ট অক্ষরেরও সীমাবদ্ধ নয়।
আপনি যদি নিশ্চিত হন যে আপনার ফন্টে 256 টিরও বেশি অক্ষর নেই তবে টেক্সচার অ্যারেগুলি জ্যামিতির শেডারের পয়েন্টগুলি থেকে কোয়াড তৈরি করার মতোভাবে বাস ব্যান্ডউইদথকে সরিয়ে ফেলার জন্য বিবেচনাযোগ্য। অ্যারে টেক্সচার ব্যবহার করার সময়, সমস্ত কোয়াডের টেক্সচার সমন্বয়গুলির অভিন্ন, ধ্রুবক s
এবং t
স্থানাঙ্ক থাকে এবং কেবল স্থানাঙ্কে পৃথক হয় r
, যা রেন্ডার করতে অক্ষর সূচকের সমান।
তবে অন্যান্য কৌশলগুলির মতো, পূর্ববর্তী প্রজন্মের হার্ডওয়্যারগুলির সাথে সামঞ্জস্যপূর্ণ না হওয়ার কারণে প্রত্যাশিত লাভগুলি প্রান্তিক।
দূরত্বের টেক্সচার তৈরি করার জন্য জোনাথন ডামারের একটি সহজ সরঞ্জাম রয়েছে: বিবরণ পৃষ্ঠা
আপডেট: প্রোগ্রামেবল ভার্টেক্স পুলিংয়ে (ডি। রোকোস, "ওপেনজিএল অন্তর্দৃষ্টিগুলি", পৃষ্ঠা 239)
হিসাবে আরও সম্প্রতি চিহ্নিত করা হয়েছে , জিপিইউগুলির নতুন প্রজন্মের শেডার থেকে ভার্টেক্স ডেটা টানানোর সাথে কোনও উল্লেখযোগ্য অতিরিক্ত বিলম্ব বা ওভারহেড নেই, স্ট্যান্ডার্ড ফিক্সড ফাংশন ব্যবহার করে একই করার তুলনায়।
এছাড়াও, জিপিইউগুলির সর্বশেষ প্রজন্মের আরও বেশি যুক্তিসঙ্গত আকারের সাধারণ উদ্দেশ্যযুক্ত এল 2 ক্যাশে রয়েছে (উদাহরণস্বরূপ এনভিডিয়া কেপলারের উপর 1536kiB), সুতরাং কেউ বাফার টেক্সচারের কোয়াড কোণগুলির জন্য এলোমেলো অফসেটগুলি টানানোর সময় বেমানান অ্যাক্সেস সমস্যার আশা করতে পারে a সমস্যা।
এটি একটি বাফার টেক্সচার থেকে ধ্রুবক ডেটা (যেমন চতুর্ভুজ আকার) টানার ধারণাটিকে আরও আকর্ষণীয় করে তোলে। একটি অনুমানমূলক বাস্তবায়ন এইভাবে পিসিআই এবং মেমরি স্থানান্তরগুলি, পাশাপাশি জিপিইউ মেমরিটিকে কমিয়ে আনতে পারে এর মতো পদ্ধতির সাথে:
- কেবলমাত্র একটি অক্ষর সূচক আপলোড করুন (প্রদর্শিত প্রতিটি চরিত্রের প্রতি একটিকে) এই সূচকটিতে পাস হওয়া একটি ভার্টেক্স শ্যাডারের একমাত্র ইনপুট হিসাবে
gl_VertexID
এবং জ্যামিতি শেডারে 4 পয়েন্টে বিস্তৃত করুন, এখনও অক্ষর সূচক এবং ভার্টেক্স আইডি রয়েছে (এটি "gl_primitiveID হবে ভার্টেক্স শ্যাডারে উপলব্ধ") একমাত্র বৈশিষ্ট্য হিসাবে, এবং রূপান্তর প্রতিক্রিয়াটির মাধ্যমে এটি ক্যাপচার করবে।
- এটি দ্রুত হবে, কারণ কেবলমাত্র দুটি আউটপুট অ্যাট্রিবিউট (জিএসে মূল অটল) রয়েছে এবং এটি উভয় পর্যায়ে অন্যথায় এটি "নো-অপ্ট" এর কাছাকাছি।
- একটি বাফার টেক্সচারকে বেঁধে রাখুন, যা ফন্টের প্রতিটি অক্ষরের জন্য, টেক্সচার্ড কোয়াডের শীর্ষস্থানটি বেস পয়েন্টের সাথে সম্পর্কিত (এগুলি মূলত "ফন্ট ম্যাট্রিক্স")। এই তথ্যটি কেবল নীচের বাম প্রান্তের অফসেট সংরক্ষণ করে এবং অক্ষ-সারিবদ্ধ বাক্সটির প্রস্থ এবং উচ্চতা এনকোড করে (অর্ধেক ভাসমান ধরে নেওয়া, এটি অক্ষরের প্রতি ধ্রুবক বাফারের 8 বাইট হবে - একটি সাধারণ 256 অক্ষর ফন্টটি L1 ক্যাশে 2kiB-তে পুরোপুরি ফিট করতে পারে)।
- বেসলাইনের জন্য একটি ইউনিফর্ম সেট করুন
- অনুভূমিক অফসেটের সাহায্যে একটি বাফার টেক্সচারটি আবদ্ধ করুন। এগুলি সম্ভবত জিপিইউতেও গণনা করা যেতে পারে, তবে এটি সিপিইউতে kind ধরণের জিনিসটির চেয়ে অনেক সহজ এবং দক্ষ। এছাড়াও, এটির জন্য আরও একটি প্রতিক্রিয়া পাসের প্রয়োজন হবে যা অন্য সিঙ্ক পয়েন্ট হবে।
- প্রতিক্রিয়া বাফার থেকে পূর্বের উত্পন্ন ডেটা রেন্ডার করুন, ভার্টেক্স শ্যাডারটি বেস পয়েন্টের অনুভূমিক অফসেটটি এবং বাফার অবজেক্টগুলি থেকে কোণার শিখরের অফসেটগুলি টেনে আনবে (আদিম আইডি এবং অক্ষর সূচক ব্যবহার করে)। জমা দেওয়া শীর্ষবিন্দুগুলির মূল ভার্টেক্স আইডিটি এখন আমাদের "প্রিমিটিভ আইডি" (মনে রাখবেন যে জিএসটি শীর্ষেকে কোয়াডে পরিণত করেছে)।
এটির মতো, যে কেউ আদর্শভাবে প্রয়োজনীয় ভার্টেক্স ব্যান্ডউইথটিকে 75% (মোড়িত) কমাতে পারে, যদিও এটি কেবল একটি একক লাইন রেন্ডার করতে সক্ষম হবে। যদি কেউ একটি ড্র কলটিতে বেশ কয়েকটি লাইন রেন্ডার করতে সক্ষম হতে চায় তবে একটি ইউনিফর্ম ব্যবহার না করে (ব্যান্ডউইথ লাভ আরও ছোট করে) বাফার টেক্সচারে বেসলাইন যুক্ত করা দরকার।
যাইহোক, এমনকি 75% হ্রাস অনুমান করে - যেহেতু "যুক্তিসঙ্গত" পরিমাণের পাঠ্য সংখ্যাটি প্রদর্শনের জন্য শীর্ষস্থানীয় ডেটা কেবল কোথাও 50-100kiB (যা কার্যত শূন্য)কোনও জিপিইউ বা পিসিআই বাসে) - আমি এখনও সন্দেহ করি যে যুক্ত জটিলতা এবং পিছনে-সামঞ্জস্য হারাতে সমস্যাটি সত্যই মূল্যবান। শূন্য 75% কমানো এখনও শূন্য। আমি স্বীকার করেছি যে উপরোক্ত পদ্ধতির চেষ্টা করা হয়নি, এবং সত্যই যোগ্য বক্তব্য দেওয়ার জন্য আরও গবেষণার প্রয়োজন হবে। তবে এখনও, যদি না কেউ সত্যই অত্যাশ্চর্য পারফরম্যান্স পার্থক্য প্রদর্শন করতে পারে ("সাধারণ" পরিমাণে কয়েক বিলিয়ন অক্ষর ব্যবহার করে না)! একটি "শিল্প সমাধান রাষ্ট্র" অংশ হিসাবে বিবেচনা করা। এটি সহজ এবং সোজা, এটি কাজ করে এবং এটি ভালভাবে কাজ করে।
উপরে " ওপেনজিএল অন্তর্দৃষ্টি " ইতিমধ্যে রেফারেন্স থাকা সত্ত্বেও , স্টেফান গুস্তাভসনের "2 ডি শেপ রেন্ডারিং বাই ডিস্টেন্স ফিল্ডস" অধ্যায়টিও উল্লেখ করা ভাল যা দূরত্বের ক্ষেত্রের রেন্ডারিংকে বিশদভাবে ব্যাখ্যা করে।
২০১ 2016 আপডেট করুন:
এদিকে, বেশ কয়েকটি অতিরিক্ত কৌশল রয়েছে যার লক্ষ্যটি কোণার বৃত্তাকারগুলি সরিয়ে ফেলার লক্ষ্য যা চূড়ান্ত বিবর্ধনে বিরক্তিকর হয়ে ওঠে।
একটি পদ্ধতির মধ্যে কেবল দূরত্বের ক্ষেত্রগুলির পরিবর্তে ছদ্ম-দূরত্বের ক্ষেত্রগুলি ব্যবহার করা হয় (পার্থক্যটি হ'ল প্রকৃত রূপরেখার চেয়ে দূরত্বটি সবচেয়ে কম দূরত্ব নয়, তবে বাহ্যরেখা বা প্রান্তে ছড়িয়ে পড়া একটি কাল্পনিক রেখার সাথে)। এটি কিছুটা ভাল এবং একই পরিমাণে টেক্সচার মেমোরি ব্যবহার করে একই গতিতে (অভিন্ন শ্যাডার) চলে।
আরেকটি পদ্ধতির তিনটি চ্যানেলের টেক্সচারের বিবরণ এবং গিথুবে উপলভ্য বাস্তবায়নের মধ্যমে তিনটি ব্যবহার করে । এটি উদ্দেশ্যটি সমাধান করতে আগে এবং ব্যবহৃত হ্যাকগুলির উন্নতি হতে পারে। ভাল মানের, সামান্য, প্রায় লক্ষণীয় নয়, ধীর, তবে তেত্র মেমরির তিনগুণ বেশি ব্যবহার করে uses এছাড়াও, অতিরিক্ত প্রভাব (যেমন গ্লো) সঠিকভাবে পাওয়া শক্ত।
শেষ অবধি, প্রকৃত বেজিয়ার কার্ভগুলি অক্ষর তৈরি করে সংরক্ষণ করা এবং একটি খণ্ডের শেডারে তাদের মূল্যায়ন করা ব্যবহারিক হয়ে উঠেছে , কিছুটা নিকৃষ্ট পারফরম্যান্সের সাথে (তবে এটি এতটা সমস্যা নয় যে) এবং সর্বোচ্চ বিবর্ধনেও অত্যাশ্চর্য ফলাফল।
ওয়েবজিএল ডেমো এখানে উপলব্ধ রিয়েল টাইমে এই কৌশলটি সহ একটি বড় পিডিএফ রেন্ডার করছে ।