آموزش بازی سازی: آشنایی با افکتهای پسپردازشی
همان گونه که در مقالات گذشته هم اشاره کردیم، گاهی برای خلق یک نمای بصری جدید هیچ احتیاجی برای تغییر تمامی روند ساخت بازی نیست. برای همین در مقالهی آشنایی با ویژگیهای فنی دوربینها در دنیای سهبعدی هم به این موضوع اشاره کردیم که چگونه میتوانیم با حفظ همان روند قبلی تولید بازی، به خلق نماهای جدید بپردازیم.
در این مقاله در نظر داریم شما را با مبحث بسیار مهمی به نام افکتهای پسپردازشی(Post Process Effects) و تعدادی از مهمترین نمونههای آن در حوزهی بازیسازی آشنا کنیم. البته نگاه ما به این مسئله دو جنبهی کاملا متفاوت دارد. اولین مورد مربوط به حوزههایی است که در آنها هدف از استفاده از افکتهای پسپردازشی صرفا رسیدن به سطح کیفی بالاتری در یک نمای گرافیکی مشخص است که افکتهایی از قبیل Bloom و Depth of Field از جمله آنها هستند. اما دومین بخش از مقاله مربوط به حوزهای است که در آن هدف از استفاده از افکتهای پسپردازشی خلق نماهای گرافیکی جدید است و مواردی از قبیل Post Process Materials در این بخش قرار میگیرند.
البته همانند دیگر مقالات ما در زمینهی بازیسازی، در حال حاضر نگاه ما به این مبحث صرفا آشنایی با افکتهای پسپردازشی است و نمیخواهیم از نگاه بهینهسازی هم به بررسی این مسئله بپردازیم. با این حال این را هم به خوبی میدانیم که افکتهای پسپردازشی غالبا رابطهی خوبی با بهینهسازی ندارند و موارد باکیفیت آن بار سختافزاری زیادی را به سیستم وارد میکنند.
افکتهای پسپردازشی
برای درک بهتر مسئلهی افکتهای پسپردازشی بهتر است با هم نگاهی به فرآیند درج یک عکس مثلا در شبکه اجتماعی اینستاگرام بیاندازیم. همیشه روال این گونه است که شما با گوشی خود عکسی را میگیرید و بسته به قدرت گوشی، باید زمانی را برای پردازش تصویر صبر کنید. بعد از آماده شدن تصویر میتوانید متناسب با سلیقهی خودتان افکتهایی را روی عکس اعمال کرده و آن را در شبکههای اجتماعی همانند اینستاگرام به اشتراک بگذارید. نکته کلیدی در این مسئله این است که زمان اعمال این ویرایشها و افکتها همیشه بعد از پردازش تصویر توسط دوربین گوشی شما است.
در یک حالت مشابه، هنگامی که تصویر برای نمایش آماده ارسال به نمایشگر میشود، میتوان فیلترها و افکتهایی را روی آن اعمال کرد تا این گونه کیفیت تصویر نهایی متناسب با سلیقهی خودمان افزایش دهیم. همان گونه که از این توضیح مشخص است به دلیل این که زمان اعمال چنین مواردی، پس از پردازش و اصطلاحا رندر تصویر نهایی است، به این اقدامات فرآیندهای پسپردازشی و در رابطه با افکتها به آنان افکتهای پسپردازشی میگویند.
افکتهایی برای بهبود کیفیت
نوع اول افکتهای پسپردازشی را افکتهایی در برمیگیرند که هدف آنان صرفا افزایش کیفیت تصاویر است. کافی است در این زمینه نگاهی به مقالهی معرفی تنظیمات گرافیکی بازیهای کامپیوتری بیاندازید و با تعدادی از مشهورترین این موارد از قبیل Anti Aliasing و Ambient Occlusion آشنا شوید. باید به این نکته توجه کنید که تصویری که توسط موتور بازی برای گیمر آماده میشود به دلایلی غالبا مربوط به بهینه بودن بازی، دارای نقصهایی در نرمی لبهها، سایهها و دیگر موارد هستند و یکی از دلایل اصلی این مسئله پشتیبانی از طیف گستردهتری از سختافزارهای موجود در بازار است. همان مثال عکاسی را در نظر بگیرید. جدای از این که اعمال بعضی از افکتها روی تصویر کاملا سلیقهای است و به مخاطب بستگی دارد، اگر از همان ابتدا سعی شود تصویر ضبط شده به همراه طیف گستردهای از افکتها تصحیح کنندهی کیفیت تولید شود، میتوانیم ادعا کنیم که حتی پرچمداران این صنعت هم باید لحظات بسیاری را برای پردازش چنین تصویری صرف میکردند که موضوع ناخوشایندی است. نمونهی بارز این مسئله گوشیهای پرچمدار جدید بازار همانند آیفون ایکس هستند که برای انجام چنین کارهایی به صورت اختصاصی پردازندهی مبتنی برهوش مصنوعی خود را در کنار پردازندهی اصلی به کار گرفتهاند تا عملکرد گوشی دچار مشکل نشود. برای ادامهی این بحث در حوزهی بازیسازی در ابتدا به عکس خام زیر توجه کنید که توسط موتور یونیتی آماده شده است.
با این که تصویر به خاطر تنظیمات پیشفرض موتور یونیتی آن چنان هم خام و بدون فیلتر و افکت نیست اما همچنان مشکلات زیادی را در خودش دارد. از لبههای دندانهدار عناصری که روی هم قرار دارند گرفته تا سایههایی که در مواردی کاملا غیرطبیعی هستند. به عنوان مثال چندین نمونه از این موارد در تصویر زیر مشخص شده است.
در کنار این موارد گفته شده میتوانید غیر طبیعی بودن منابع نوری و همچنین نبود انعکاس اجسام روی سطح زمین را هم اضافه کنید. شاید تصویر اولیه ما برای کسانی که با سیستمهای رده پایین بازی میکنند مورد پسند باشد ولی در رابطه با گیمرهای حرفهای یا سطوح بالاتر سختافزاری این گونه نیست. به عنوان مثال به عکس زیر نگاه کنید.
در این عکس صرفا با اضافه کردن چند افکت ساده نه تنها توانستهایم آن فضای خشک و سادهی قبلی را بهبود ببخشیم، بلکه به مقدار خیلی زیادی هم توانستیم نقصهای قبلی را هم برطرف کنیم. اما بیایید با هم نگاهی به تعدادی از افکتهای رایج در این زمینه بیاندازیم. البته لازم به ذکر است که مبنای موارد بیان شده در این بخش از مقاله، موتور بازیسازی یونیتی است.
اولین افکت در این زمینه Space Reflection نام دارد. این افکت مسئولیت ایجاد انعکاس عناصر روی سطوحی را برعهده دارد که همانند فلزات دارای قابلیت بازتابش نور هستند. به عنوان مثال به دو عکس زیر نگاه کنید تا با نحوهی تاثیر این افکت آشنا شوید.
یکی از تاثیرات جانبی این افکت روشن شدن بعضی از مناطق تاریک صحنه به دلیل در نظر گرفتن مسئلهی بازتابش نور است. مثلا در همان عکس بالا ممکن است به دلیل به کارگیری این افکت بخش پشتی جعبه که سایه آن در آنجا قرار دارد به نسبت حالت قبلی آن کمی روشنتر به نظر آید. البته به این نکته باید اشاره کنیم که در بیان جداگانهی هر افکت ما سعی کردهایم در هر مورد صرفا آن افکت را در تصویر اعمال کنیم و برای همین ما دوباره یکسری از عیبهای قبلی را در این تصاویر مشاهده میکنیم.
افکت بعدی Bloom نام دارد که مرتبط با منابع نوری و شبیهسازی پخششدن نور گذر از عناصر صحنه است. تا به حال به پخش شدن نور خورشید در گذر از ابرهای درون آسمان توجه کردهاید؟ این افکت مسئولیت پیادهسازی چنین چیزی را برعهده دارد و شما میتوانید متناسب با منبع نوری خود و عناصر اطراف آن به مقدار لازم از این افکت استفاده کنید.
البته ما در اینجا با مقداری زیادهروی در این افکت سعی کردهایم شما را با تاثیر آن بر محیط آشنا کنیم وگرنه در چند مثال عقبتر و هنگام به کارگیری چند افکت با یکدیگر اگر دقت کنید مشاهده میکنید که حد استفادهی ما از این افکت صرفا ایجاد یک هالهی نور در بخش ابتدای سایه در اطراف منبعنوری است که چیز کاملا طبیعی در محیط اطراف ما است.
مورد بعدی افکت Ambient Occlusion و یکی از مهمترین افکتهای موجود در این زمینه است. به دلیل این که در مقالهی معرفی تنظیمات گرافیکی بازیهای کامپیوتری به این مورد به خوبی پرداخته شده است ما در اینجا توضیح آنچنانی در مورد این افکت نمیدهیم.
در استفاده از این افکت باید به این نکته توجه داشته باشید که گرچه این افکت میتواند به خوبی جزییات و به خصوص سایههای مورد نیاز شما را ایجاد کند ولی استفادهی بیش از حد آن میتواند منجر به ایجاد سایههایی بشود که هیچ تناسبی با منابع نوری شما ندارد. عکس نمونهای از نکتهی اشاره شده است.
مورد بعدی Anti Aliasing نام دارد که مسئولیت نرمکردن لبههای عناصر در تصویر را برعهده دارد. به دلیل این که این مورد هم در مقالهی اشاره شده به خوبی توضیح داده شده است، صرفا به گفتن یک نکته در این زمینه بسنده میکنیم. به دلیل این که ماهیت فیلترها و افکتهایی همانند AA پیچیده است، در مواردی نمیتوان یکسری از این موارد را بدون رعایت کردن پیشنیازها درون صحنه به کار برد. مثلا در همین موتور یونیتی مادامی که شما در حال استفاده از تکنیک MSAA هستید، نمیتوانید به صورت همزمان از تکنیک TAA هم استفاده کنید و هشدار مربوط به این مسئله به شما داده میشود. همچنین در حالت دیگری مادامی که شما از تکنیک Deferred Rendering Path استفاده میکنید نمیتوانید تکنیک MSAA را در بازی خود به کار گیرید که در این مورد هم موتور یونیتی هشدار این مسئله را به شما میدهد. برای همین باید در استفاده از هر یک از این موارد به ناسازگاریها و رعایت پیشنیازهای اشاره شده دقت کنید وگرنه موتور مربوطه تنظیمات شما برای بازی را متناسب با دستورالعملهای خود درون بازی اعمال نخواهد کرد.
آخرین موردی که به نوعی برای افزایش کیفیت نمای نهایی مورد استفاده قرار میگیرد، افکت Eye Adaptation است. برخلاف موارد قبلی که معمولا جزییاتی به بازی شما اضافه میکردند، این افکت همان گونه از نامش مشخص است، صرفا وظیفهی شبیهسازی حالت چشمان انسان در جابجایی بین مناطق روشن و تاریک بازی را برعهده دارد. مثلا اگر فرض کنیم شما از یک بخش با نور زیاد یا نور کم وارد صحنهی مورد بررسی ما شده باشید، نتیجه نهایی همانند یکی از تصاویر زیر خواهد شد و البته پس از مدتی همه چیز به حالت طبیعی آن باز خواهد گشت.
با این که همچنان مواردی همانند Grain، Color Grading و البته چند مورد دیگر هم وجود دارد که بیشتر جنبهی زیبایی بخشی به بازی ما را برعهده دارند و غالبا سازندگان امکان فعال یا غیرفعال کردن آنان توسط گیمر را در بخش تنظیمات گرافیکی بازی قرار میدهند و برای همین ما هم به شما تاکید کردیم که مقالهی معرفی تنظیمات گرافیکی بازیهای کامپیوتری را مطالعه کنید.
افکتهایی برای خلق نمایی تازه
شاید برای شما هم این سوال پیش آمده که بعضی از سازندگان چطور بعضی از نماهای بسیار دیدنی و جالب را درون بازیهای خود پیادهسازی میکنند. درست است که در مواردی همچون بازی Cuphead به دلیل نحوهی تولید، نمای بصری نهایی بسیار خاص و متمایز شده بود ولی گاهی در صورت وجود شرایط سختافزاری در این زمینه میتوانیم از روشهایی از قبیل استفاده از افکتهای پسپردازشی استفاده کنیم که کاملا نمای بصری بازی ما را تغییر میدهند.
باید به این نکته توجه داشته باشید که تقریبا تمامی موتورهای بازیسازی معروف اجازهی این مسئله را به شما میدهند که بتوانید افکتهای پسپرداشی مورد علاقهی خودتان را با استفاده از برنامهنویسی تولید کنید. البته در مواردی همانند موتور آنریل میتوانید با استفاده از قابلیتی همارز برنامهنویسی به نام Blueprint چنین کاری را بدون کدنویسی انجام دهید اما به هر حال انجام این کار آن چنان هم ساده و بدون مشکل نخواهد بود.
برای انجام چنین کارهایی شما باید به مقدار کافی با مبحثی به نام Shaders در علم گرافیک سهبعدی آشنا شوید چرا که غالب افکتهای پسپردازشی چنین عنصری برای کارهای خود به کار میگیرند. در یک نگاه ساده یک افکت پسپردازشی با استفاده از شیدرها به تصاویر رندر شده دسترسی پیدا میکند و با انجام محاسباتی روی مثلا کانالهای رنگی تصویر سعی میکند مقادیر جدیدی را متناسب با نیاز خود جایگزین مقادیر قبلی در هر پیکسل کند و به عنوان مثال یک تصویر رنگی را به یک تصویر سیاه و سفید تبدیل کند.
اگر به عنوان یک علاقمند، تازه کار خود را در زمینهی بازیسازی شروع کردهاید ما به شما توصیه میکنیم که فعلا سراغ چنین مبحثی در ساخت بازیها نروید ولی در هر صورت مطالعه در زمینه شیدرها و شیدر نویسی و همچنین موارد دیگری از قبیل متریالهای پسپردازشی (Post Process Materials) میتواند چراغهایی را برای شما در این مسیر روشن کند. اما به هر جهت نکتهی بسیار مهمی که همچنان در این زمینه وجود دارد، هزینهبر بودن چنین افکتهایی است و بعضا باید تمامی پیکسلهای موجود روی تصویر دوباره محاسبه شوند. به این خاطر صرفا به این موضوع این گونه نگاه نکنید که اگر نحوهی تولید یک افکت پسپردازشی را فراگرفتید مسئله تمام شده است. به عنوان بخش انتهایی مقاله هم شما را به دیدن چندین نمونهی بسیار جالب در زمینه چنین افکتهایی دعوت میکنم.
نظرات