در چهار قسمت ابتدایی این مجموعه مقاله تحت عنوان آموزش طراحی ۳ بعدی بازی های ویدیویی با تکستچرها (Textures)، متریالها (Materials)، شیدرها (Shaders) و فرآیند بدست آوردن UVهای مدل آشنا شدید. ضمن اینکه روشهای ساخت تکستچر نیز شرح داده شد. در این قسمت از مقاله که قسمت پنجم و آخر این مجموعه مقاله است، قصد داریم شما را با یک تکنیک بهینهسازی مدلهای سه بعدی آشنا کنیم.
ضمنا به کاربران عزیز سایت توصیه میشود که قسمتهای مختلف مقالات، به ترتیبی که بر روی سایت قرار گرفتهاند و از قسمت اول مطالعه شوند، چرا که مطالب این مجموعه مقالات در یک فرم پیوسته هستند. برای مثال برخی مطالب که در قسمتی از مقاله ذکر شده اند، توضیح آنها در قسمتهای قبلی آمده است.
مطالب مرتبط:
آموزش طراحی ۳ بعدی در بازی های ویدیویی (همه قسمتها)
آموزش بازی سازی (همه قسمتها)
شرحی کلی بر تکنیک High Polygon to Low Polygon
حال که با تکستچرها، کاربرد و انواع آنها آشنا شدید، در اینجا میخواهیم یک تکنیک بسیار کارآمد، خلاقانه و پر کاربرد را به جهت بهینهسازی مدلهای درون بازیها با استفاده از ساخت انواع تکستچر برای آن ارائه دهیم. قبل از آنکه در ارتباط با این روش توضیحی ارائه دهیم، میخواهیم شرحی کوتاه در ارتباط با برخی انواع مپها بدهیم. شاید در ذهنتان این سوال پیش آمده باشد که مپهایی نظیر Normal و AO که دقیقا مرتبط با نوع ساختار یک مدل هستند چگونه ساخته میشوند؟
همانطور که در ابتدا گفتیم Normal Map پستی و بلندیهای ریز و در کل هرگونه انحنا در سطح را نمایان میکند و به تکستچر دو بعدی ما، بُعد سومی نیز میدهد. همچنین AO Map نیز حاوی اطلاعات مربوط به نور در یک مدل میباشد و میتواند روی لبههای مدل سایه روشنهایی به جهت هر چه باورپذیرتر شدن آن، خلق کند. پس، از اینجا میفهمیم که میتوانیم Normal Map و AO Map را بر اساس اینکه قرار است روی چه مدلی (با چه ویژگیهای ظاهری) بنشینند نیز بسازیم و حداقل اینکه ایده آل این است که تا جای ممکن این دو مپ بر اساس ساختار مدل، درست شوند. اما این کار چگونه انجام میشود؟
در معرفی روش Painting برای ساخت تکستچر به صورت گذرا به اصطلاح Baking اشاره کردیم و گفتیم که به پروسهی درست کردن تکستچر با استفاده از مدلمان Baking میگویند. یعنی باید مپهایی مانند Normal و AO را و البته یک سری مپ دیگر که قابلیت ساخته شدن از روی مدل را دارند، Bake کنیم.
بدین منظور نیاز به یک نرم افزاری که عمل Bake کردن را برای ما انجام دهد داریم. نرم افزارهایی مثل Substance Painter و Substance Designer درون خود دارای Baker هستند، که این کار را به خوبی انجام میدهند. اما یک نرمافزار بسیار عالی که به صورت تخصصی میتواند برای ما Baking را انجام دهد نرم افزاری به نام Xnormal است. این نرمافزار متعلق به شرکت کرایتک و در واقع سازندهی موتور بازیسازی CryEngine است. این نرمافزار مدل را از ما میگیرد و طی فرآیندهایی که درون آن صورت میگیرد انواع مپهای ساختاری مثل Normal Map و AO مپ را برای ما Bake میکند.
این مپها بسیار دقیق هستند و کاملا بر اساس جزییات مدلمان هستند به طوری که به خوبی پستی و بلندیها و لبههای مدل در مپها نمایان هستند. و با داشتن این چنین مپهایی و تلفیق با مپهای Base Color وRoughness که خودمان میتوانیم بسازیم، امکان ساخت یک متریال بسیار قدرتمند و دقیق را خواهیم داشت.
حال به سراغ شرح تکنیک High poly to low poly میرویم که در واقع پایهی آن بر اساس همین Bake کردن مپها است. اما اصلا چرا به همچین تکنیکی به جهت بهینهسازی مدلمان نیازمندیم؟
از آنجایی که ساخت یک مدل سه بعدیِ بسیار با کیفیت، به معنی سر و کار داشتن با حتی میلیونها عدد پلیگان (به مثلثها یا چهارضلعیهای تشکیل دهندهی یک مدل Polygon میگویند) است پس کاهش Performance و در واقع عملکرد سیستممان کاملا اجتناب ناپذیراست. درست است که هر چه تعداد پلیگانهای یک مدل بالاتر رود کیفیت و جزییات آن نیز بهتر میشود اما تصور کنید همین مدل را بخواهید Animate کنید یا در واقع میخواهید آن را به جهت ساخت انیمیشن، جابجا کنید.
مشاهده میکنید که حرکت این مدل توام با افت فریم شدید تصویر است. چرا که یک سیستم پر قدرت هم در پروسس کردن یک همچین تعداد پلیگانهایی به مشکل بر خواهد خورد. بدیهی است که در تصویر ما فقط با یک مدل طرف نیستیم و مدلهای بسیاری ممکن است وجود داشته باشند و اگر قرار باشد آنها نیز تعداد پلیگانهای بالایی داشته باشند، عملا هیچ سیستمی از پس رندر کردن انیمیشن برای این مدلهای پُر پلیگان بر نمیآید.
پس چه کاری میتوانیم انجام دهیم به طوری که با وجود کاهش تعداد پلیگانها کیفیت مدل پایین نیاید و یا دست کم میزان کاهش کیفیت، متناسب با میزان کاهش پلیگان نباشد و فقط کمی افت کیفیت در مدل داشته باشیم؟
شرح تکنیک
یکی از تکنیکهایی که بیشتر انیمیشن سازها و بازی سازها از آن استفاده میکنند همین تکنیک High Poly to Low Poly است. در این تکنیک دو نمونه High polygon (تعداد پلیگانهای زیاد) و Low polygon (تعداد پلیگانهای کم) از یک مدل میسازیم و با استفاده از ورژن High poly مدل، مپهای Normal و AO را با استفاده از نرم افزاری که در ابتدا شرح دادیم، Bake میکنیم. بدین صورت مپهای بسیار با کیفیت و پر جزییاتی خواهیم داشت، که شامل اطلاعات یک مدل High polygon و با جزییات بالا است.
حال کافی است این مپها را روی نمونهی Low poly مدلمان قرار دهیم. و بدین شکل مدل Low poly ظاهری مشابه High poly خواهد داشت چرا که مپهای ساختاری High poly را دارد. مپهایی که دقیقا مشخص کنندهی جزییات بالای High poly هستند. و اینگونه است که با وجود اینکه یک مدل Low poly داریم، اما از لحاظ ظاهری بسیار با کیفیت بوده و اگر تمامی مراحل این تکنیک را به خوبی انجام داده باشیم، تشخیص اینکه کدام مدل Low poly است و کدام High poly نیاز به دقت دارد که در واقع این نتیجهی اجرای ایده آل این تکنیک است که نیازمند شرایطی است.
در غیر این صورت با توجه به اینکه به چه میزان در برآورده کردن این شرایط، اهمال کرده باشیم، تفاوت ظاهری مدل High poly، با مدل Bake شده از روی آن، به وضوح دیده میشود. اما این شرایط چه مواردی را در بر میگیرد؟
اول اینکه برای نتیجه دادن این تکنیک لازم است هر دو نمونهی مدلمان به خوبیUV Coordinate و یا Unwrap شده باشند. در بیشتر رفرنسها Unwrap شدن ورژن Low poly و استفاده از آن برای High poly را کافی میدانند، چرا که Unwrap کردن High poly به دلیل داشتن پلیگانهای زیاد و در نتیجه تعداد UV های بسیار زیاد، کمی مشکل و طاقت فرسا است. و اصولا متدهایی که به صورت اتوماتیک این کار را انجام میدهند، نمیتوانند در جهت یک Unwrapping ایده آل به ما کمک کنند و باید این کار را به صورت دستی انجام دهیم.
به همین دلیل توصیه میشود مدلی که تعداد پلیگانهای کمتری دارد را Unwrap کرده و بعد UVهای آن را کپی و بر روی High poly، Paste کنیم. اما به نظر نگارنده درست است که در برخی حالات به نتیجهی کار لطمهای وارد نمیشود، اما در صورتی که سطح مدل ما دارای انحناهای زیادی باشد و جزییات قابل توجهی داشته باشد، استفاده از UVهای Low poly میتواند به نتیجهی کار ما آسیب وارد کند و تفاوت ظاهری مدل High poly، با مدل Bake شده از روی آن، را بسیار زیاد میکند.
مورد بعدی این است که نباید تفاوت تعداد پلیگانها در دو نمونه Low poly و High poly خیلی زیاد باشد. مثلا زمانی که تعداد پلیگانهای مدلHigh poly شما یک عدد میلیونی است، نباید تعداد پلیگانهای مدل Low poly خود را به یک عدد سه رقمی کاهش دهید، چرا که ممکن است نتیجهی خوبی ندهد. اما سوال این است که چه مقدار باید کاهش پلیگان داشته باشیم؟ پاسخ این است که با توجه به مدل و جزییاتی که دارد مقدار این کاهش در مدلهای مختلف متفاوت است. پس با آزمون و خطا بهتر است میزان کاهش را بدست آورید.
نکتهی دیگری که در اجرای این تکنیک باید رعایت کنید نحوهی کاهش تعداد پلیگان هاست. امروزه نرم افزارهای زیادی هستند که این کار را به صورت اتوماتیک انجام میدهند، اما در برخی مدلها که جزییات بالایی دارند، عموما روش اتوماتیک کمکی به ما نمی کند. بنابراین گاهی لازم است به صورت دستی این کار را انجام دهیم. که این نیز با توجه به جزییات مدل میتواند فرآیند بسیار طولانی داشته باشد. برای این کار اصولا متدهای مختلفی وجود دارد. نرم افزار Maya در این زمینه بسیار قدرتمند است.
پس زمانی که برای مثال با کاراکتر اِلی در بازی Last of us Part ۲ که نماد کیفیت بالا در نسل هشتم کنسولهای بازیهای ویدیویی است، مواجه شدید، بدانید که از این تکنیک استفاده شده است تا الی بتواند با وجود داشتن کیفیت بالا، بر روی سختافزار PS4 که تکنولوژی و قدرت گرافیکی هشت سال پیش را دارد، به بهترین شکل ممکن رندر شده و اجرا شود.
اگر فرض کنیم کاراکتر الی را با استفاده از روشهای کلاسیک Sculpting (در لغت به معنی هنر کَنده کاری بر روی چوب است که اشاره دارد به ساخت مدلهای ۳D با الهام از این هنر، توسط نرم افزارهایی که دارای ویژگی Sculpting هستند) ساخته باشند که به جهت افزایش کیفیت مدل باید تعداد پلیگانهای آن را افزایش دهیم، میشود حدس زد مدل High poly الی، دارای چیزی حدود ۱۰ میلیون پلیگان است، و این مقدار در Low poly به حدود ۲۰ هزار پلیگان کاهش یافته. البته بدیهی است که نمیتوان به طور دقیق در این مورد نظر داد، با توجه به تجربه و سختافزار PS4 این اعداد حدس زده شده است.
از آنجایی که سازندگان هیچگاه اطلاعات تکنیکی ساختهی خود را اعلام نمیکنند، احتمالا هیچ وقت در این باره اطلاعاتی کسب نخواهیم کرد. البته برخی نرم افزارهای قدرتمندی مثل Zbrush هستند که Sculpting را با متدهای جدیدی انجام میدهند که میتوانیم در حالی که مدل با کیفتی داشته باشیم، مدل از نظر تعداد پلیگان نیز در سطح معقولی باشد. هرچند که به هر حال این گونه مدلها نیز گاهی تحت شرایطی نیاز به اجرای این تکنیک به جهت بهینهسازی در تعداد پلیگانها خواهند داشت.
در ادامه تصاویری به جهت فهم بهتر این تکنیک ارائه شده است. در این جا میخواهیم «سر» یک مدل ۳D را از طریق روش مذکور بهینهسازی کنیم. ابتدا مدل را در نرمافزار Zbrush میسازیم. در شکل تعداد پلیگانهای آن را مشاهده میکنید که برای فقط «سر» یک کاراکتری که در بازی نقش اصلی هم ندارد، نسبتا تعداد زیادی است. این مدل با احتساب تعداد پلیگانهای چشم، دارای حدود ۹۰ هزار عدد پلیگان است.
سپس در همین نرمافزار Zbrush با استفاده از ابزارهایی که در اختیار ما قرار داده، تعداد پلیگانهای مدل را به حدود عدد ۳۰۰ پلیگان کاهش میدهیم. مشاهده میکنید که کیفیت مدل بسیار پایین آمده است.
در مرحلهی بعد مدل را Unwrap کرده تا UVهایش را بدست آوریم وبدین شکل، آن را برای انجام فرآیند Baking و بعد تکستچرگذاری آماده میکنیم. برای اینکه تصور بهتری از شکل ظاهری مدلها و اینکه مدل Low Poly و High Poly چقدر باهم تفاوت دارند، یک متریال پوست بدن انسان را روی هر دو نمونه مدل قرار میدهیم. توجه کنید این متریال برای استفادهی شماتیک ساخته شده است و تکستچرش حاوی جزییات صورت انسان نیست. مثلا نا حیه «لب» جزییات ظاهری مربوط به خود را ندارد.
مدل در حالت High Poly به این صورت است که در تصویر مشاهده میکنید. جزییات صورت به خوبی نمایان هستند.
اما در حالت Low Poly به صورت زیر است. که تصویر، خود گویای همه چیز است.
از آنجایی که قصد نداریم این مدل را برای استفاده در بازی Minecraft ارائه بدهیم، علاقه مندیم کیفیت بالایی از مدل را داشته باشیم! پس در مرحلهی بعد مپهای Normal و AO را از روی مدل High Poly، Bake میکنیم. در تصویرهای زیر این دو مپ را مشاهده میکنید.
در نهایت با قرار دادن این دو مپ بر روی مدل Low Poly، ظاهری مشابه با مدل High Poly به آن میدهیم. مشاهده میشود که مدل به دست آمده تفاوت ظاهری زیادی با مدل High Poly ندارد، و جزییات صورت در این مدل نیز به خوبی نمایان است.
بدین شکل و با استفاده از این تکنیک یک مدل ۳۰۰ پلی گانی اما با کیفیت در حد یک مدل ۹۰ هزار پلی گانی، بدست میآوریم. این سبک بهینهسازی در مدل ها، فشار کاری را بر روی سیستم اجرا کننده، بسیار پایین میآورد. و سیستم از لحاظ عملکرد به خوبی کار خواهد کرد. در اینجا به پایان مجموعه مقالات آموزش طراحی ۳ بعدی در بازیهای ویدیویی رسیدیم. شما میتوانید با استفاده از لینکهای موجود در ابتدای این مطلب، به تمام قسمتهای پیشین و همچنین مقالات مشابه دست یابید. در بخش نظرات، افکار و ایدههای خود را با ما به اشتراک بگذارید.
نظرات