সাধারণ ইউভি ম্যাপিংকে এফাইন ট্রান্সফর্মেশন বলা হয় । এর অর্থ 3 ডি স্পেস এবং টেক্সচার স্পেসের মধ্যে প্রতিটি ত্রিভুজটির ম্যাপিংয়ের মধ্যে ঘূর্ণন, অনুবাদ, স্কেলিং / স্কোয়াশ এবং স্কিউ অন্তর্ভুক্ত থাকতে পারে (অর্থাত্ আমরা একজাতীয় ম্যাট্রিক্স গুণে কিছু করতে পারি)
অ্যাফাইন ট্রান্সফর্মেশনগুলির বিষয় হ'ল তারা তাদের সম্পূর্ণ ডোমেন জুড়ে অভিন্ন - ঘূর্ণন, অনুবাদ, স্কেল এবং স্কিউ যেটি আমরা ভার্টেক্স A এর নিকট টেক্সচারটিতে প্রয়োগ করি তা হ'ল আমরা যে কোনও একটি ত্রিভুজের মধ্যেই ভার্টেক্স বি এর নিকট প্রয়োগ করি। একটি স্পেসে সমান্তরাল লাইনগুলি অন্য স্থানে সমান্তরাল রেখায় ম্যাপ করা হবে, কখনও রূপান্তরিত / ডাইভার্জ হবে না।
তবে আপনি যে ধীরে ধীরে টেপারিং প্রয়োগের চেষ্টা করছেন তা অভিন্ন নয় - এটি জমিনে সমান্তরাল রেখাগুলি জালটিতে রূপান্তরিত রেখাগুলিতে ম্যাপিং করছে। এর অর্থ ব্যান্ড জুড়ে পরিমাপ করা টেক্সচারের স্কেল অবিচ্ছিন্নভাবে পরিবর্তন হচ্ছে যখন আমরা স্ট্রিপটি নীচে নামছি। এটি 2D ইউভি ম্যাপিংয়ের অ্যাফাইন রূপান্তরগুলি সঠিকভাবে উপস্থাপন করতে পারে তার চেয়ে অনেক বেশি: সংলগ্ন কোণগুলির মধ্যে 2D ইউভি স্থানাংককে পৃথক করে পুরো প্রান্ত বরাবর একটি ধারাবাহিক স্কেল পেয়ে যাবে, এমনকি স্ট্রাইপটির নীচে সরানোর সাথে সাথে তির্যক প্রান্তটি আকারে সঙ্কুচিত হওয়া উচিত। এই অমিলটি এই যুদ্ধবিগ্রহ জিগজ্যাগকে তৈরি করে।
এই সমস্যাটি যে কোনও সময় ফসরে যায় আমরা কোনও ট্র্যাপিজয়েডের সমান্তরাল দিকগুলি রূপান্তরকারী দিকের মানচিত্র তৈরি করতে চাই - এটি করার ফলে কেবল কোনও অ্যাফাইন রূপান্তর হয় না, সুতরাং আমাদের এটি প্রায় টুকরোচকভাবে তৈরি করতে হবে, যা দৃশ্যমান সিলগুলির দিকে নিয়ে যায়।
বেশিরভাগ উদ্দেশ্যে আপনি আরও জ্যামিতি যুক্ত করে প্রভাবটি হ্রাস করতে পারেন। স্ট্রিপের দৈর্ঘ্য বরাবর মহকুমার সংখ্যা বৃদ্ধি এবং স্ট্রাইপটিকে তার চওড়া প্রান্তে দুটি বা ততোধিক বিভাগে বিভক্ত করা, একটি হেরিংবোন প্যাটার্নে সাজানো ত্রিভুজগুলির ত্রিভুজগুলির সাথে প্রভাবটি আরও কম লক্ষণীয় করে তুলতে পারে। এটি যতক্ষণ না আমরা affine রূপান্তরগুলি ব্যবহার করছি ততক্ষণ কিছুটা সময় উপস্থিত থাকবে।
তবে এর চারপাশে একটি উপায় আছে। প্রদত্ত আয়তক্ষেত্রাকার প্রাচীর এবং মেঝে দৃষ্টিকোণে ট্র্যাপিজয়েডগুলি আঁকার জন্য আমরা 3D ট্রেন্ডারিংয়ের জন্য একই কৌশল ব্যবহার করতে পারি: আমরা প্রজেক্টিভ স্থানাঙ্ক ব্যবহার করি !
অ্যাফাইন টেক্সচার:
সম্ভাব্য পাঠ্য:
এটি করার জন্য, আমাদের একটি তৃতীয় ইউভি স্থানাঙ্ক (ইউভিডাব্লু) যুক্ত করতে হবে এবং আমাদের শেডারগুলি সংশোধন করতে হবে।
প্রতিটি বিন্দুতে একটি স্কেল ফ্যাক্টর দেওয়া (বলুন, যে জায়গাটিতে আপনার স্ট্রিপের প্রস্থের সমান), আপনি আপনার নিয়মিত 2 ডি ইউভি স্থানাঙ্ক থেকে 3 ডি প্রজেক্টিভ ইউভিডাব্লু সমন্বয়টি এইভাবে নির্মাণ করতে পারেন:
Vector3 uv3 = ((Vector3)uv2) * scale;
uv3.z = scale;
আপনার জালগুলিতে এই 3 ডি ইউভিডাব্লু স্থানাঙ্ক প্রয়োগ করতে, আপনাকে ভেক্টর 3 ওভারলোড মেশ.সেটউভিগুলি ব্যবহার করতে হবে (অন্তর্গত চ্যানেল, তালিকা ইউভিগুলি)
এবং একটি 3D টেক্সচার সমন্বয় (ডিফল্ট আনলিট শেডার ব্যবহার করে এখানে দেখানো হয়েছে) আশা করতে আপনার শেডারের ইনপুট স্ট্রাক্ট পরিবর্তন করতে ভুলবেন না:
struct appdata
{
float4 vertex : POSITION;
float3 uv : TEXCOORD0; // Change float2 to float 3.
};
// Also do this for the uv sent from the vertex shader to the fragment shader.
আপনার ভার্টেক্স শ্যাডারে ট্রান্সফর্মএমটেক্স ম্যাক্রোও কেটে ফেলতে হবে, যেহেতু এটি একটি 2 ডি ইউভি আশা করে:
// o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.uv = v.uv;
// If you define a float4 with the special name _MainTex_ST,
// you can get the same effect the macro had by doing this:
o.uv.xy = o.uv.xy * _MainTex_ST.xy + _MainTex_ST.zw;
অবশেষে টেক্সচার স্যাম্পলিংয়ের জন্য 2D টেক্সচারের স্থানাঙ্কে ফিরে যেতে, আপনি কেবলমাত্র আপনার খণ্ড শেডারে তৃতীয় স্থানাঙ্ক দ্বারা ভাগ করবেন :
float2 uv = i.uv.xy / i.uv.z;
যেহেতু আমরা একই সংখ্যা দ্বারা গুণিত করে আমাদের কাঙ্ক্ষিত 2 ডি স্থানাঙ্ক থেকে এই 3 ডি ইউভিডু স্থানাঙ্ক তৈরি করেছি, তাই দুটি ক্রিয়াকলাপ বাতিল হয়ে যায় এবং আমরা আমাদের মূল কাঙ্ক্ষিত 2 ডি স্থানাঙ্কে ফিরে আসি, তবে এখন উল্লম্বের মধ্যে অ-রৈখিক অন্তরঙ্গকরণ রয়েছে। : ডি
ভার্টেক্স শ্যাডারে নয়, প্রতি টুকরা প্রতি এই বিভাগটি করা গুরুত্বপূর্ণ। এটি যদি ভার্টেক্স অনুসারে সম্পন্ন হয়, তবে আমরা প্রতিটি প্রান্ত বরাবর লম্বা ফলস্বরূপ স্থানাঙ্কগুলি সংশ্লেষ করতে ফিরে এসেছি এবং আমরা যে প্রান্তিকতাটি প্রজেক্টিভ স্থানাঙ্কের সাথে প্রবর্তনের চেষ্টা করছিলাম তা হারিয়ে ফেলেছি!
id
এবংcount
? কি করেUVs.ToArray()
? আপনি কিভাবে কার্ডটিতে শীর্ষে এবং টেক্সচারের স্থানাঙ্কগুলি আপলোড করছেন?