آموزش بازی سازی: مقدمهای بر نورپردازی
همانند آنچه در صنعت سینما، تلویزیون و تئاتر وجود دارد، نورپردازی بخشی ضروری در تولید بازیهای ویدیویی است و بدون توجه به این مسئله امکان دستیابی به اتمسفرهای دلخواه امکانپذیر نخواهد بود. از محیطهای تاریک و وحشتناک بازی Resident Evil گرفته تا علفزارهای وسیع و سرسبز بازی Witcher، عنصر نورپردازی بخش جداییناپذیر این جلوههای بصری شگفتانگیز است.
شاید در بازیهای کوچک این مسئله جدی گرفته نشود ولی مدت زمان زیادی است که در صنعت بازیهای ویدیویی شغلی با عنوان Lighting Artist وجود دارد. با این که معمولا برای همه ما مفهوم نورپردازی در بستر بازیهای سهبعدی همراه شده است اما این مسئله دلیلی بر نبود چنین چیزی در بازیهای دوبعدی نیست. البته بر خلاف بازیهای سهبعدی معمولا میتوان با استفاده از تکنیکهایی مسئلهی نورپردازی در بازیهای دوبعدی را شبیهسازی (نه پیادهسازی) کرد و از هزینههای سنگین نورپردازی واقعی دوری جست. نمونهی بارز چنین مسئلهای را میتوانیم بازی Limbo بنامیم که بدون استفاده از نورپردازی توانسته یک اتسمفر زیبا و نفسگیر را شبیهسازی کند.
نمونهی دیگر این مسئله را میتوانیم بازی زیبای Ori And The Blind Forest بنامیم که در آن هم از تکنیک لایههای پارالاکس (Parallax Layers) به فراوان استفاده شده است. البته این مسئله تمام ماجرا نیست و بخشی از مسئله را هم افکتهای پسپردازشی تشکیل میدهد. تکنیک لایههای پارالاکس به خصوص در بازیهای دوبعدی بسیار کاربردی است و برای همین در مقالههای آتی به صورت دقیقتر این مسئله را بررسی خواهیم کرد.
وظایف و مهارتهای یک نورپرداز
اما برای شروع بررسی مسئلهی نورپردازی بهتر است با یکدیگر نگاهی به وظایف یک نورپرداز بیاندازیم. در یک نگاه ساده وظیفهی هنرمند نورپرداز ساخت و مدیریت نورها و سایههای مورد نیاز محیطهای یک بازی است. تعجب نکنید، هر جا صحبت از روشنایی باشد، قطعا سایهها نیز به آن جا قدم خواهند گذاشت با این تفاوت که در دنیای بازیسازی شما روی سایهها هم کنترل زیادی دارید و میتوانید ویژگیهای سایههای اجسام را هم دستکاری کنید. نگرانی اصلی یک نورپرداز شبیهسازی دقیق حال و هوایی است که طراحان هنری (شخصیتها، محیطها و …) و طراحان داستان به دنبال آن هستند. داستان بازی از این جهت برای نورپرداز اهمیت دارد که در سادهترین شکل ممکن میتواند بر اساس آن ساعتهای روزانه و البته جایگاه منابع نوری درجه اول همانند خورشید را بفهمد. همچنین یک نورپرداز باید آشنایی کاملی با شرایط محیطی مختلف و تاثیر آن بر منابع نوری داشته باشد. دقت کنید که در دنیای بازیسازی معمولا این گونه نیست که ما یک مه غلیظ درست کنیم و به راحتی نور یک لامپ مثلا رشتهای را در میان آن بتابانیم و انتظار داشته باشیم دقیقا همانند واقعیت بقیه چیزها به صورت خودکار انجام شود. در بیشتر موارد اصلا هیچ کنشی بین مثلا آن مه شبیهسازی شده و نوری که میتابد وجود ندارد و این نورپردازان هستند که از همان ابتدا کیفیت نور را همانند نور موجود در یک فضای مه آلود آماده میکنند.
در کنار تمامی این موارد و با توجه به هزینهبر بودن مسئلهی نورپردازی، یک نورپرداز باید آشنایی کاملی با مباحث رندرینگ، مدلسازی و تکنیکهایی از قبیل Lightmaping در آنها داشته باشد تا بتواند احتیاجهای سختافزاری این بخش را به حداقل برساند.
منابع روشنایی
برای شروع بهتر است کمی در مورد منابع روشنایی و چند خصوصیت بارز آنها صحبت کنیم. طبق قانون مربع معکوس، شما هر چقدر از یک منبع نوری فاصله میگیرید، شدت نوری که به شما میرسد با نسبت مربع فاصله کاهش مییابد و برای همین اگر میخواهید در فاصلهای دو برابر فاصلهی فعلی همان شدت نور قبلی را داشته باشید باید شدت منبع نوری خود را چهار برابر کنید.
وقتی صحبت از میزان شدت منبع نوری میشود نباید این مسئله را با اندازهی منبع نوری اشتباه بگیرید. هر منبع نوری همانند لامپهای رشتهای، مهتابی و حتی صفحهی نمایشگرها دارای اندازهی مشخصی است. اما چرا این اندازه برای ما اهمیت دارد؟ به عنوان مثال به دو عکس زیر نگاه کنید.
در تصویر سمت چپ اندازهی منبع روشنایی یک چهارم منبع روشنایی در تصویر سمت راست است. همان گونه که مشاهده میکنید با این که عناصر موجود در تصویر ثابت هستند، ام در تصویر سمت چپ جزییات تصویر به مراتب نمای بیشتری به نسبت تصویر سمت راست دارند. به طور ساده در مواردی که شما به نشان دادن جزییات بیشتر احتیاج دارید، باید سعی کنید تا حد ممکن از منابع نوری با اندازههای کوچکتر استفاده کنید. در نقطهی مقابل برای دستیابی به سطوح نرمتر بهتر است اندازهی منبع نوری خود را افزایش دهید. معمولا اگر به پشت صحنهی ضبط برنامههای ویدیویی همانند بسیاری از برنامههای صدا و سیما و حتی برنامههایی همانند ویدیوهای زومجی دقت کرده باشید، دیدهاید که معمولا منابع نوری آنها وسیعتر و بزرگتر از منابع معمولی درون خانهها است. دلیل این مسئله تنها ایجاد نمای بصری بهتر از چهرها و ظاهرهای افراد جلوی دوربین است. یک نورپردازی صحیح میتواند با حذف چین و چروکهای صورت سن و قیافه افراد را چندین سال جوانتر نشان بدهد.
همچنین همهی ما به خوبی میدانیم که برای مشاهدهی یک جسم باید در ابتدا نور به آن تابیده و سپس نور بازتابیده شده آن به چشم ما برسد. اما بدون شک در بسیاری از زمانها حجم بالایی از پرتوهای تابیده شده یه یک جسم به چشم ما نمیرسد. این پرتوها در محیط انعکاس پیدا میکنند و با این که به مرور انرژی خود را از دست میدهند اما هر پرتو به سهم خودش هم که شده مقداری از فضای اطراف را روشن میکند. همانند نور چراغقوهای که اگرچه یک دایره مشخص را روی دیوار روشن میکند، اما به خاطر بازتابش پرتوهای آن به صورت حداقلی هم که شده تاثیری هم روی روشنایی محیط اطراف دارد. به این عمل انعکاس نور در بین سطوح و انتقال روشنایی در جهات مختلف را Global Illumination یا به اختصار GI گویند. مثلا به عکس زیر دقت کنید. در این حالت فرض شده که صرفا پرتوهای اولیهای که پس از یک بار بازتابش به طور مستقیم به چشم ما میرسند محاسبه شوند.
همان گونه که مشاهده میکنید، با قرار داشتن منبع نوری در سمت چپ عملا سایه کاملی فضای داخلی دیوارها را پوشانده و عملا نمیتوان فضای داخلی آنها را مشاهده کرد. همچنین سایهی گوی شیشهای ما هم کاملا سیاه و تخت روی زمین تولید شده است. اما به نظر شما پس از محاسبهی عمل GI چه تغییری در نمای منظره ما ایجاد خواهد شد؟
با این که در این عکس عملا GI به محاسبهی یک پرش محدود شده ولی تاثیر آن به وضوح قابل مشاهده است. البته همیشه این گونه نیست که هر چقدر مقدار پرش محاسبه شده را بالا ببریم نتیجهی بهتری کسب خواهیم کرد. گاهی باید به خاطر مسائل بهینهسازی به مقدار مشخصی اکتفا کرد. مثلا اگر به عکسهای زیر دقت کنید میتوانید نکتهای را که بیان کردیم بهتر درک کنید.
منابع نوری
حال که مقداری در مورد ویژگیهای منابع نوری صحبت کردیم نوبت آن رسیده با انواع منابع نوری به خصوص در دنیای هنرهای دیجیتالی آشنا شویم.
نور نقطهای (Point light)
سادهترین و متداولترین منبع نوری و ویژگی آن پرتودهی در تمامی جهات فضای سهبعدی است. نمونهی بارز چنین چیزی در دنیای واقعی را میتوانیم لامپهای رشتهای یا حتی خورشید در نظر بگیریم.
این منبع نوری میتواند برای شبیهسازی لامپهای سقفی خانه و هر چیزی که شبیه آن است مورد استفاده قرار بگیرد. البته صرفا نباید نگاه شما به منابع نوری به لامپها محدود شود. گاهی برای شبیهسازی نورافشانیهای یک انفجار یا جرقههای آتش، استفاده از تعدادی منبع نور نقطهای میتواند گزینهی خوبی باشد.
نور موضعی (Spot light)
بسیار به منبع نور نقطهای شباهت دارد با این تفاوت که برخلاف آن به تابش در زاویهی مشخصی محدود شده است.
این محدودیت نور موضعی باعث شده است که این منبع نوری برای شبیهسازی روشنایی چراغهای برق، چرغ قوه و هر چیزی که به نوعی زاویه تابش آن محدود شده است مناسب باشد. ویژگیهای منحصر به فرد این منبع نوری این است که منطقهی تابش آن دارای دو شعاع مختلف بیرونی و درونی است. شعاع بیرونی را میتوان با بیشتر کردن زاویهی تابش نور گسترش داد. اما شعاع درونی معمولا تحت پارامتری به نام Blend در نرمافزارها و موتورهای بازیسازی و زیر بخش خصوصیات منبع نور وجود دارد. به دلیل این که معمولا منابع نوری در دنیای واقعی همانند لامپهای رشتهای واقعا نقطهای نیستند، بنابر این به ندرت پیش میآید که ما شرایطی همانند حالت زیر را داشته باشیم.
در حالت بالا مرز بین سایه و روشنایی دقیقا مشخص است. اما در واقعیت تقریبا همانند آن چیزی است که در عکس چراغقوه نشان داده شده است. برای همین خصوصیتی به نام Blend برای منبع نور موضعی تعریف شده تا بتوان چنین چیزی را در دنیای دیجیتال هم پیادهسازی کرد.
نور جهتدار (Directional light)
در همان ابتدایی که چه چنین منبعی به بازی شما اضافه شود، تمامی جهان بازی شما به یکباره روشن میشود. دلیل این مسئله این است که خصوصیات این منبع نوری همانند خصوصیات منبع نوری زمین یعنی خورشید است. برای همین این که شما این منبع نوری را در کجای محیط بازی خود قرار دهید اهمیتی ندارد چرا که به محض قرارگیری آن در دنیای بازی، پرتوهای این منبع تمامی محیط بازی شما را تحت پوشش قرار خواهد داد.
در این منبع نوری به غیر از تغییر شدت نور، تنها خصوصیت قابل تغییر، زاویه تابش است که تاثیر آن همانند این است که شما بخواهید زاویه تابش خورشید را در آسمان تغییر دهید. زاویههای ۰ و ۱۸۰ دقیقا زاویه خورشید در طلوع و غروب خورشید را برای منبع نوری شما تداعی خواهد کرد.
نور ناحیهای (Area light)
تنها تفاوت این منبع نوری با منابع نوری نقطهای و موضعی در این است که در آن دیگر منبع تابش پرتوهای نور، یک نقطه نیست و ما با یک صفحه منتشر کننده پرتوهای نور طرف هستیم.
در دنیای بازیسازی به خصوص در مواقعی که میخواهیم به صورت کم هزینه، نور خورشید یا هر چیزی شبیه به آن را شبیهسازی کنیم میتوانیم از این منبع نوری استفاده کنیم. به عنوان مثال، میتوانید یک عدد از این منابع نوری را در پشت پنجرهای قرار داده و طوری جلوه کنید که گویی در فضای بیرون خورشید در حال تابیدن است.
متریالهای تابنده (Emissive Materials)
شاید صحبت در مورد متریالها کمی زود باشد ولی فعلا در همین حد بدانید که ما میتوانیم مدلهای سهبعدی خودمان را با متریالهایی بپوشانیم که از خودشان نور منتشر میکنند.
البته در این حالت ما صرفا میتوانیم شدت و رنگ نور تولید را تغییر دهیم و به نسبت منابع دیگر دست ما برای تغییر ویژگیهای منبع نور باز نیست. روش ساخت چنین متریالهایی در جای خودش توضیح داده خواهد شد.
نور محیطی (Ambient light)
گاهی ما صرفا به این احتیاج داریم که میزان روشنایی محیطی را در همهی نقاط به طور یکسان افزایش دهیم. نور محیطی همین گونه است و با توجه به این که ساختار آن همانند حجمی از نور است، هیچ سایهی جدیدی به سایههای قبلی شما هم اضافه نخواهد کرد.