ভার্চুয়াল টেক্সচারটি আসলে কীভাবে দক্ষ হতে পারে?


27

রেফারেন্সের জন্য, আমি যা উল্লেখ করছি তা হ'ল আইডিটেক 5 এর মেগা টেকচার প্রযুক্তির সাথে প্রবর্তিত কৌশলটির (জেনারিক নাম) প্রথমে (আমার বিশ্বাস) । ভিডিওটি কীভাবে কাজ করে তাড়াতাড়ি নজর দেওয়ার জন্য এখানে দেখুন ।

আমি ইদানীং এর সাথে সম্পর্কিত কিছু কাগজপত্র এবং প্রকাশনাগুলি স্কিম করে চলেছি এবং যা আমি বুঝতে পারছি না এটি সম্ভবত কীভাবে দক্ষ হতে পারে। ভার্চুয়াল টেক্সচারের স্থানাঙ্কগুলিতে "গ্লোবাল টেক্সচার পৃষ্ঠা" স্থান থেকে ইউভি স্থানাঙ্কগুলির ধ্রুব পুনঃ গণনার প্রয়োজন হয় না? এবং কীভাবে এই প্রতিরোধটি জ্যামিতিকে সম্পূর্ণরূপে ব্যাচিংয়ে সর্বাধিক প্রচেষ্টা করে না? এটি কীভাবে যথেচ্ছ জুমকে অনুমতি দেয়? এক পর্যায়ে এটির জন্য বহুভুজগুলি উপ-বিভাজনের প্রয়োজন হবে না?

আমি কেবল বুঝতে পারি না এমন অনেক কিছুই রয়েছে এবং আমি এই বিষয়ে সহজেই সহজেই পৌঁছনীয় সংস্থানগুলি খুঁজে পেতে অক্ষম।

উত্তর:


20

সংক্ষিপ্ত বিবরণ

ভার্চুয়াল টেক্সচারিং (ভিটি) বা স্পার্স ভার্চুয়াল টেক্সচারের মূল কারণটি একে কখনও কখনও বলা হয়, এটি একটি মেমরি অপ্টিমাইজেশন হিসাবে। জিনিসটির সংক্ষিপ্তসারটি হ'ল ভিডিও মেমোরিতে কেবল প্রকৃত টেক্সটগুলি (পৃষ্ঠাগুলি / টাইল হিসাবে সাধারণীকরণ করা) স্থানান্তর করা যা আপনার রেন্ডার করা ফ্রেমের প্রয়োজন হতে পারে। সুতরাং এটি অফলাইনে বা ধীর স্টোরেজ (এইচডিডি, অপটিক্যাল-ডিস্ক, ক্লাউড) এর চেয়ে অনেক বেশি টেক্সচার ডেটা রাখার অনুমতি দেবে যা অন্যথায় ভিডিও মেমরি বা এমনকি মূল মেমরির সাথে ফিট করে। আপনি যদি আধুনিক অপারেটিং সিস্টেমগুলি দ্বারা ব্যবহৃত ভার্চুয়াল মেমোরির ধারণাটি বুঝতে পারছেন তবে এটির सारগুলিতে এটি একই জিনিস (নামটি দুর্ঘটনাক্রমে দেওয়া হয় না)।

ভিটি-র জন্য ইউভিগুলিকে পুনর্নির্মাণের প্রয়োজন হয় না যে আপনি প্রতিটি ফ্রেম জাল সরবরাহ করার আগে তা করতে চান, তারপরে ভার্টেক্স তথ্য পুনরায় জমা দিন, তবে আগত ইউভিগুলি থেকে পরোক্ষ অনুসন্ধান করার জন্য ভার্টেক্স এবং ফ্রেগমেন্ট শেডারগুলিতে কিছু যথেষ্ট কাজ প্রয়োজন। তবে ভাল প্রয়োগে এটি প্রয়োগের জন্য সম্পূর্ণ স্বচ্ছ হওয়া উচিত যদি এটি ভার্চুয়াল টেক্সচার বা traditionalতিহ্যবাহী ব্যবহার করে। আসলে, বেশিরভাগ সময় কোনও অ্যাপ্লিকেশন দুটি ধরণের টেক্সচার, ভার্চুয়াল এবং traditionalতিহ্যগত মিশ্রিত করে।

ব্যাচিং তাত্ত্বিকভাবে খুব ভালভাবে কাজ করতে পারে, যদিও আমি এর বিবরণটি কখনও দেখিনি। যেহেতু জ্যামিতির গোষ্ঠীকরণের জন্য সাধারণ মানদণ্ডগুলি টেক্সচারগুলি এবং ভিটি দিয়ে, দৃশ্যের প্রতিটি বহুভুজ একই "অসীম বৃহত" জমিন ভাগ করতে পারে, তাত্ত্বিকভাবে, আপনি 1 ড্র কল সহ পুরো দৃশ্যের অঙ্কন অর্জন করতে পারেন। কিন্তু বাস্তবে, অন্যান্য বিষয়গুলি এটিকে ব্যবহারিক করে তোলে play

ভিটি সহ সমস্যাগুলি

জুম ইন / আউট এবং হঠাৎ ক্যামেরা চলাচল কোনও ভিটি সেটআপে পরিচালনা করা সবচেয়ে শক্ত কাজ। এটি একটি স্থির দৃশ্যের জন্য খুব আবেদনময়ী দেখতে পারে, তবে জিনিসগুলি চলতে শুরু করার পরে, আপনি বাহ্যিক স্টোরেজের জন্য স্ট্রিমের চেয়ে আরও বেশি টেক্সচার পৃষ্ঠাগুলি / টাইলগুলির অনুরোধ করা হবে। অ্যাসিঙ্ক ফাইল আইও এবং থ্রেডিং সহায়তা করতে পারে, তবে এটি যদি কোনও গেমের মতো বাস্তব-সময় ব্যবস্থা হয় তবে হাই-রেজাল্টগুলি আগত না হওয়া পর্যন্ত আপনাকে নিম্ন রেজোলিউশন টাইলস সহ কয়েকটি ফ্রেমের জন্য রেন্ডার করতে হবে every অস্পষ্ট জমিনের ফলস্বরূপ। এখানে রূপোর কোনও বুলেট নেই এবং এটিই কৌশলটির সবচেয়ে বড় সমস্যা, আইএমও।

ভার্চুয়াল টেক্সচারিং কোনও স্বাচ্ছন্দ্যকে কোনও সহজ উপায়ে পরিচালনা করে না, তাই স্বচ্ছ বহুভুজগুলির জন্য তাদের জন্য আলাদা traditionalতিহ্যবাহী রেন্ডারিং পথ প্রয়োজন।

সব মিলিয়ে ভিটি আকর্ষণীয়, তবে আমি সবার জন্য এটির প্রস্তাব দেব না। এটি ভালভাবে কাজ করতে পারে তবে এটি কার্যকর করা এবং অনুকূলকরণ করা শক্ত, এছাড়াও আমার স্বাদের জন্য খুব বেশি কোণার কেস এবং কেস-নির্দিষ্ট টুইটগুলি দরকার। তবে বৃহত ওপেন-ওয়ার্ল্ড গেমস বা ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ্লিকেশনগুলির জন্য, সমস্ত সামগ্রীতে উপলব্ধ হার্ডওয়ারের সাথে ফিট করার একমাত্র সম্ভাব্য উপায়। অনেক কাজ করে, এটি সীমিত হার্ডওয়্যারেও মোটামুটি দক্ষতার সাথে চালানো যায়, যেমন আমরা আইডি এর রেজের PS3 এবং XBOX360 সংস্করণে দেখতে পারি ।

বাস্তবায়ন

আমি ওপেনজিএল-ইএস এর সাথে আইওএসে একটি নির্দিষ্ট ডিগ্রিতে ভিটি কাজ করতে সক্ষম হয়েছি। আমার বাস্তবায়ন "শিপযোগ্য" নয়, তবে আমি যদি ইচ্ছা করে থাকতাম এবং সংস্থান থাকতাম তবে আমি তা এটি করতে পারতাম। আপনি এখানে সোর্স কোডটি দেখতে পারেন , টুকরাগুলি কীভাবে একসাথে ফিট হবে সে সম্পর্কে এটি আরও ভাল ধারণা পেতে সহায়তা করতে পারে। আইওএস সিমটিতে একটি ডেমো চলমান এখানে Here এটি দেখতে খুব অলস দেখায় কারণ সিমুলেটরটি শেডগুলি অনুকরণ করতে ভয়ঙ্কর, তবে এটি কোনও ডিভাইসে সহজেই চলে।

নিম্নলিখিত চিত্রটি আমার বাস্তবায়নে সিস্টেমের প্রধান উপাদানগুলির রূপরেখা দেয়। এটি শানের এসভিটি ডেমো (লিঙ্ক ডাউন বেলো) থেকে কিছুটা পৃথক, তবে এটি প্রথম জিপিইউ প্রো বইয়ের (লিঙ্ক বেলো) পাওয়া সিউডিএর সাহায্যে কাগজ ত্বরণী ভার্চুয়াল টেক্সচারের মাধ্যমে উপস্থাপিত একটিটির সাথে স্থাপত্যের নিকটবর্তী ।

ভার্চুয়াল টেক্সচারিং সিস্টেম

  • Page Filesভার্চুয়াল টেক্সচারগুলি, প্রাক প্রস্তুতি হিসাবে ইতিমধ্যে টাইলস (একে পাতা) কেটে গেছে, তাই যখনই প্রয়োজন হয় তারা ডিস্ক থেকে ভিডিও মেমোরিতে স্থানান্তরিত করতে প্রস্তুত। একটি পৃষ্ঠা ফাইলটিতে মিপম্যাপগুলির পুরো সেটও রয়েছে, যাকে ভার্চুয়াল মাইপম্যাপসও বলা হয় ।

  • Page Cache Managerঅঙ্গবিন্যাস Page Tableএবং Page Indirectionটেক্সচারের একটি অ্যাপ্লিকেশন সাইড প্রতিনিধিত্ব রাখে । যেহেতু অফলাইন স্টোরেজ থেকে মেমোরিতে কোনও পৃষ্ঠা সরিয়ে নেওয়া ব্যয়বহুল, তাই ইতিমধ্যে উপলব্ধ যেটি পুনরায় লোড করা এড়াতে আমাদের একটি ক্যাশে প্রয়োজন। এই ক্যাশেটি অতি সাধারণভাবে সম্প্রতি ব্যবহৃত ব্যবহৃত (এলআরইউ) ক্যাশে। ক্যাশে হ'ল দৈহিক অঙ্গবিন্যাসকে তথ্যের নিজস্ব স্থানীয় প্রতিনিধিত্বের সাথে আপ-টু-ডেট রাখার জন্যও দায়বদ্ধ উপাদান।

  • Page Providerএকটি ASYNC কাজ কিউ পৃষ্ঠাগুলি দৃশ্যের একটি প্রদত্ত দৃশ্য জন্য প্রয়োজনীয় আনা এবং তাদের ক্যাশে পাঠাতে হবে।

  • Page Indirectionজমিন ভার্চুয়াল জমিন প্রতিটি পৃষ্ঠা / টালি জন্য এক পিক্সেল, যে অন্তর্মুখী Uvs ম্যাপ করবে সঙ্গে একটি জমিন হয় Page Tableক্যাশে জমিন প্রকৃত বস্তুমুখী পদ্ধতি ডাটা রয়েছে। এই টেক্সচারটি বেশ বড় আকার ধারণ করতে পারে, সুতরাং এটি অবশ্যই আরজিবিএ 8: 8: 8: 8 বা আরজিবি 5: 6: 5 এর মতো কিছু কমপ্যাক্ট ফর্ম্যাট ব্যবহার করতে হবে।

তবে আমরা এখানে একটি মূল টুকরা মিস করছি এবং এটি কীভাবে নির্ধারণ করতে হবে যে কোনও পৃষ্ঠাগুলিকে ক্যাশে থেকে স্টোরেজ থেকে লোড করা উচিত এবং ফলস্বরূপ Page Table। সেখানেই প্রতিক্রিয়া পাস এবং Page Resolverপ্রবেশ করুন।

প্রতিক্রিয়া পাস হ'ল একটি প্রাক-রেন্ডার, একটি কাস্টম শেডার এবং অনেক কম রেজোলিউশনে, এটি প্রয়োজনীয় পৃষ্ঠাগুলির আইডিগুলি রঙিন ফ্রেমবাফারে লিখবে। উপরের কিউব এবং গোলকের বর্ণিল প্যাচওয়ার্কটি হ'ল আরজিবিএ রঙ হিসাবে এনকোড হওয়া প্রকৃত পৃষ্ঠা সূচক। এই প্রাক-পাস রেন্ডারিংটি পরে মূল মেমোরিতে পড়ে এবং Page Resolverপৃষ্ঠার সূচিগুলি ডিকোড করার জন্য প্রক্রিয়া করে এবং এর সাথে নতুন অনুরোধগুলিকে ফায়ার করে Page Provider

ফিডব্যাক প্রাক-পাসের পরে, ভিটি লুকিয়াল শেডারগুলির সাথে দৃশ্যটি সাধারণত রেন্ডার করা যায়। তবে মনে রাখবেন যে আমরা নতুন পৃষ্ঠার অনুরোধটি শেষ হওয়ার জন্য অপেক্ষা করি না, এটি ভয়াবহ হবে, কারণ আমরা কেবলমাত্র সিঙ্ক্রোনাস ফাইল আইওতে ব্লক করব। অনুরোধগুলি অবিচ্ছিন্ন এবং চূড়ান্ত দৃশ্যটি রেন্ডার হওয়ার পরে প্রস্তুত হতে পারে। যদি সেগুলি প্রস্তুত, মিষ্টি তবে তা না থাকলে, আমরা সর্বদা ফ্যালব্যাক হিসাবে ক্যাশে একটি নিম্ন-রেজাল্ট মিপম্যাপের একটি লকড পৃষ্ঠা রাখি, সুতরাং আমাদের ব্যবহারের জন্য সেখানে কিছু টেক্সচার ডেটা রয়েছে, তবে এটি ঝাপসা হয়ে যাচ্ছে।

অন্যদের চেক আউট মূল্যবান সংস্থান

কম্পিউটার গ্রাফিক্সে ভিটি এখনও কিছুটা উত্তেজনাপূর্ণ বিষয়, সুতরাং প্রচুর পরিমাণে ভাল উপাদান উপলব্ধ রয়েছে, আপনার আরও অনেক কিছু খুঁজে পেতে সক্ষম হওয়া উচিত। এই উত্তরে আমি আরও কিছু যুক্ত করতে পারলে বিনা দ্বিধায় জিজ্ঞাসা করুন। আমি এই বিষয়টিতে কিছুটা মরিচা, গত এক বছর ধরে এ সম্পর্কে খুব বেশি কিছু পড়িনি, তবে স্মৃতিতে আবার ঘুরে দেখার পক্ষে এটি সর্বদাই ভাল :)


আরে, দুর্দান্ত উত্তরের জন্য আপনাকে ধন্যবাদ। আমি জানি এটি সাধারণভাবে উদ্বেগজনক, তবে আমার বিভিন্ন সমস্যা রয়েছে, তাই আমি বেশিরভাগ ক্ষেত্রে কেবল বিষয়গুলির মধ্য দিয়েই স্কিম করতাম - ভবিষ্যতের বিষয়গুলির বিষয়ে একটি স্বজ্ঞাত ধারণা পেতে (আমি ভয় করি সঠিকভাবে জিনিসগুলি শিখতে এবং প্রয়োগ করা এই মুহুর্তের জন্য আমার নাগালের বাইরে) ) - যাইহোক, যদি সম্ভব হয় তবে আপনি কি সিউডোকোড উদাহরণ পোস্টের পোস্ট প্রক্রিয়াটি নিজেই রূপরেখা হিসাবে বর্ণনা করতে পারেন, আদর্শভাবে, তবে অগত্যা চিত্রিত?
লামেজেডন

1
@ লামাডেডন, এটি ঠিক তখনই ঘটে যে আমার হাতে একটি ডায়াগ্রাম ছিল;) আমি ভয় করি যে সিউডো কোড সরবরাহ করা কিছুটা কঠিন হতে চলেছে, যেহেতু এটিতে বেশ কয়েকটি বাস্তব কোড রয়েছে। তবে আমি আশা করি প্রসারিত উত্তরটি কৌশলটির সাধারণ ধারণা দিতে সহায়তা করবে।
গ্ল্যাম্পার্ট

3
এটি লক্ষণীয় যে বেশিরভাগ আধুনিক হার্ডওয়্যার এখন প্রোগ্রামেবল পৃষ্ঠা সারণীগুলি প্রকাশ করে, পুনর্নির্দেশের টেক্সচারের প্রয়োজনীয়তা বাদ দিয়ে। এটি ডাইরেক্টেক্স 12 রিজার্ভড রিসোর্সগুলির মাধ্যমে উন্মুক্ত করা হয়েছে , যা ডাইরেক্টএক্স 11 টাইল্ড রিসোর্স বা ওপেনগল স্পার্স টেক্সচারের উপর নির্ভর করে
মজবয়েস

1
@ লামাজেডডন, কমপিউটিং এবং মেমরিটিকে যতটা সম্ভব সংরক্ষণ করার জন্য প্রতিক্রিয়া প্রি-পাসটি নিচু জায়গায় করা যেতে পারে, যেহেতু কোনও পৃষ্ঠার পিক্সেলগুলি সাধারণত পুনরাবৃত্তি করে (আপনি আমার ডেমোতে বড় রঙিন স্কোয়ারগুলি লক্ষ্য করতে পারেন)। আপনি ঠিক বলেছেন যে এটি শেষ পর্যন্ত এটির মতো দৃশ্যমান পৃষ্ঠাটি মিস করতে পারে তবে এটি সাধারণত একটি বড় ভিজ্যুয়াল প্রভাব ফেলতে পারে না কারণ সিস্টেমে সর্বদা সর্বনিম্ন সর্বনিম্ন মাইম্যাপকে পুরো ক্যাটিতে উপলব্ধ রাখতে হবে। আমি যে দ্বিতীয় পেপারটি লিঙ্ক করেছি তাতে পরিশিষ্টে সমস্ত ছায়াময় উদাহরণ রয়েছে, আপনি আমার প্রকল্পের জন্য রেপোও দেখতে পারেন, সেগুলি একই রকম।
গ্ল্যাম্পার্ট

1
@ গ্ল্যাম্পার্ট আহ, আমি দেখছি; এটা বোধগম্য. তবুও, আমি মনে করি পরিবহন ব্যবস্থা পরিচালনা করার জন্য প্রচুর বিকল্প রয়েছে; পৃষ্ঠার আইডি পাসে আপনি একসাথে যেতে পারেন (সুতরাং হিস্টোগ্রামিং সমস্ত পৃষ্ঠাগুলি দেখতে পাবে, যদি না প্রচুর পরিমাণে স্বচ্ছ স্তর উপস্থিত থাকে), বা কে-বাফার পদ্ধতির ব্যবহার করতে পারেন , বা কেবল স্বচ্ছ টেক্সচার রেসিডেন্সিও অবলম্বন করতে পারেন যার উপর অবজেক্টগুলি কাছে রয়েছে ক্যামেরা (তাদের প্রতিক্রিয়া পাসে রেন্ডার করার বিপরীতে)।
নাথান রিড

11

ভার্চুয়াল টেক্সচারিং টেক্সচার অ্যাটলেসের যৌক্তিক চরম extreme


টেক্সচার অ্যাটলাস হ'ল একক দৈত্য টেক্সচার যা এর অভ্যন্তরে পৃথক মেসের জন্য টেক্সচার ধারণ করে:

টেক্সচার অ্যাটলাস উদাহরণ

টেক্সচার অ্যাটলেসগুলি এই কারণেই জনপ্রিয় হয়ে ওঠে যে টেক্সচার পরিবর্তনের ফলে জিপিইউতে একটি সম্পূর্ণ পাইপলাইন ফ্লাশ হয়। মেস তৈরি করার সময়, ইউভিগুলি সংকুচিত / স্থানান্তরিত হয় যাতে তারা পুরো টেক্সচার অ্যাটলাসের সঠিক 'অংশ' উপস্থাপন করে।

মন্তব্যে @ নাথান-রিড যেমন উল্লেখ করেছেন, টেক্সচার অ্যাটলেসের অন্যতম প্রধান অসুবিধাগুলি পুনরাবৃত্তি, বাতা, সীমান্ত ইত্যাদির মতো মোড়ানো পদ্ধতিগুলি হারাচ্ছে এছাড়াও, যদি টেক্সচারগুলির চারপাশে পর্যাপ্ত সীমানা না থাকে তবে আপনি দুর্ঘটনাক্রমে ফিল্টারিং করার সময় সংলগ্ন টেক্সচার থেকে নমুনা। এর ফলে রক্তক্ষরণে নিদর্শনগুলি হতে পারে।

টেক্সচার অ্যাটলেসের একটি বড় সীমাবদ্ধতা রয়েছে: আকার। গ্রাফিক্স API গুলি কত বড় টেক্সচার হতে পারে তার উপর নরম সীমা রাখে। বলেছিল, গ্রাফিক্সের স্মৃতি কেবল এত বড়। সুতরাং আপনার ভি-র্যামের আকার অনুসারে জমিনের আকারের ক্ষেত্রেও একটি কঠোর সীমা রয়েছে। ভার্চুয়াল টেক্সচারগুলি ভার্চুয়াল মেমরি থেকে ধারণাগুলি ধার করে এই সমস্যার সমাধান করে ।

ভার্চুয়াল টেক্সচারগুলি এই সত্যটিকে কাজে লাগায় যে বেশিরভাগ দৃশ্যে, আপনি কেবল সমস্ত টেক্সচারের একটি ছোট্ট অংশ দেখতে পান। সুতরাং, কেবলমাত্র টেক্সচারের উপসেটটি ভ্র্যামে থাকা দরকার। বাকিগুলি মূল র‍্যামে বা ডিস্কে থাকতে পারে।

এটি বাস্তবায়নের কয়েকটি উপায় রয়েছে তবে আমি শন ব্যারেট তার জিডিসির আলোচনায় বর্ণিত বাস্তবায়নটি ব্যাখ্যা করব । (যা আমি দেখার জন্য সুপারিশ করি)

আমাদের তিনটি প্রধান উপাদান রয়েছে: ভার্চুয়াল টেক্সচার, শারীরিক টেক্সচার এবং লুকিং টেবিল।

ভার্চুয়াল টেক্সচার

ভার্চুয়াল টেক্সচারটি তাত্ত্বিক মেগা অ্যাটলাসকে উপস্থাপন করে যদি আমাদের কাছে সবকিছু ফিট করার জন্য পর্যাপ্ত পরিমাণে ভ্র্যাম থাকে। এটি আসলে কোথাও মেমরিতে বিদ্যমান নেই। শারীরিক টেক্সচারটি আমাদের কাছে ভি্রামে আসলে কী পিক্সেল ডেটা উপস্থাপন করে। লুক টেবিলটি হ'ল উভয়ের মধ্যে ম্যাপিং। সুবিধার জন্য, আমরা তিনটি উপাদানকে সমান আকারের টাইলস বা পৃষ্ঠাগুলিতে বিভক্ত করি।

সন্ধানের টেবিলটি শারীরিক জমিনে টাইলের উপরের-বাম কোণার অবস্থান সঞ্চয় করে। সুতরাং, পুরো ভার্চুয়াল টেক্সচারকে একটি UV দেওয়া, আমরা কীভাবে শারীরিক টেক্সচারের জন্য সংশ্লিষ্ট UV পাই?

প্রথমত, আমাদের দৈহিক জমিনের মধ্যে পৃষ্ঠার অবস্থানটি সন্ধান করতে হবে। তারপরে আমাদেরকে পৃষ্ঠার মধ্যে ইউভির অবস্থান গণনা করতে হবে। অবশেষে আমরা এই দুটি অফসেট একসাথে শারীরিক টেক্সচারের মধ্যে ইউভির অবস্থান পেতে পারি

float2 pageLocInPhysicalTex = ...
float2 inPageLocation = ...
float2 physicalTexUV = pageLocationInPhysicalTex + inPageLocation;


পৃষ্ঠা লোক গণনা ফিজিক্যালটেক্স

যদি আমরা ভার্চুয়াল টেক্সচারে টাইলসের সংখ্যার মতো একই আকারের আকার তৈরি করি, আমরা কেবল নিকটবর্তী প্রতিবেশী নমুনা সহ লুকিং টেবিলটি নমুনা করতে পারি এবং আমরা শারীরিক টেক্সচারের মধ্যে পৃষ্ঠার উপরের-বাম কোণটি পেয়ে যাব।

float2 pageLocInPhysicalTex = lookupTable.Sample(virtTexUV, nearestNeighborSampler);


InPageLocation গণনা করা হচ্ছে

ইনপেজলোকেশন হ'ল একটি ইউভি স্থানাঙ্ক যা পুরো টেক্সচারের উপরের-বামের চেয়ে পৃষ্ঠার উপরের-বামের সাথে সম্পর্কিত।

এটি গণনা করার একটি উপায় হ'ল পৃষ্ঠার উপরের বাম দিকের UV কে বিয়োগ করে পৃষ্ঠার আকার পর্যন্ত স্কেল করে। তবে এটি গণিতের বেশ কিছুটা। পরিবর্তে, আমরা কীভাবে আইইইই ভাসমান পয়েন্ট উপস্থাপন করা হয় তা কাজে লাগাতে পারি। আইইইই ভাসমান বিন্দু বেস 2 ভগ্নাংশের একটি সিরিজ দ্বারা সংখ্যার ভগ্নাংশ অংশ সঞ্চয় করে।

এখানে চিত্র বর্ণনা লিখুন

এই উদাহরণে, নম্বরটি হ'ল:

number = 0 + (1/2) + (1/8) + (1/16) = 0.6875

এখন আসুন ভার্চুয়াল টেক্সচারের সরলিকৃত সংস্করণটি দেখুন:

সাধারণ ভার্চুয়াল টেক্সচার

যদি আমরা টেক্সচারের বাম অর্ধেক বা ডানদিকে থাকি তবে 1/2 বিট আমাদের জানায়। ১/৪ বিট আমাদের জানায় যে আমরা অর্ধেকের কোন চতুর্থাংশ রয়েছি this উদাহরণস্বরূপ, যেহেতু টেক্সচারটি 16 বা 4 ভাগে বিভক্ত হয়েছে, এই প্রথম দুটি বিট আমাদের কী পৃষ্ঠায় রয়েছে তা জানিয়ে দেয় remaining বিটস আমাদের পৃষ্ঠার ভিতরে অবস্থানটি বলে।

এক্সপ 2 () দিয়ে ভাসাটি স্থানান্তর করে এবং ফ্র্যাক্ট () দিয়ে এগুলি সরিয়ে দিয়ে আমরা বাকী বিটগুলি পেতে পারি

float2 inPageLocation = virtTexUV * exp2(sqrt(numTiles));
inPageLocation = fract(inPageLocation);

যেখানে numTiles টেক্সচারের পাশে প্রতি টাইল সংখ্যা প্রদান করে একটি int2। আমাদের উদাহরণস্বরূপ, এটি হবে (4, 4)

তাহলে গ্রিন পয়েন্টের জন্য ইনপেজলোকেশন গণনা করা যাক, (x, y) = (0.6875, 0.375)

inPageLocation = float2(0.6875, 0.375) * exp2(sqrt(int2(4, 4));
               = float2(0.6875, 0.375) * int2(2, 2);
               = float2(1.375, 0.75);

inPageLocation = fract(float2(1.375, 0.75));
               = float2(0.375, 0.75);

আমাদের শেষ হওয়ার আগে একটি শেষ কাজ। বর্তমানে, ইনপেজলোকেশন ভার্চুয়াল টেক্সচার 'স্পেস' এর একটি ইউভি সমন্বয়ক। তবে, আমরা দৈহিক জমিন 'স্পেস' এর জন্য একটি ইউভি সমন্বয় চাই want এটি করার জন্য আমাদের কেবলমাত্র ভার্চুয়াল টেক্সচারের আকারের সাথে শারীরিক জমিনের আকারের অনুপাত অনুসারে পেজলোকেশনটি স্কেল করতে হবে

inPageLocation *= physicalTextureSize / virtualTextureSize;



সুতরাং সমাপ্ত ফাংশনটি হ'ল:

float2 CalculatePhysicalTexUV(float2 virtTexUV, Texture2D<float2> lookupTable, uint2 physicalTexSize, uint2 virtualTexSize, uint2 numTiles) {
    float2 pageLocInPhysicalTex = lookupTable.Sample(virtTexUV, nearestNeighborSampler);

    float2 inPageLocation = virtTexUV * exp2(sqrt(numTiles));
    inPageLocation = fract(inPageLocation);
    inPageLocation *= physicalTexSize / virtualTexSize;

    return pageLocInPhysicalTex + inPageLocation;
}

আমি নই, আমি ভার্চুয়াল টেক্সচারের কথা উল্লেখ করছি, যা আইডিটেক 5 এর মেগা টেকচার প্রযুক্তি হিসাবে সর্বাধিক পরিচিত । আরো দেখুন এই এবং এই । আমি এটি অনেকগুলি আধুনিক ইঞ্জিনের রেন্ডারিং পাইপলাইনগুলির সংক্ষিপ্ত বিবরণে এবং শ্যাডোম্যাপগুলির জন্য অনুরূপ পদ্ধতির ব্যবহার করা কয়েকটি গবেষণাপত্রে উল্লেখ করেছি। এটি টেক্সচার অ্যাটলেসগুলির সাথে প্রচলিত রয়েছে, হ্যাঁ, এটি সেগুলি একভাবে ব্যবহার করে, তবে আমি এটি টেক্সচার অ্যাটলাসের সাথে বিভ্রান্ত করছি না।
লামেজেডন

আহা। লিঙ্কগুলির জন্য ধন্যবাদ। আপনি কি তাদের প্রশ্নের সাথে যুক্ত করতে পারেন? আমি সেই অনুযায়ী আমার উত্তর আপডেট করব
রিচিস্যামস

3
আইএমও, সাধারণ টেক্সচার অ্যাটলেসের প্রধান অপূর্ণতা (ভার্চুয়াল টেক্সচার নয়) আপনি পুনরাবৃত্তি এবং ক্ল্যাম্পের মতো মোড়ানো মোডগুলি হারিয়ে ফেলেন এবং ফিল্টারিং / মিপম্যাপিংয়ের কারণে রক্তপাত ঘটে - ভাসমান-পয়েন্ট যথার্থতা নয়। আমি ভাসা সংক্ষিপ্ত বিবরণ সাধারণ (অ-ভার্চুয়াল) জমিনের জন্য সমস্যা হয়ে উঠতে দেখে অবাক হব; এমনকি একটি 16 কে টেক্সচার (বর্তমান এপিআই দ্বারা অনুমোদিত সর্বাধিক) সত্যিই ফ্লোটের নির্ভুলতা টানতে যথেষ্ট বড় নয়।
নাথান রিড

@ রিচিস্যামস বিটিডব্লু, আমি মনে করি আপনার উত্তরটি একটি ভাল, এমনকি যদি অন্য কোনও প্রশ্ন থেকে যায়। আপনার একটি প্রশ্নোত্তর পোস্ট করা উচিত।
লামেজেডন

হুম, এটি এটি বেশ ভালভাবে ব্যাখ্যা করে, যদিও আমি সত্যিই বুঝতে পারি না যে এটি কীভাবে এমআইপি স্তরের সাথে কাজ করে। আমি আশা করি আমি আমার নির্দিষ্ট সমস্যাটি বুঝতে
পেরে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.