نورپردازی در یونیتی برای بازی سازی
نویسنده : پشتیبان
دسته بندی : آموزش ها, بازی سازی یونیتی
درود همه ی کاربران عزیز مدرسه گرافیک پلاس و علاقه مندان به دنیای بازی سازی با یک آموزش یونیتی تحت عنوان نورپردازی در یونیتی . Unity در بین برنامه نویسان مشتاق بازی محبوبیت بیشتری پیدا کرده است. این به دلیل است که یونیتی به طور مستقیم از بسیاری از پلتفرم ها مانند محیط های موبایل، دسکتاپ و کنسول پشتیبانی می کند. علاوه بر این، استفاده از آن برای توسعه دهندگان یا استودیوهای کم درآمد رایگان است.
یونیتی از چندین فناوری و مؤلفه پشتیبانی می کند. برخی از اجزای کلیدی، تکنیک های روشنایی و روشنایی هستند. در یونیتی می توانید با شبیه سازی رفتار پیچیده نورها یا با استفاده از یک مدل نورپردازی ساده، یک صحنه را روشن کنید.
این آموزش بر توضیح نحوه عملکرد نورپردازی در Unity 5، انواع و خواص نورپردازی و نحوه استفاده از آنها برای ایجاد جلوه های روشنایی غنی تمرکز دارد.
نورپردازی در یونیتی مستقیم و غیر مستقیم
در یک سناریوی واقعی، شما دو نوع افکت نوری دارید: نور مستقیم و غیر مستقیم. روشنایی مستقیم همانطور که از نام آن پیداست، نوری است که مستقیماً از یک منبع نور (لامپ، خورشید یا موارد دیگر) می آید. از طرفی نور غیر مستقیم نوری است که از جسم دیگری می آید.
اجازه دهید هر دوی آنها را آزمایش و اجرا کنیم.
نور مستقیم در حال حاضر در صحنه شما قابل مشاهده است. همانطور که احتمالا متوجه شدید، در صحنه یک نور جهت دار به نام نور جهت دار دارید .
نورهای جهت دار بیشتر در صحنه های بیرونی برای نور خورشید و مهتاب استفاده می شوند. آنها بر تمام سطوح اشیاء در صحنه تأثیر می گذارند. آنها همچنین کمترین هزینه را برای پردازنده گرافیکی دارند.
می توانید Directional Light را انتخاب کنید و ویژگی های آن را در پنجره Inspector مشاهده کنید. شما متوجه چندین ویژگی جالب مانند نوع ، رنگ و شدت خواهید شد. می توانید با ویژگی های Color و Rotation بازی کنید و نتیجه را در زمان واقعی مشاهده کنید. با تغییر آن مقادیر، شما مستقیماً با نور جهت بازی می کنید.
در این لحظه، صحنه سه بعدی شما هیچ نور غیر مستقیمی ندارد. میتوانید با نزدیکتر کردن Sphere به دیوار سبز یا قرمز آن را بررسی کنید. رنگ کره تغییر نخواهد کرد.
یکی از راه های استفاده از نور غیر مستقیم، استفاده از GameObjects استاتیک است. به خاطر داشته باشید که استفاده از آبجکت های ثابت بازی می تواند عملکرد رندر بازی شما را بهبود بخشد، اما باعث کاهش کیفیت نیز می شود، بنابراین باید تعادل مناسب را برای بازی خود پیدا کنید.
یک جعبه مش جعبه را به صحنه خود اضافه کنید ( GameObject > 3D Object > Cube ) و آن را در کنار کره قرار دهید. نام آن را مکعب بگذارید .
Cube را انتخاب کنید و در داخل Inspector ویژگی Static را فعال کنید .
هنگامی که ویژگی Static را فعال می کنید ، Unity به طور خودکار یک نقشه نور برای آن شی ایجاد می کند و مدل روشنایی صحیح را اعمال می کند. اکنون میتوانید دوربین را به سمت مکعب حرکت دهید و نور غیرمستقیم را ببینید. رنگ سبز (در تصویر) یا قرمز اکنون در مکعب پخش می شود .
اگر جهت Directional Light را تغییر دهید ، متوجه خواهید شد که Unity به طور خودکار نقشه های نور را نیز به روز می کند.
نور غیرمستقیم که روی مکعب اعمال می شود به کره اعمال نمی شود زیرا کره ساکن نیست. میتوانید با ثابت کردن Sphere ( Inspector > Static ) این مشکل را حل کنید.
در این لحظه می توانید نور مستقیم و غیرمستقیم را به اجسام ساکن اضافه و پیکربندی کنید. با این حال، صحنه های سه بعدی از اشیاء پویا تشکیل شده اند. بنابراین، چگونه می توانیم چنین افکت هایی را روی آن اشیا اعمال کنیم؟ این سوال ما را به بخش بعدی هدایت می کند.
پروب های نور
هنگامی که صحنه شما حاوی اشیاء غیر ایستا است، باید از تکنیک های نورپردازی خاصی برای نورپردازی صحیح آنها استفاده کنید تا از صحنه جدا به نظر نرسند.
با استفاده از کاوشگرهای نوری و موقعیت آنها، می توانید از نقاط استراتژیک در صحنه نمونه برداری کنید. هر کاوشگر نوری می تواند از یک منطقه خاص نمونه برداری کند و سپس روشنایی آن منطقه خاص را محاسبه کند. این محاسبات به قدری سریع هستند که در طول بازی از آنها استفاده شود. استفاده از کاوشگرهای نوری از هرگونه قطع ارتباط بین نور اجسام متحرک و اشیاء ایستا نقشه برداری شده با نور در صحنه جلوگیری می کند.
کره یک شی پویا است، بنابراین، و برخلاف آنچه به نظر می رسد، به درستی روشن نشده است. اگر نور جهت را خاموش کنید، متوجه خواهید شد که تنها نوری که بر کره تأثیر می گذارد ، نور محیط است. برای روشن کردن درست کره ، باید از کاوشگرهای نور استفاده کنید.
برای افزودن کاوشگرهای نوری به قسمتی از صحنه خود، به Component > Rendering > Light Probe Group بروید. این یک گروه کاوشگر نور در صحنه شما ایجاد می کند.
مرحله بعدی قرار دادن پروب های گروه در موقعیت صحیح است. اکنون می خواهید آنها را نزدیک هر گوشه جعبه قرار دهید .
بهترین راه برای انجام این کار تغییر به نمای املایی است (با کلیک بر روی مکعب در گوشه سمت راست بالای صحنه). سپس، هر گره پروب نوری را انتخاب کنید و آن را به هر گوشه Box بکشید (مشابه تصویر بعدی).
این فرآیند را تا زمانی که همه گره ها را در موقعیت قرار دهید تکرار کنید.
صحنه هایی وجود دارند که برای روشن کردن صحیح اشیا به کاوشگر اضافی نیاز دارند. به منظور افزودن پروب های بیشتر، می توانید یک پروب را انتخاب کنید و سپس در قسمت Inspector ، روی دکمه Duplicate Selected کلیک کنید.
پس از تکثیر، باید گره جدید را در جای مناسب قرار دهید (گره تکراری در همان موقعیت انتخاب شده قرار می گیرد).
اگر نگاه دقیقتری به رابط در Inspector بیندازید ، متوجه میشوید که میتوانید پروبهای جداگانه ( افزودن پروب )، حذف پروبها ( حذف انتخابشده )، یا همه پروبها را از گروه ( انتخاب همه ) اضافه کنید.
برای مشاهده عملکرد کاوشگرهای نور، Sphere را انتخاب کنید و یک بدنه صلب به آن اضافه کنید ( افزودن جزء > صلب ). سپس، ماده ای را به برخورد دهنده اختصاص دهید. می توانید از مواد لاستیکی استفاده کنید.
اکنون، Sphere را نزدیک بالای جعبه قرار دهید و Play را فشار دهید . اکنون می توانید روشنایی مناسب کره را ببینید. برای مشاهده تفاوت ها، پروب های نور را غیرفعال کنید و صحنه را دوباره پخش کنید.
نور نقطه ای
چراغ های نقطه ای رایج ترین نور در بازی ها هستند. آنها معمولاً برای انفجار و لامپ استفاده می شوند. از آنجایی که آنها نور را در همه جهات ساطع می کنند، هزینه متوسطی روی پردازنده گرافیکی دارند. با این حال، محاسبه سایه ها هنگام استفاده از نورهای نقطه ای گران تر است.
با انتخاب GameObject > Light > Point Light ، یک نور نقطه اضافه کنید . بعد، چراغ Point را در داخل جعبه نزدیک به بالا قرار دهید.
نور نقطه را انتخاب کنید و به پارامترهای موجود در Inspector نگاهی بیندازید .
اولین پارامتر Type است . در اینجا می توانید نوع نوری را که می خواهید استفاده کنید تنظیم کنید. می توانید نقطه ، جهت ، نقطه یا ناحیه را انتخاب کنید. هر کدام یک جلوه نور خاص را ارائه می دهند. می توانید هر یک از گزینه ها را انتخاب کنید و نتایج را در زمان واقعی مشاهده کنید. با این حال، برای این آموزش شما از گزینه Point استفاده خواهید کرد. این یک جلوه لامپ ایجاد می کند (نور در همه جهات به یک اندازه می تابد).
پارامتر دوم پخت است . میتوانید آن را روی Realtime ، Baked یا Mixed تنظیم کنید. مقدار را به عنوان پیش فرض بگذارید. پارامتر Range تعیین می کند که چقدر نور از مرکز نور نقطه ساطع می شود . پارامتر Color رنگ نور ساطع شده را مشخص می کند.
Intensity روشنایی نور را مشخص می کند و Bounce Intensity ضریب شدت نور غیر مستقیم را مشخص می کند. Shadow Type ویژگی های سایه و انواع سایه را تعریف می کند. میتوانید آن را روی No Shadows ، Hard Shadows یا Soft Shadows تنظیم کنید. به یاد داشته باشید که سایه های روشن نقطه ای گران ترین برای موتور هستند، بنابراین در انتخاب این گزینه مراقب باشید.
اگر سایههای سخت یا سایههای نرم را انتخاب کنید ، سایهای را خواهید دید که توسط کره و نور نقطهای ایجاد میشود . هنگامی که مقدار Strength را تغییر میدهید ، سایه نیز ضعیف یا برجسته میشود. Resolution به شما امکان می دهد سطح جزئیات سایه ها را تعریف کنید. در نهایت، Bias و Normal Bias به شما امکان میدهند که افست مورد استفاده در هنگام مقایسه موقعیت پیکسل در فضای نور با مقدار نقشه سایه را پیکربندی کنید.
کوکی یک پارامتر اختیاری است که نشان دهنده یک کانال آلفای بافت است که به عنوان ماسک استفاده می شود و میزان روشنایی نور را در موقعیت های مختلف تعیین می کند. از آنجایی که این یک نور نقطه ای است، بافت مورد استفاده باید یک Cubemap باشد.
گزینه Draw Halo فقط یک هاله در اطراف منبع نور ارائه می کند. Flare اشاره ای به شعله ور شدن در موقعیت نور را تعریف می کند. Flare و Draw Halo می توانند هنگام اشکال زدایی صحنه سه بعدی و تنگناهای احتمالی مفید باشند.
حالت رندر تعیین می کند که نورپردازی در هنگام رندر کردن صحنه چقدر اهمیت دارد. هر چه مهم تر باشد، رندر فشرده تر خواهد بود. حالت رندر را می توان روی خودکار ، مهم یا غیر مهم تنظیم کرد. در نهایت، Culling Mask برای انتخاب یا حذف گروه هایی از اشیاء که تحت تأثیر نور نقطه قرار می گیرند استفاده می شود.
اکنون که تمام ویژگی های نور نقطه ای را دیدید، اجازه دهید در مورد نور مستقیم و غیرمستقیم هنگام استفاده از نورهای نقطه ای صحبت کنیم. هنگامی که یک بازی ایجاد می کنید، یکی از ویژگی های اصلی استفاده از نور و افکت های روشنایی است. با این حال، سناریوی نورپردازی سنگین منجر به بارگذاری سنگینتر، تنگناهای FPS و کار بیشتر برای CPU خواهد شد. بنابراین، به شما توصیه می شود که با ویژگی های Shadows Type و Baking بازی کنید تا عملکرد صحنه خود را متعادل کنید.
برای مثال، اگر Baking را روی Realtime و Shadow Type را روی Hard Shadows یا Soft Shadows قرار دهید، یک افکت سایه بسیار زیبا و واقعی بین Sphere و Box خواهید داشت . با این حال، اگر صحنه شما از نورهای زیادی تشکیل شده باشد، این تنظیمات می تواند برای CPU سنگین باشد.
چگونه آن مسئله را حل کنیم؟ در ابتدا می توانید پارامتر Baking را روی Bake تنظیم کنید. پس از انجام این کار، یونیتی به طور خودکار نقشه های نوری را برای این نور ایجاد می کند و عملکرد را به شما افزایش می دهد. با این حال، این افزایش عملکرد هزینههای خود را دارد: اکنون سایههایی را ندارید که توسط نور نقطهای بر روی اجسام پویا، مانند کره ، ریخته میشوند .
بهترین روش این است که هر نور را به صورت جداگانه تجزیه و تحلیل کنید و سپس بر اساس آن پیش بروید. به عنوان مثال، در این صحنه داشتن Realtime Baking و Hard Shadows منطقی تر است ، زیرا فقط یک منبع نور در داخل جعبه وجود دارد.
با این حال، اگر منبع نور شما یک مشعل در دیوار است، بهتر است Baking را روی Bake تنظیم کنید و اجازه دهید Unity نقشه های نور را تولید کند.
به یاد داشته باشید که مدیریت کیفیت و عملکرد بازی به عهده سازنده است. بنابراین، به خاطر داشته باشید که باید در حفظ این تعادل مراقب باشید، به خصوص اگر برای دستگاه های تلفن همراه توسعه می دهید.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام مدرسه گرافیک پلاس عضو شوید.
آخرین دیدگاه های شما