درقسمت قبل با تکستچرها و انواع آنها در طراحی ۳ بعدی آشنا شدیم، در این قسمت از مقاله شرحی بر شِیدرها (Shaders) و متریالها (Materials) خواهیم داد. ضمن اینکه شما را با فرآیند آمادهسازی مدل به جهت تکستچرگذاری بر روی آن آشنا خواهیم کرد.
به کاربران عزیز سایت توصیه میشود که قسمتهای مختلف مقالات، به ترتیبی که بر روی سایت قرار میگیرند و از قسمت اول مطالعه شوند، چرا که مطالب این مجموعه مقالات در یک فرم پیوسته هستند. برای مثال برخی مطالب که در قسمتی از مقاله ذکر شده اند، توضیح آنها در قسمتهای قبلی آمده است.
شِیدر (Shader)
سوالی که در اینجا مطرح میشود این است که این فایلهای تصویری یا در واقع تکستچرهای ما به چه صورت بر روی مدل مینشینند تا بتوانند جزییات را القا کنند؟ یعنی آیا به همین سادگی است که تکستچرهای مورد نظر را به نحوی به مدلمان متصل کنیم تا مقادیر رنگی را به آن داده و تبدیل به یک مدل با رنگ و جزییات کند؟
پاسخ این است که به هر حال فرآیند انجام Texturing بسیار ساده است، اما پشت پردهی آن هزاران خط کد و محاسبات ریز و درشت صورت میگیرد و ما فقط با چند کلیک ساده از نتایج حاصل استفاده می کنیم. در یک توضیح مختصر باید گفت که اصولا تکستچر از طریق شیدرها (Shader) به مدل اعمال میشود. یک شیدر درواقع یک واحد برنامهنویسی شده (Programing Unit) یا به طور ساده یک برنامه به زبان برنامهنویسی خاصی است که یکی از وظایف آن این است که رابط میان مدل و تکستچرهایش باشد.
وقتی میگوییم تکستچر ی روی مدل نشسته، یعنی در واقع شیدری روی آن مدل نشسته که تکستچرهای مذکور بدان وصل شده اند. هر شیدر ورودیهای تکستچر مربوط به خود را دارد.
برای مثال در قسمت قبل به طور گذرا گفتیم که برای ساخت متریال یک شیشیه نیاز به یک مپ به نام Glossy داریم. حال این مپ وارد شیدری میشود که ورودی Glossy داشته باشد، در غیر این صورت این مپ نمیتواند وظیفهی خود را انجام دهد و باید لزوما در همین ورودی به شیدر متصل شود. در واقع این شیدرها انواع مختلفی دارند و بر اساس اینکه از چه نوعی هستند (به چه صورت کدنویسی شده باشد) پذیرای انواع تکستچرهای مختلف هستند.
از آنجایی که بحث رندرینگ بسیار گسترده است و نیاز به مقالاتی جداگانه در این زمینه دارد، با ذکر این موضوع از آن گذر میکنیم که شیدرها در ارتباط مستقیم با رندر انجین هستند و آنها هستند که به رندر انجین میگویند که به چه صورت و با چه رنگ و جنس و جزییاتی از اجسام مختلف رندر بگیرد و به ما نمایش دهد. امروزه در زمینهی گرافیک کامپیوتری (CG) و بازیهای ویدیویی از انواع شیدرهای PBS یا Physically Based Shading استفاده میشود بدین معنی که این شیدر در واقع این امکان را دارد که براساس جنس فیزیکی که برای یک مدل مدنظر داریم، به آن شکل دهد. به طورکلی این نوع شیدرها دارای ورودیهای مپهای
Base color، Roughness، Normal، Metallic، Glossy، Emissive، Specular هستند. که براساس نیاز، میتوانیم از هر یک استفاده کنیم. هر کدام از این ورودیها طوری برنامهنویسی شدهاند که بتوانند آن ویژگی که از مپِ مورد نظرمی خواهیم را، بر روی مدل پیاده کنند. مثلا ورودی Normal به گونهای کدنویسی شده که به رندر انجین اعلام کند در نقاطی از این مپ که رنگ قرمز میبینی، سطح مدل را Aggressive و با خلل و فرجهای بیشتری نمایش بده. برای انواع ورودیهای مپهای مختلف دیگر نیز به همین منوال کدنویسی شده است.
از منظر دیگر میتوان گفت یک شیدر میتواند به تنهایی و بدون اتصال تکستچر، به مدل، رنگ و روح ببخشد اما در سطوحی پایینتر و با جزییات کمتر. چرا که ورودیهای شیدر، هر کدام در حالتی که تکستچری به آنها وصل نیست دارای مقادیر عددی خاصی هستند و میتوانیم این مقادیر را برای هر ورودی تنظیم کنیم. اما از آنجایی که این مقادیر اعداد ثابتی هستند، بر روی سطح مدل هیچ تغییر رنگ خاصی نمیبینیم. مثلا اگر رنگ قرمز را برای ورودی Base color مشخص کنیم، کل سطح مدل دارای رنگ قرمز میشود و یکنواخت است. وظیفهی یک تکستچر این است که با توجه به خواستهی ما و مدل مان، این مقادیر رنگی را بر روی سطح پراکنده کند و همین باعث میشود که روی سطح فقط یک نوع رنگ نبینیم.
حال وقتی صحبت از Plastic Shader، Metal Shader و امثال اینها میشود منظور چیست؟ برای مثال منظور از Metal Shader این است که شیدری کدنویسی کردند که پذیرای تکستچرهای لازم برای القای جنس فلز به مدلمان باشد. و این شیدر به طور مشخص میتواند مقادیر رنگی یا در واقع انواع مپهای Base color و Metallic و Normal و AO را بپذیرد.
یا مثلا در مورد شیدر شیشه به این صورت است که علاوه بر اینکه انواع مپهای لازم برای القای جنس شیشه را میپذیرد، دارای مقادیری از خاصیت Translucency نیز میباشد که باعث میشود سطح، نور را به طور کامل از خود عبور داده و بدین شکل اشیای موجود در پشت آن سطح دیده میشوند و ظاهر شیشه را به خوبی برای ما نمایان میکند.
در تصویر بالا دو استوانهی ساده را مشاهده میکنید که استوانهی پشتی، شیدر مات با رنگ طلایی دارد و استوانهی جلویی شیدری دارد که دارای مقادیر Translucency است و جنس شیشه را برای ما تداعی میکند. در تصویر دیگر همین شیدر شیشه را مشاهده میکنید که در غالب یک Node یا بلاکهایی که به وسیلهی خطوطی با هم در ارتباطند، نشان داده شده است.
درواقع در پشت این Node کدهای شیدر شیشه نوشته شده است. در سمت راست این تصویر نیز یک سری مقادیر Translucency را مشاهده میکنید که ارتباط مستقیم با میزان عبور نور از استوانه دارد و میتوان به وسیلهی آن شفاف بودن یا کدر بودن شیشه را تنظیم کرد.
اینکه در CG به چه صورت کد مربوط به شیدر شیشه نوشته میشود، مبحث بسیار جالب و درواقع یک ترفند بسیار ساده است که از طریق آن شیشه را میسازند. امیدوارم این مجموعه مقالات آموزشی به درجهای از پیشرفت برسند که بتوانیم مباحث مربوط به کدنویسی شیدرها را شرح دهیم.
اصولا یک طراح تکستچر نیازی به دانش کدنویسی شیدرها ندارد، چون انواع آنها حاضر و آماده در نرم افزارهای مختلف موجود هستند و به راحتی با چند کلیک قابل استفاده هستند. کدنویسی شیدرها از جمله مباحث پایه و در واقع پشت پردهی CG هستند. اما فراگیری آن، شما را یک سر و گردن از بقیهی طراحان تکستچر بالاتر میبرد. که این در دنیای رقابتی این روزها بسیار مهم است.
متریال (Material)
اما منظور از متریال چیست؟ همانطور که از اسمش پیداست، این مفهوم اشاره دارد به جنس مادهی به کار رفته در یک مدل. با توجه به توضیحاتی که در مورد تکستچرها دادیم، این سوال از شما پرسیده میشود که چه چیزی، جنس یک ماده را به مدل القا میکند؟
دقیقا! درست است! تلفیق چند نوع تکستچر با یکدیگر که به شیدر متصل شده اند، با نشستن بر روی یک مدل، جنس آن مادهی خاص را برای بیننده تداعی میکنند.
پس در واقع متریال چیزی نیست جز مجموع تکستچرها یا همان مپهای مختلف یک سطح که با اتصال به شیدر مربوطه، جنس خاصی از یک ماده را خلق میکنند. و در نهایت این متریال است که بر روی مدل مینشیند (یا اصطلاحا به آن Assign میشود) و ظاهری مشابه آن ماده فیزیکی که مدنظر ماست به مدل میدهد. و ما در دنیای CG و البته بازیهای ویدیویی میتوانیم انواع متریالها را بسازیم. مثلا متریال فلز، متریال از نوع چوب، متریال یک اسباب بازی پلاستیکی. در واقع هر چیزی که در دنیای بازیها و انیمیشنها میبینید متریال مربوط به خود ودر نتیجه تکستچرهای مختص به خود را دارند.
پس حالا که به طور کلی با مفاهیم تکستچر، متریال و تا حدودی شیدر آشنا شدید، مطمئنا وقتی با جملهای در ارتباط با کیفیت تکستچرها (بافت ها) یا کیفیت متریالها در نقد یک بازی، انیمیشن، و یا هر تصویر مصنوعی که توسط کامپیوتر ساخته شده است، مواجه شدید تا حدودی میتوانید به پشت پردهی این جمله پی ببرید.
UV Coordinate
منظور از اینکه میگوییم متریال یا تکستچرمان روی مدل بنشیند چیست؟ آیا به سادگیِ واژه «نشستن» میتوانیم تکستچرهایمان را بر روی مدلمان بدون هیچ زحمتی اصطلاحا Drag and Drop کنیم؟ در این بخش میخواهیم به این سوال پاسخ دهیم، اینکه چه فرآیندی باید صورت بگیرد که تکستچرهایمان با دقت خوبی، دقیقا بر روی نقطهای از مدل که میخواهیم، قرار بگیرند.
تصور کنید که تکستچرهایی برای صورت یک کاراکتر انسانی ساختیم، که شامل اعضای مختلف صورت یک انسان است. حال باید به جهت نشاندن تکستچرها بر روی صورت مدل مان، چه پروسهای را طی کنیم که برای مثال جایی از تکستچر که «چشم» قرار دارد بر روی محل «دهان» کاراکتر، ننشیند و دقیقا بر روی محل چشم، بر روی مدل بنشیند. البته دقت شود از آنجایی که این مبحث، مبحثی فراتر از حد مبتدی است، خیلی نمیخواهیم مطالب آن را باز کنیم و با انبوهی از اطلاعات ریز و درشت روبرو شویم.
مطالب مرتبط:
پروسه ای که باید روی یک مدل انجام بگیرد تا مکان قرارگیری نقاطی از تکستچر، بر روی مدل مشخص شود، UV Coordinating یا Unwrapping نام دارد. UV Coordinate اشاره دارد به Coordinate کردن مدل. یعنی برای هر نقطهای روی مدل (یک مدل دو بعدی یا سه بعدی) یک نقطهی معادل بر روی تکستچر دوبعدیمان بدست آوریم.
UV نیز اشاره دارد به بردارهای یکهی U و V که در یک دستگاه مختصات دو بعدی، U در جهت X یا همان طول است و V در جهت Y یا همان عرض است. یعنی برای هر نقطه روی مدل یک U و یک V به عنوان مختصات باید پیدا کنیم و با داشتن این مختصات میتوانیم به راحتی نقاط متناظرش بر روی تکستچررا، بر روی مدل قرار دهیم.
سئوالی که ممکن است پیش بیاید این است که اگر مدل ما سه بعدی باشد، که امروزه بیشتر با مدلهای سه بعدی کار میکنیم، به چه صورت باید نقاط روی سطح مدلمان را به شکل دو بعدی مشخص کنیم تا بتوانند روی یک تکستچر که دو بعدی است بنشینند؟ پس تکلیف بُعد سوم یا همان مختصات در راستای محور سوم (مثلا محور Z) چه میشود؟
پاسخ این است که باید مدل سه بعدیمان را به شکلی در دو بعد تعریف کنیم. در واقع به تعریفی دقیقتر پروسهی انجام این کارUV Coordinate نام دارد. تکنیکی که در این زمینه استفاده میشود تکنیک Unwrapping یا Unfolding است. که اشاره به نام دیگر این پروسه هم دارد. در این حالت مدل سه بعدی را از یکدیگر بازمی کنیم. به طوری که گویی شی سنگینی از بالا بر روی مدل افتاده و به صورت ایده آل کل مدل را به سطح زمین چسبانده است.
بدین شکل کل آن مدل بدون اینکه کم و کاستی در تعداد پلیگانهایش (Polygon) ایجاد شود، بُعد سوم را از دست میدهد و هر نقطه بر روی آن، فقط دارای دو مختصات طول و عرض یا همان UV مذکور است. و در این حالت مدلمان نیز به مانند تکستچرمان در دو بعد تعریف میشود، که در این صورت میتوانیم به راحتی آنها را بر روی یکدیگر جوری تنظیم کنیم که به بهترین شکل ممکن روی هم بنشینند. توجه شود افتادن شی سنگین از بالا بر روی مدل را فقط به جهت فهم بهتر فرآیند Unwrapping گفتیم. در واقعیت قرار نیست چیزی را از بالا بر روی مدل رها کنیم تا Unwrapped شود!
پس نکتهی مهمی که در اینجا باید در ذهن داشته باشیم این است که قبل از آنکه بخواهیم برای یک مدل، تکستچری بسازیم، باید حتما آن مدل را UV Coordinate کنیم، یعنی باید به تکستچر آدرس دهیم که هر قسمتش بر کجای مدل بنشیند. در غیر اینصورت امکان تکستچرگذاری برای آن مدل وجود ندارد. در واقع زمانی که حرف از تکستچر میشود، فرض بر این است که مدل از قبل UV Coordinate شده است.
در این زمینه چندین روش مختلف به جهت Unwrapping و در واقع UV Coordinate کردن مدل وجود دارد. امروزه به مدد انواع نرم افزارهای ۳D، انجام فرآیند Unwrapping نسبت به گذشته بسیار سادهتر شده است. اکثر نرمافزارهای طراحی ۳D قابلیت Unwrapped کردن مدلها را دارند. نرمافزارهایی مثل Maya، ۳DS Max، Blender و چندین نرمافزار دیگر. اگر فرصتی باشد در آینده بیشتر وارد حوزههای Unwrapping خواهیم شد و در آنجا میتوانیم راجع به کدنویسی این فرآیند پیچیده صحبت کنیم.
در بالا تصاویری را مشاهده میکنید که در آن یک مکعب ساده به شکل حرف T انگلیسی Unwrapped شده است و آمادهی تکستچرگذاری است. در دو تصویر بعدی، مدل سه بعدی از «سر» یک کاراکتر انسانی را میبینید که Unwrapped شده است. و به راحتی میتوانیم از طریق نرم افزارهای ساخت تکستچر، جزییات صورت کاراکتر را بسازیم. هر دو این مثالها در نرمافزار Maya انجام شده اند. این بحث را در همینجا به پایان میرسانیم؛ هفته آینده همراه ما باشید.
نظرات