نورپردازی در بازی اندروید با Unity و بهینه‌سازی آن

نورپردازی در بازی‌های اندرویدی با Unity؛ آموزش و بهینه‌سازی حرفه‌ای

راهنمای جامع نور، سایه، Lightmap و افزایش عملکرد بازی‌های موبایل

آموزش نورپردازی محیط بازی اندرویدی با موتور Unity و بهینه‌سازی نور و سایه
نورپردازی یکی از مهم‌ترین عوامل در خلق محیط‌های جذاب و واقع‌گرایانه در بازی‌های اندرویدی است. در این راهنمای جامع، با انواع نور در Unity، نورپردازی بلادرنگ و پخته‌شده، سایه‌ها، Lightmap، Light Probe و تکنیک‌های بهینه‌سازی نور برای افزایش نرخ فریم و کاهش مصرف باتری در گوشی‌های اندرویدی آشنا می‌شوید.

آیا تا به حال به این فکر کرده‌اید که چرا دو بازی با مدل‌های سه‌بعدی و محیط‌های تقریباً یکسان، از نظر بصری کیفیت کاملاً متفاوتی دارند؟ چرا در یک بازی، یک غار تاریک و مرموز به نظر می‌رسد، اما در بازی دیگر همان محیط ساده، تخت و مصنوعی دیده می‌شود؟ پاسخ بسیاری از این تفاوت‌ها در یکی از مهم‌ترین بخش‌های گرافیک بازی، یعنی نورپردازی (Lighting)، نهفته است.

در بازی‌های اندرویدی، نورپردازی فقط ابزاری برای زیباتر کردن محیط نیست؛ بلکه بر خوانایی صحنه، حس عمق، تشخیص مسیر، فضاسازی، عملکرد گرافیکی، مصرف انرژی و تجربه بازیکن تأثیر می‌گذارد. در این مقاله یاد می‌گیریم نورپردازی چیست، در موتور بازی‌سازی Unity چگونه پیاده‌سازی می‌شود و چطور می‌توان بدون تحمیل هزینه سنگین پردازشی، به محیطی زیبا و حرفه‌ای دست یافت.

۱. نورپردازی در بازی چیست؟

نورپردازی در بازی‌سازی مجموعه‌ای از روش‌ها و محاسبات گرافیکی است که مشخص می‌کند نور چگونه به اشیای محیط برخورد می‌کند، چه مقدار از سطح آن‌ها روشن می‌شود، سایه‌ها در کجا شکل می‌گیرند و رنگ و ظاهر نهایی هر سطح چگونه به چشم بازیکن می‌رسد.

در یک محیط سه‌بعدی، وجود مدل‌های باکیفیت به‌تنهایی برای خلق تصویری باورپذیر کافی نیست. حتی یک مدل بسیار دقیق، اگر بدون نور مناسب نمایش داده شود، ممکن است تخت، بی‌روح یا فاقد عمق به نظر برسد. نورپردازی با ایجاد اختلاف روشنایی، سایه، بازتاب و تغییرات رنگی، به مغز بازیکن کمک می‌کند شکل، فاصله، جنس و موقعیت اشیا را بهتر درک کند.

در موتور Unity، نورپردازی با استفاده از مؤلفه‌هایی مانند Light، تنظیمات محیطی، متریال‌ها، شیدرها، سیستم سایه و قابلیت‌های نورپردازی از پیش محاسبه‌شده انجام می‌شود. بسته به نوع پروژه، این محاسبات ممکن است هنگام اجرای بازی انجام شوند یا نتایج آن‌ها از قبل در محیط ویرایشگر محاسبه و ذخیره شده باشند.

نکته کلیدی: هدف نورپردازی حرفه‌ای، صرفاً روشن کردن تمام محیط نیست. هدف، هدایت توجه بازیکن، ایجاد عمق بصری و ساختن فضای متناسب با سبک هنری بازی است؛ آن هم با هزینه پردازشی قابل‌قبول برای دستگاه هدف.

اجزای اصلی نورپردازی

نور مستقیم (Direct Lighting)

نوری که مستقیماً از منبع نور به سطح برخورد می‌کند؛ مانند نور خورشید روی دیوار یا نور چراغ‌قوه روی یک در.

نور غیرمستقیم (Indirect Lighting)

نوری که پس از برخورد با سطوح، به بخش‌های دیگر محیط می‌رسد. این نور در ایجاد حس طبیعی‌تر فضا و انتقال رنگ بین سطوح نقش دارد.

سایه (Shadow)

ناحیه‌ای که به دلیل مسدود شدن مسیر نور، روشنایی کمتری دریافت می‌کند و به تشخیص عمق و موقعیت اشیا کمک می‌کند.

بازتاب و درخشندگی (Reflection)

رفتار نور روی سطوح براق و فلزی که در ظاهر متریال‌ها، آب، شیشه و محیط‌های صنعتی اهمیت زیادی دارد.

۲. چرا نورپردازی در بازی‌های اندرویدی اهمیت دارد؟

توسعه بازی برای اندروید با توسعه بازی برای رایانه شخصی یا کنسول تفاوت دارد. گوشی‌های موبایل از نظر توان پردازشی، پهنای باند حافظه، ظرفیت حرارتی، مصرف باتری و قابلیت‌های گرافیکی یکسان نیستند. بنابراین، طراح باید بین کیفیت بصری و هزینه اجرای صحنه تعادل ایجاد کند.

افزایش کیفیت بصری محیط

با انتخاب درست رنگ نور، شدت روشنایی و جهت تابش، می‌توان یک محیط ساده را به جنگلی مرموز، شهری آینده‌نگر، سیاه‌چالی ترسناک یا فضایی آرام تبدیل کرد. در بسیاری از بازی‌ها، نورپردازی مؤثرتر از افزایش بی‌رویه تعداد چندضلعی‌های مدل‌ها، به بهبود برداشت بصری بازیکن کمک می‌کند.

هدایت توجه بازیکن

می‌توان از یک منبع نور گرم برای برجسته کردن در خروجی، از نور سرد برای نمایش مسیر فرعی و از تضاد روشنایی برای مشخص کردن یک آیتم مهم استفاده کرد. این روش باعث می‌شود بازیکن بدون نیاز به نشانه‌های اضافی، اطلاعات بصری موردنیاز را دریافت کند.

بهبود عملکرد و کنترل مصرف باتری

نورپردازی سنگین، به‌خصوص هنگامی که چندین منبع نور بلادرنگ با سایه‌های پویا فعال باشند، می‌تواند زمان رندر هر فریم را افزایش دهد. در نتیجه ممکن است نرخ فریم کاهش پیدا کند، دستگاه گرم شود یا مصرف انرژی افزایش یابد.

استفاده هدفمند از نورهای پخته‌شده، کاهش تعداد نورهای بلادرنگ و محدود کردن سایه‌های پویا می‌تواند هزینه رندر را کاهش دهد. البته نتیجه نهایی به سخت‌افزار، شیدرها، پیچیدگی صحنه و سایر بخش‌های رندر بستگی دارد و باید با اندازه‌گیری واقعی بررسی شود.

۳. انواع نور در موتور بازی‌سازی Unity

در Unity، مؤلفه Light چند نوع اصلی منبع نور در اختیار توسعه‌دهنده قرار می‌دهد. هر نوع برای موقعیت مشخصی مناسب است و انتخاب درست آن می‌تواند از محاسبات غیرضروری جلوگیری کند.

نور جهت‌دار (Directional Light)

این نور برای شبیه‌سازی منابع بسیار دور، مانند خورشید یا ماه، کاربرد دارد. پرتوهای آن در یک جهت مشترک حرکت می‌کنند و موقعیت مکانی منبع در صحنه، برخلاف جهت چرخش آن، عامل اصلی تعیین جهت تابش نیست.

در بسیاری از بازی‌های سه‌بعدی اندرویدی، یک Directional Light برای نور اصلی محیط کافی است. با تغییر زاویه آن می‌توان جهت سایه‌ها، حس ساعت روز و ظاهر کلی صحنه را کنترل کرد.

نور نقطه‌ای (Point Light)

نور نقطه‌ای از یک موقعیت مشخص در همه جهت‌ها منتشر می‌شود؛ مانند لامپ، شعله یا چراغی در یک اتاق. ویژگی Range محدوده اثر نور را تعیین می‌کند. محدود کردن این محدوده، به‌ویژه در صحنه‌های شلوغ، به کنترل نواحی تحت تأثیر نور کمک می‌کند.

نور متمرکز (Spot Light)

این نوع نور در یک مخروط مشخص منتشر می‌شود و برای چراغ‌قوه، پروژکتور، نورافکن یا برجسته کردن یک بخش از محیط مناسب است. زاویه مخروط، برد و شدت نور باید متناسب با اندازه صحنه و فاصله دوربین تنظیم شوند.

نور سطحی (Area Light)

نور سطحی برای شبیه‌سازی منبعی با سطح گسترده، مانند پنجره یا پنل روشنایی، استفاده می‌شود. پشتیبانی و رفتار آن به خط لوله رندر و حالت نورپردازی بستگی دارد؛ بنابراین نباید فرض کرد که تمام انواع نور سطحی در هر نسخه و تنظیمات URP برای نورپردازی بلادرنگ موبایل قابل استفاده‌اند. در بسیاری از پروژه‌ها، این نورها برای محاسبات پخته‌شده مناسب‌تر هستند.

نوع نور کاربرد اصلی ملاحظه عملکردی
Directional خورشید و نور اصلی محیط سایه‌های بلادرنگ آن می‌توانند پرهزینه باشند.
Point لامپ، شعله و چراغ تعداد منابع مؤثر و سایه‌های آن‌ها را کنترل کنید.
Spot چراغ‌قوه و نورافکن محدوده اثر و نیاز واقعی به سایه را بررسی کنید.
Area نور نرم از سطوح گسترده قابلیت‌های قابل استفاده به روش رندر و حالت نور وابسته‌اند.

۴. تفاوت Real-time، Baked و Mixed Lighting

یکی از مهم‌ترین تصمیم‌ها در نورپردازی بازی اندرویدی، انتخاب زمان انجام محاسبات نور است. در Unity می‌توان بسته به نیاز پروژه از نور بلادرنگ، نور پخته‌شده یا ترکیبی از این دو استفاده کرد.

نورپردازی بلادرنگ (Real-time Lighting)

در این روش، نورپردازی موردنیاز هنگام اجرای بازی محاسبه می‌شود. تغییر موقعیت منبع نور، حرکت اشیا و تغییرات صحنه می‌توانند در نتیجه نهایی منعکس شوند. این ویژگی برای چراغ‌قوه متحرک، نور انفجار، چراغ هشدار و سایر منابع متغیر بسیار مفید است.

نقطه ضعف اصلی، هزینه پردازشی است. به‌خصوص اگر منابع نور متعدد باشند و هرکدام سایه ایجاد کنند، بار کاری GPU و گاهی CPU افزایش پیدا می‌کند. از این رو بهتر است نور بلادرنگ را برای مواردی نگه داریم که واقعاً به تغییرات لحظه‌ای نیاز دارند.

نورپردازی پخته‌شده (Baked Lighting)

در این روش، محاسبات نورپردازی در مرحله توسعه و داخل Unity Editor انجام می‌شود. نتیجه در داده‌های نورپردازی ذخیره می‌شود و هنگام اجرای بازی، برای روشن کردن سطوح از آن داده‌ها استفاده می‌شود. نورهای پخته‌شده برای محیط‌های ثابت، مانند ساختمان‌ها، دیوارها، کف، راهروها و بخش‌های ثابت نقشه بسیار مناسب‌اند.

یکی از مهم‌ترین مزیت‌های Baked Lighting این است که هزینه محاسبه مستقیم نور در هر فریم برای این منابع حذف می‌شود. با این حال، داده‌های Lightmap فضای حافظه و حجم ساخت بازی را مصرف می‌کنند و کیفیت نتیجه به تنظیمات و زمان Bake بستگی دارد.

محدودیت مهم: نور پخته‌شده برای تغییرات دلخواه لحظه‌ای طراحی نشده است. اگر چراغ باید در طول بازی خاموش و روشن شود یا نور آن همراه با شخصیت حرکت کند، به طراحی ترکیبی یا راهکار دیگری نیاز دارید. همچنین برای روشنایی غیرمستقیم اشیای متحرک، معمولاً باید از Light Probe یا روش‌های مناسب دیگر کمک گرفت.

نورپردازی ترکیبی (Mixed Lighting)

در Mixed Lighting، بخشی از اطلاعات نور از قبل محاسبه می‌شود و بخشی از نورپردازی در زمان اجرا باقی می‌ماند. بسته به حالت انتخاب‌شده، می‌توان از این روش برای ترکیب نور محیطی ثابت با برخی ویژگی‌های نور بلادرنگ استفاده کرد.

برای مثال، در یک بازی ماجراجویی موبایل می‌توان نور کلی ساختمان را Bake کرد، اما چراغ‌قوه شخصیت را به‌صورت Real-time نگه داشت. به این ترتیب، محیط کیفیت بصری مناسبی خواهد داشت و تنها بخش‌های ضروری به محاسبات پویا نیاز پیدا می‌کنند.

ویژگی Real-time Baked Mixed
واکنش به تغییر نور مناسب محدود بسته به تنظیمات
هزینه نور در زمان اجرا معمولاً بیشتر معمولاً کمتر متغیر
فضای ذخیره‌سازی Lightmap ضروری نیست در صورت استفاده لازم است بسته به روش
مناسب برای نورهای متحرک محیط ثابت صحنه‌های ترکیبی

۵. Lightmap و Light Probe چیست؟

Lightmap؛ ذخیره اطلاعات نور روی سطوح

Lightmap نوعی بافت است که اطلاعات نورپردازی محاسبه‌شده را برای سطوح ذخیره می‌کند. در هنگام Bake، Unity اطلاعات مربوط به روشنایی سطوح سازگار با این روش را تولید می‌کند تا هنگام اجرای بازی، بدون تکرار همان محاسبات سنگین، از آن‌ها استفاده شود.

برای استفاده صحیح از Lightmap باید سطوح موردنظر برای نورپردازی پخته‌شده آماده باشند، تنظیمات نورپردازی صحنه بررسی شوند و برای اشیای لازم، UV مناسب Lightmap در دسترس باشد. گزینه تولید خودکار UV در مدل‌های واردشده نیز باید متناسب با کیفیت و نیاز پروژه تنظیم شود.

Light Probe؛ نورپردازی بهتر برای اشیای متحرک

مشکل زمانی ایجاد می‌شود که محیط دارای نور پخته‌شده باشد، اما شخصیت یا اشیای متحرک در همان محیط حرکت کنند. Lightmap به‌تنهایی راهکار عمومی مناسبی برای ثبت نور روی تمام سطوح متحرک نیست.

Light Probeها اطلاعات نور محیط را در نقاط مشخصی از فضای سه‌بعدی ذخیره می‌کنند. Unity می‌تواند هنگام حرکت یک شیء متحرک، روشنایی غیرمستقیم تقریبی را از Probeهای اطراف آن دریافت کند. این قابلیت به هماهنگ‌تر شدن ظاهر شخصیت با محیط کمک می‌کند.

ترکیب پیشنهادی: برای یک بازی سه‌بعدی موبایل با محیط ثابت و شخصیت متحرک، استفاده از Lightmap برای معماری ثابت و Light Probe برای شخصیت‌ها، نقطه شروع مناسبی است. کیفیت نهایی را با توجه به سبک هنری و دستگاه هدف تنظیم کنید.

۶. سایه‌ها و نقش آن‌ها در گرافیک بازی

سایه‌ها به بازیکن کمک می‌کنند فاصله اشیا از زمین، ارتفاع اجسام و رابطه فضایی عناصر را تشخیص دهد. بااین‌حال، سایه‌های پویا از بخش‌هایی هستند که می‌توانند هزینه قابل‌توجهی به رندر موبایل اضافه کنند.

سایه بلادرنگ (Real-time Shadow)

در این روش، سایه با توجه به وضعیت جاری نور و اشیا محاسبه می‌شود. اگر شخصیت حرکت کند یا منبع نور جابه‌جا شود، سایه نیز می‌تواند تغییر کند. برای شخصیت اصلی، دشمن متحرک یا یک چراغ‌قوه ممکن است این قابلیت ضروری باشد.

سایه پخته‌شده (Baked Shadow)

سایه حاصل از نورپردازی ثابت می‌تواند در داده‌های نور پخته‌شده ذخیره شود. این روش برای محیط‌هایی که معماری و نور اصلی آن‌ها تغییر نمی‌کند، به کاهش هزینه محاسباتی زمان اجرا کمک می‌کند.

چگونه هزینه سایه را کاهش دهیم؟

  • سایه بلادرنگ را فقط برای منابع نوری ضروری فعال کنید.
  • برای چراغ‌های تزئینی، بررسی کنید آیا واقعاً به سایه نیاز دارند.
  • رزولوشن Shadow Map را تا حدی کاهش دهید که کیفیت قابل‌قبول باقی بماند.
  • برد سایه و فاصله دوربین را متناسب با ابعاد صحنه تنظیم کنید.
  • در صورت امکان، از نور پخته‌شده برای ایجاد سایه‌های محیطی ثابت استفاده کنید.
  • نتیجه را روی دستگاه واقعی بررسی کنید؛ نمایشگر کوچک موبایل ممکن است جزئیات بسیار ریز سایه را کمتر از مانیتور نشان دهد.

۷. نورپردازی در URP و Unity 6

Universal Render Pipeline یا URP یکی از گزینه‌های مهم Unity برای ساخت بازی‌های موبایل و پروژه‌های چندسکویی است. این خط لوله رندر امکانات مختلفی برای کنترل نور، سایه، کیفیت تصویر و هزینه رندر فراهم می‌کند.

در URP، تنظیمات نور فقط به مؤلفه Light محدود نمی‌شوند. تنظیمات Universal Render Pipeline Asset، نوع مسیر رندر، کیفیت سایه‌ها، نورهای اضافی، شیدرها و ویژگی‌های فعال در Renderer نیز بر نتیجه نهایی اثر دارند.

تنظیمات مهم URP برای موبایل

تنظیم اقدام پیشنهادی دلیل
Additional Lights تعداد و حالت پردازش را محدود کنید. کاهش هزینه نورهای اضافی
Additional Light Shadows در صورت غیرضروری بودن غیرفعال کنید. کاهش هزینه سایه‌سازی
Main Light Shadows رزولوشن و فاصله سایه را متناسب کنید. کنترل کیفیت و زمان رندر
Soft Shadows روی دستگاه‌های ضعیف کیفیت پایین‌تر یا حالت خاموش را آزمایش کنید. کاهش هزینه پردازش سایه
HDR در صورت عدم نیاز واقعی، خاموش بودن آن را آزمایش کنید. کاهش برخی هزینه‌های رندر و حافظه
Render Scale در صورت محدودیت GPU، کاهش کنترل‌شده را آزمایش کنید. کاهش تعداد پیکسل‌های رندرشده

این موارد نسخه‌ای ثابت برای تمام پروژه‌ها نیستند. برای مثال، کاهش Render Scale می‌تواند وضوح تصویر را کم کند و غیرفعال کردن یک قابلیت نیز ممکن است ظاهر هنری بازی را تغییر دهد. هر تنظیم باید با توجه به گلوگاه واقعی پروژه آزمایش شود.

نکته درباره نسخه‌ها: نام و محل بعضی گزینه‌ها ممکن است میان نسخه‌های Unity و نسخه‌های پکیج URP تفاوت داشته باشد. قبل از اعمال تنظیمات، مستندات متناسب با نسخه نصب‌شده پروژه را بررسی کنید.

۸. چگونه نورپردازی بازی اندرویدی را بهینه کنیم؟

بهینه‌سازی نورپردازی یعنی دستیابی به کیفیت بصری موردنیاز با کمترین هزینه قابل‌قبول برای CPU، GPU، حافظه و مصرف انرژی. بهترین نتیجه معمولاً از ترکیب چند راهکار حاصل می‌شود، نه از غیرفعال کردن همه قابلیت‌های گرافیکی.

۱. از Baked Lighting برای محیط‌های ثابت استفاده کنید

اگر دیوارها، ساختمان‌ها، کف و بیشتر اجزای معماری تغییر نمی‌کنند، ابتدا بررسی کنید که آیا می‌توان نور اصلی آن‌ها را Bake کرد. این کار می‌تواند هزینه محاسبه نور را هنگام اجرا کاهش دهد. در مقابل، برای چراغ‌قوه یا نورهای متحرک، تنها از نور پخته‌شده انتظار رفتار پویا نداشته باشید.

۲. تعداد نورهای بلادرنگ را کاهش دهید

هر منبع نور اضافی ممکن است محاسبات بیشتری به رندر اضافه کند؛ البته میزان اثر به نوع نور، مسیر رندر، شیدر، سطح پوشش روی صفحه و تنظیمات بستگی دارد. به‌جای افزودن ده‌ها چراغ برای روشن کردن تمام گوشه‌ها، از نور اصلی مناسب، نور محیطی و نورهای موضعی هدفمند استفاده کنید.

۳. سایه را انتخابی فعال کنید

یک چراغ متحرک بدون سایه ممکن است برای بسیاری از افکت‌ها کافی باشد. اگر نورپردازی باید پویا باشد اما سایه ضرورت ندارد، غیرفعال کردن Cast Shadows می‌تواند هزینه را کاهش دهد. سایه را برای عناصری نگه دارید که نبود آن به وضوح یا حس عمق آسیب می‌زند.

۴. اندازه و کیفیت Lightmap را کنترل کنید

افزایش بیش از حد رزولوشن Lightmap، فضای حافظه و حجم داده‌های گرافیکی را بالا می‌برد. از طرف دیگر، رزولوشن بسیار پایین ممکن است باعث تاری نور، لکه‌های ناخواسته یا افت کیفیت سایه‌های پخته‌شده شود.

اندازه Lightmap را متناسب با اهمیت بصری سطح، فاصله آن از دوربین و جزئیات موردنیاز تعیین کنید. سطوح بزرگ و مهم ممکن است به تراکم بیشتری نیاز داشته باشند، اما سطوح کم‌اهمیت یا دور از دوربین معمولاً می‌توانند با تراکم کمتری نمایش داده شوند.

۵. از Light Probe برای شخصیت‌ها بهره ببرید

اگر شخصیت متحرک در محیطی با نور پخته‌شده حرکت می‌کند، Light Probe می‌تواند کمک کند روشنایی غیرمستقیم آن با محیط هماهنگ‌تر شود. قرارگیری Probeها باید با تغییرات محیط و مسیر حرکت شخصیت سازگار باشد؛ تعداد بیشتر همیشه به معنای نتیجه بهتر نیست.

۶. نورپردازی را با متریال و شیدر هماهنگ کنید

یک متریال با تنظیمات نامناسب می‌تواند باعث شود نورپردازی بیش از حد روشن، بیش از حد تاریک یا غیرطبیعی به نظر برسد. مقادیر Metallic و Smoothness، نرمال‌مپ‌ها، شفافیت و پیچیدگی شیدرها را بررسی کنید.

اگر سبک بازی شما کارتونی یا مینیمال است، ممکن است یک مدل نورپردازی ساده‌تر و شیدر سبک‌تر نتیجه هنری بهتری نیز ارائه دهد. هدف، واقع‌گرایی حداکثری نیست؛ هدف هماهنگی میان سبک بصری، عملکرد و تجربه بازیکن است.

۷. افکت‌های پس‌پردازش را محدود کنید

افکت‌هایی مانند Bloom، Ambient Occlusion و برخی جلوه‌های مبتنی بر تصویر می‌توانند کیفیت بصری را افزایش دهند، اما هزینه آن‌ها به پیاده‌سازی و دستگاه بستگی دارد. تنها افکت‌هایی را نگه دارید که تفاوت قابل‌توجهی در تصویر ایجاد می‌کنند و روی گوشی‌های هدف عملکرد مناسبی دارند.

۸. از چند سطح کیفیت استفاده کنید

همه دستگاه‌های اندرویدی توان گرافیکی یکسانی ندارند. طراحی پروفایل‌های کیفیت مختلف می‌تواند امکان ارائه سایه‌ها، نورهای اضافی و افکت‌های متناسب با سخت‌افزار را فراهم کند.

سطح کیفیت نورپردازی پیشنهادی هدف
پایین نور پخته‌شده، نورهای اضافی محدود، سایه پویا حداقلی دستگاه‌های ضعیف‌تر
متوسط نور پخته‌شده به همراه نور پویا و سایه انتخابی تعادل میان کیفیت و عملکرد
بالا نور پویا و افکت‌های بیشتر، در صورت تأیید تست عملکرد دستگاه‌های قدرتمندتر

این جدول یک نقطه شروع طراحی است، نه یک استاندارد سخت‌افزاری ثابت. برای انتخاب آستانه‌های واقعی باید دستگاه‌های هدف، سبک بازی و بودجه زمانی هر فریم مشخص باشند.

۹. آموزش عملی نورپردازی یک محیط در Unity

فرض کنید در حال ساخت یک بازی ماجراجویی سه‌بعدی برای اندروید هستید. بازیکن وارد یک محوطه جنگلی می‌شود؛ نور خورشید از میان درختان می‌تابد، یک مسیر به سمت غار ادامه دارد و شخصیت باید در تمام محیط به‌خوبی دیده شود.

مرحله اول: آماده‌سازی صحنه

  1. یک صحنه سه‌بعدی بسازید و کف، دیوارها، درختان و سایر اجزای اصلی را اضافه کنید.
  2. مشخص کنید کدام اشیا ثابت هستند و کدام در طول بازی حرکت می‌کنند.
  3. برای اشیای ثابت، در صورت سازگاری با روش انتخابی، وضعیت Static یا تنظیمات Contribute GI را فعال کنید.
  4. مطمئن شوید مدل‌ها و متریال‌ها برای رندر انتخابی پروژه مناسب‌اند.

مرحله دوم: تنظیم نور اصلی

یک Directional Light به‌عنوان نور اصلی محیط انتخاب کنید. زاویه نور را به شکلی تنظیم کنید که فرم زمین و درختان مشخص باشد. شدت نور و رنگ آن را با توجه به فضای موردنظر تنظیم کنید؛ برای مثال، نور گرم می‌تواند حس غروب را تقویت کند و نور سرد برای فضای مه‌آلود یا شبانه مناسب‌تر باشد.

مرحله سوم: نور محیطی و کنتراست

نور محیطی را در تنظیمات Lighting صحنه بررسی کنید. اگر بخش‌های سایه بیش از حد تاریک هستند، به‌جای افزودن چندین منبع نور بلادرنگ، ابتدا نور محیطی و راهکارهای نورپردازی غیرمستقیم را بررسی کنید. در عین حال، از روشن کردن بیش از حد سایه‌ها که باعث از بین رفتن کنتراست می‌شود خودداری کنید.

مرحله چهارم: افزودن نورهای موضعی

برای دهانه غار از یک نور موضعی با رنگ و شدت متناسب استفاده کنید. اگر این نور فقط برای ایجاد جلوه‌ای ثابت در محیط است، امکان Bake کردن آن را بررسی کنید. اگر قرار است بازیکن با چراغ‌قوه محیط را روشن کند، نور باید متناسب با نیاز بازی پویا باشد.

مرحله پنجم: تنظیم Lightmap و Bake

  1. در تنظیمات Lighting، روش مناسب نورپردازی پخته‌شده را انتخاب کنید.
  2. اشیای ثابت را برای مشارکت در نورپردازی غیرمستقیم آماده کنید.
  3. کیفیت Lightmap و تنظیمات مربوط به UV را بررسی کنید.
  4. فرایند Bake را اجرا کنید و نتیجه را در Scene View ارزیابی کنید.
  5. در صورت مشاهده لکه‌های نور، لبه‌های نامناسب یا افت کیفیت، UV، رزولوشن و تنظیمات نور را اصلاح کنید.

مرحله ششم: نورپردازی شخصیت متحرک

اگر شخصیت در محیط ثابت حرکت می‌کند، Light Probeها را در مسیرهای حرکتی و نواحی دارای تغییرات محسوس نور قرار دهید. سپس تنظیمات دریافت نور غیرمستقیم شخصیت را بررسی کنید تا روشنایی آن نسبت به محیط بیش از حد متفاوت نباشد.

مرحله هفتم: آزمایش روی گوشی اندرویدی

صحنه را روی دستگاه واقعی اجرا کنید. نرخ فریم، زمان رندر، حافظه مصرفی، دمای دستگاه و کیفیت نهایی تصویر را بررسی کنید. در صورت مشاهده افت عملکرد، ابتدا با Profiler مشخص کنید که مشکل از GPU، CPU یا عامل دیگری است و سپس تنظیمات نورپردازی را تغییر دهید.

نتیجه مورد انتظار: یک نور اصلی کنترل‌شده، روشنایی پخته‌شده برای محیط ثابت، نورهای پویا برای تعاملات ضروری و سایه‌های انتخابی. این ترکیب در بسیاری از پروژه‌های موبایل نقطه شروع مناسبی است؛ اما کیفیت نهایی باید با تست و اندازه‌گیری تأیید شود.

۱۰. اندازه‌گیری عملکرد و عیب‌یابی نورپردازی

بهینه‌سازی بدون اندازه‌گیری ممکن است به کاهش کیفیت تصویر منجر شود، بدون آنکه مشکل اصلی را برطرف کند. برای همین، پیش از تغییرات گسترده، یک نسخه پایه از عملکرد بازی ثبت کنید.

مواردی که باید اندازه‌گیری شوند

  • Frame Time: زمان صرف‌شده برای تولید هر فریم؛ برای مثال، هدف ۶۰ فریم در ثانیه تقریباً معادل ۱۶٫۶۷ میلی‌ثانیه برای هر فریم است.
  • GPU Usage و GPU Time: برای بررسی هزینه رندر، نورها، سایه‌ها و افکت‌های تصویری.
  • CPU Time: برای بررسی هزینه آماده‌سازی صحنه، پردازش‌های بازی و ارسال دستورات رندر.
  • Memory Usage: برای کنترل مصرف حافظه، به‌خصوص داده‌های Lightmap و بافت‌ها.
  • Thermal Behavior: برای بررسی افت عملکرد پس از اجرای طولانی‌مدت روی دستگاه واقعی.

برای بررسی دقیق‌تر، از Unity Profiler و ابزارهای تحلیل گرافیکی متناسب با دستگاه استفاده کنید. اگر GPU گلوگاه است، کاهش رزولوشن سایه، تعداد نورهای مؤثر یا هزینه شیدر می‌تواند ارزش آزمایش داشته باشد. اگر CPU گلوگاه است، باید عوامل دیگری مانند تعداد اشیا، فراخوانی‌های رندر و پردازش‌های صحنه نیز بررسی شوند.

چرا بازی پس از چند دقیقه کند می‌شود؟

اگر عملکرد بازی در ابتدا مناسب است اما بعد از چند دقیقه افت می‌کند، ممکن است دستگاه به محدودیت حرارتی رسیده باشد. در این شرایط، کاهش فشار گرافیکی پایدار می‌تواند کمک‌کننده باشد؛ اما برای یافتن علت دقیق باید عملکرد بازی در یک بازه زمانی طولانی و روی دستگاه‌های هدف اندازه‌گیری شود.

۱۱. اشتباهات رایج در نورپردازی بازی موبایل

  • استفاده از تعداد زیادی نور پویا: هر نور اضافه باید دلیل مشخصی در طراحی صحنه داشته باشد.
  • فعال کردن سایه برای همه چراغ‌ها: سایه پویا را براساس نیاز بصری و بودجه پردازشی انتخاب کنید.
  • استفاده از Lightmap با رزولوشن بسیار بالا: کیفیت بیشتر باید با مصرف حافظه و حجم داده‌ها سنجیده شود.
  • بی‌توجهی به شخصیت‌های متحرک: نورپردازی ثابت محیط به‌تنهایی برای هماهنگی کامل نور روی اشیای متحرک کافی نیست.
  • تنظیم صحنه فقط براساس نمای Editor: کیفیت و عملکرد نهایی باید روی گوشی واقعی بررسی شوند.
  • نادیده گرفتن متریال‌ها: متریال نامناسب می‌تواند حتی با نور خوب، نتیجه‌ای غیرطبیعی تولید کند.
  • غیرفعال کردن همه ویژگی‌های گرافیکی: هدف بهینه‌سازی متعادل است، نه قربانی کردن غیرضروری کیفیت بصری.

۱۲. جمع‌بندی؛ چگونه نورپردازی حرفه‌ای و سبک بسازیم؟

نورپردازی یکی از ابزارهای اساسی طراحی محیط در بازی‌سازی است. در بازی‌های اندرویدی، انتخاب درست روش نورپردازی اهمیت بیشتری پیدا می‌کند؛ زیرا توسعه‌دهنده باید در کنار کیفیت تصویر، عملکرد پایدار و مصرف منطقی منابع را نیز در نظر بگیرد.

در Unity، ترکیب نورهای بلادرنگ و پخته‌شده، استفاده از Lightmap برای سطوح ثابت، Light Probe برای نورپردازی غیرمستقیم اشیای متحرک و کنترل تعداد نورهای دارای سایه می‌تواند نقطه شروع مناسبی باشد. در کنار این روش‌ها، انتخاب URP، تنظیم شیدرها، کنترل افکت‌های پس‌پردازش و استفاده از Profiler نقش مهمی در رسیدن به نتیجه مطلوب دارند.

به یاد داشته باشید که نورپردازی بهتر لزوماً به معنی نور بیشتر، سایه‌های بیشتر یا تنظیمات گرافیکی سنگین‌تر نیست. یک طراحی هدفمند با چند منبع نور مناسب می‌تواند از صحنه‌ای پیچیده با منابع نوری متعدد، نتیجه بصری بهتر و عملکرد پایدارتری ارائه دهد.

اگر در آغاز مسیر بازی‌سازی هستید، پیشنهاد می‌شود یک صحنه کوچک بسازید و چند حالت نورپردازی را روی آن مقایسه کنید. با اندازه‌گیری عملکرد و مشاهده نتیجه روی دستگاه واقعی، می‌توانید به‌تدریج یک گردش کار نورپردازی متناسب با سبک بازی و محدودیت‌های سخت‌افزاری خود ایجاد کنید.

۱۳. سؤالات متداول درباره نورپردازی در Unity

آیا نورپردازی Baked همیشه بهترین انتخاب برای بازی اندرویدی است؟

خیر. برای محیط‌های ثابت بسیار مفید است، اما برای نورهایی که باید در زمان اجرا تغییر کنند، به نور بلادرنگ یا روش ترکیبی نیاز دارید. هزینه حافظه و حجم Lightmap نیز باید در نظر گرفته شود.

آیا URP برای ساخت بازی سه‌بعدی اندروید مناسب است؟

URP یکی از گزینه‌های مناسب برای پروژه‌های موبایل است، اما نتیجه به تنظیمات رندر، شیدرها، ویژگی‌های فعال و سخت‌افزار هدف بستگی دارد. انتخاب آن به‌تنهایی عملکرد بالا را تضمین نمی‌کند.

چرا Lightmap روی شخصیت متحرک تأثیر مشابهی ندارد؟

Lightmap اطلاعات نور را روی سطوح سازگار با آن ذخیره می‌کند. برای روشنایی غیرمستقیم تقریبی شخصیت‌ها و اشیای متحرک، Light Probe یا راهکار مناسب دیگری لازم است.

چطور تعداد نورهای بازی را کاهش دهم، بدون اینکه محیط تاریک شود؟

ابتدا نور اصلی و نور محیطی را تنظیم کنید، نورهای ثابت را در صورت امکان Bake کنید و نورهای پویا را فقط برای بخش‌های ضروری نگه دارید. سپس نتیجه را با تنظیم شدت نور و متریال‌ها اصلاح کنید.

برای بهینه‌سازی نورپردازی، ابتدا کدام تنظیم را تغییر دهم؟

ابتدا با Profiler مشخص کنید گلوگاه اصلی کجاست. اگر هزینه رندر نور بالاست، تعداد نورهای پویا، سایه‌های بلادرنگ، رزولوشن سایه و پیچیدگی شیدرها را به‌ترتیب بررسی کنید. تغییرات را جداگانه آزمایش کنید تا اثر هرکدام مشخص باشد.


منابع تکمیلی برای یادگیری نورپردازی در Unity

برای آشنایی عمیق‌تر با تنظیمات نورپردازی و روش‌های بهینه‌سازی، مستندات رسمی Unity منابع مناسبی هستند. توجه داشته باشید که نام گزینه‌ها و برخی قابلیت‌ها ممکن است براساس نسخه موتور و پکیج URP متفاوت باشند.

مهدی یدی

مهدی یدی

یک برنامه نویس ☕ ASP.Net Core - MAUI - WPF - Unity - ML.Net فعالیت می کنم.از تولید محتوا لذت میبرم. و دوست دارم محتوای پارسی را بروز نگهدارم 😎

ارسال دیدگاه

کد امنیتی

دیدگاه‌های کاربران (0)

هنوز هیچ دیدگاهی برای این مقاله ثبت نشده است. اولین نفری باشید که دیدگاه خود را مطرح می‌کند!

Captcha Active