بهینه‌سازی نور در Unity 6 برای موبایل و کامپیوتر

بهینه‌سازی نورپردازی در Unity 6؛ افزایش FPS و کاهش مصرف GPU در بازی‌ها

راهنمای جامع Lighting Optimization برای Android، iOS، Windows و سایر پلتفرم‌ها

Unity 6 lighting optimization and performance tuning for mobile and desktop games
در بازی‌سازی با Unity، نورپردازی یکی از عوامل تأثیرگذار بر کیفیت بصری و عملکرد بازی است. استفاده بیش از اندازه از نورهای Real-time، سایه‌های پویا و افکت‌های گرافیکی می‌تواند باعث افت FPS، افزایش مصرف GPU و داغ شدن دستگاه‌های موبایل شود. در این مقاله با روش‌های حرفه‌ای بهینه‌سازی نور در Unity 6، تفاوت Baked و Realtime Lighting، تنظیم سایه‌ها، Light Probes و تکنیک‌های مخصوص Android، iOS و Windows آشنا می‌شوید.
نورپردازی در بازی‌سازی فقط یک ابزار زیبایی‌شناسی نیست؛ بلکه یکی از عوامل مهم در عملکرد فنی بازی محسوب می‌شود.

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

در این مقاله یاد می‌گیریم چگونه سیستم نورپردازی Unity 6 را به شکلی طراحی کنیم که هم کیفیت بصری مناسبی داشته باشد و هم روی دستگاه‌های مختلف، از گوشی‌های اقتصادی Android و iPhone گرفته تا کامپیوترهای قدرتمند Windows، عملکرد قابل قبولی ارائه دهد.

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

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

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

GPU Usage

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

CPU Usage

مدیریت تعداد نورها، آبجکت‌های تحت تأثیر نور و سیستم رندرینگ می‌تواند هزینه پردازش سمت CPU را کاهش دهد.

Memory Usage

مدیریت Lightmap، Reflection Probe و بافت‌های مورد استفاده در نورپردازی به کنترل مصرف حافظه کمک می‌کند.

Battery & Temperature

کاهش پردازش‌های غیرضروری گرافیکی در موبایل می‌تواند به کاهش مصرف انرژی و تولید گرما کمک کند.

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

۲. انتخاب Render Pipeline مناسب

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

Universal Render Pipeline (URP)

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

  • پشتیبانی از Baked و Realtime Lighting
  • پشتیبانی از Shadow Mapping
  • امکان کنترل تعداد Additional Lights
  • پشتیبانی از Forward و Forward+ Rendering
  • امکان استفاده از Adaptive Probe Volumes در نسخه‌های سازگار

High Definition Render Pipeline (HDRP)

HDRP برای پروژه‌هایی طراحی شده است که کیفیت گرافیکی بالا و امکانات پیشرفته نورپردازی در اولویت آن‌ها قرار دارد. این Pipeline امکانات گسترده‌تری برای نورپردازی واقع‌گرایانه، بازتاب‌ها، Volumetric Effects و جلوه‌های بصری پیشرفته ارائه می‌دهد.

با این حال، HDRP برای بازی‌های موبایل Android و iOS انتخاب مناسبی نیست. اگر هدف شما انتشار بازی روی گوشی و کامپیوتر به‌صورت هم‌زمان است، بهتر است از ابتدا URP را به‌عنوان گزینه اصلی بررسی کنید.

Built-in Render Pipeline

Built-in سیستم رندرینگ قدیمی‌تر Unity است که همچنان در بسیاری از پروژه‌های موجود استفاده می‌شود. این سیستم امکانات نورپردازی مناسبی دارد، اما برای پروژه‌های جدید چندپلتفرمی معمولاً URP گزینه انعطاف‌پذیرتری است.

ویژگی URP HDRP Built-in
Android و iOS مناسب نامناسب وابسته به پروژه
Windows مناسب مناسب مناسب
نورپردازی Real-time دارد پیشرفته دارد
کنترل عملکرد مناسب نیازمند سخت‌افزار قوی‌تر وابسته به تنظیمات
پیشنهاد برای پروژه چندپلتفرمی جدید انتخاب پیشنهادی برای PC و کنسول قوی برای پروژه‌های موجود

۳. تفاوت Baked، Mixed و Realtime Lighting

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

Baked Lighting

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

این روش برای محیط‌هایی که هندسه و نورپردازی آن‌ها در زمان اجرا تغییر نمی‌کند، بسیار مناسب است.

  • مناسب برای ساختمان‌ها، زمین، دیوارها و محیط‌های ثابت
  • کاهش محاسبات نورپردازی در زمان اجرا
  • پشتیبانی از نور غیرمستقیم پخته‌شده
  • عدم امکان ایجاد سایه پویا توسط نور Baked

Mixed Lighting

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

Realtime Lighting

در این روش، محاسبات نور در زمان اجرای بازی انجام می‌شوند. به همین دلیل می‌توان شدت، رنگ و موقعیت نور را در لحظه تغییر داد.

برای مثال، نور یک مشعل که همراه کاراکتر حرکت می‌کند، یا چراغی که هنگام روشن و خاموش شدن تغییر می‌کند، می‌تواند از نور Realtime استفاده کند.

نوع نور هزینه زمان اجرا تغییر در بازی کاربرد پیشنهادی
Baked کم خیر محیط ثابت
Mixed متوسط تا زیاد محدود محیط و کاراکتر متحرک
Realtime بیشتر بله نورهای متحرک و تعاملی
پیشنهاد حرفه‌ای: در بیشتر محیط‌های بازی، بهتر است نور اصلی محیط را به روش Baked پیاده‌سازی کنید و تنها برای عناصر واقعاً متحرک و تعاملی از نورهای Realtime استفاده کنید.

۴. استفاده از Lightmap و نورپردازی پخته‌شده

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

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

  1. اشیایی مانند زمین، ساختمان و دیوار را انتخاب کنید.
  2. وضعیت Static و تنظیمات مربوط به GI را متناسب با نیاز پروژه فعال کنید.
  3. برای نورهای ثابت، Light Mode را روی Baked قرار دهید.
  4. از مسیر Window > Rendering > Lighting وارد تنظیمات نورپردازی شوید.
  5. تنظیمات Lightmap Resolution و کیفیت Bake را بررسی کنید.
  6. فرایند Generate Lighting را اجرا کنید.

تنظیم Lightmap Resolution

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

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

نکات مهم Lightmap

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

۵. استفاده از Light Probes و Adaptive Probe Volumes

یکی از مشکلات نورپردازی Baked این است که اطلاعات نور روی اشیای ثابت ذخیره می‌شود. بنابراین اگر یک کاراکتر یا شیء متحرک وارد محیط شود، به‌صورت خودکار همان اطلاعات نورپردازی محیط را دریافت نمی‌کند.

برای حل این مشکل، Unity از Light Probes استفاده می‌کند.

Light Probes

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

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

قرار دادن صحیح Light Probeها در محیط باعث می‌شود کاراکتر از نظر بصری با محیط هماهنگ‌تر باشد.

Adaptive Probe Volumes (APV)

Adaptive Probe Volumes یکی از قابلیت‌های پیشرفته Unity 6 در سیستم نورپردازی است که برای مدیریت اطلاعات نور غیرمستقیم در محیط‌های سه‌بعدی استفاده می‌شود.

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

  • مناسب برای محیط‌های بزرگ و پیچیده
  • امکان دریافت نور غیرمستقیم توسط اشیای متحرک
  • قابلیت مدیریت تراکم Probeها
  • امکان استفاده از داده‌های نورپردازی در سناریوهای مختلف
توجه: APV در URP و HDRP در نسخه‌های سازگار Unity 6 پشتیبانی می‌شود. استفاده از آن به معنی رایگان بودن پردازش نور نیست؛ تنظیمات تراکم، حافظه و روش نمونه‌برداری باید متناسب با سخت‌افزار هدف انتخاب شوند.

۶. بهینه‌سازی سایه‌ها در Unity

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

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

تنظیم Shadow Resolution

وضوح Shadow Map تعیین می‌کند سایه‌ها با چه جزئیاتی نمایش داده شوند. استفاده از وضوح بسیار بالا برای تمام نورها، به‌خصوص در موبایل، معمولاً ضروری نیست.

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

کاهش Shadow Distance

Shadow Distance مشخص می‌کند سایه‌های پویا تا چه فاصله‌ای از دوربین محاسبه و نمایش داده شوند.

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

استفاده از Shadow Cascades

Cascaded Shadow Maps باعث می‌شوند سایه‌های نزدیک دوربین با جزئیات بیشتری پردازش شوند. با این حال افزایش تعداد Cascadeها می‌تواند هزینه پردازشی بیشتری ایجاد کند.

برای موبایل معمولاً یک یا دو Cascade می‌تواند نقطه شروع مناسبی برای آزمایش باشد؛ اما مقدار نهایی باید با توجه به نوع بازی و سخت‌افزار هدف تعیین شود.

نکات مهم برای بهینه‌سازی سایه‌ها

  • Shadow Distance را متناسب با محدوده دید بازیکن تنظیم کنید.
  • برای نورهای فرعی، Shadow Casting را در صورت غیرضروری بودن غیرفعال کنید.
  • از Soft Shadows با کیفیت بالا در دستگاه‌های ضعیف استفاده نکنید.
  • وضوح سایه را برای هر پلتفرم جداگانه آزمایش کنید.
  • برای آبجکت‌های دور از دوربین از روش‌های جایگزین استفاده کنید.

۷. مدیریت انواع نورها در Unity

هر نوع نور در Unity رفتار و هزینه پردازشی متفاوتی دارد. شناخت این تفاوت‌ها کمک می‌کند نور مناسب را برای هر قسمت از محیط انتخاب کنیم.

Directional Light

این نور برای شبیه‌سازی نور خورشید یا ماه مناسب است. Directional Light تمام صحنه را از یک جهت روشن می‌کند و برای ساخت نور اصلی محیط انتخاب مناسبی محسوب می‌شود.

در بسیاری از بازی‌ها استفاده از یک Directional Light اصلی کافی است.

Point Light

Point Light نور را در تمام جهات منتشر می‌کند. چراغ‌ها، منابع نوری کوچک و مشعل‌ها از کاربردهای متداول آن هستند.

از آنجا که این نور در تمام جهات اثر می‌گذارد، محدوده تأثیر آن و تعداد آبجکت‌های دریافت‌کننده نور باید کنترل شود.

Spot Light

Spot Light نور را در قالب یک مخروط منتشر می‌کند. این ویژگی باعث می‌شود برای چراغ‌قوه، نورافکن و منابع نوری جهت‌دار انتخاب مناسبی باشد.

با محدود کردن زاویه و محدوده نور می‌توان از تأثیرگذاری غیرضروری آن روی آبجکت‌های محیط جلوگیری کرد.

نوع نور کاربرد نکته بهینه‌سازی
Directional خورشید و ماه تعداد کم و Shadow Distance کنترل‌شده
Point مشعل و چراغ محدوده محدود و سایه در صورت نیاز
Spot چراغ‌قوه و نورافکن محدود کردن زاویه و فاصله

۸. بهینه‌سازی Reflection Probes

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

برای بهینه‌سازی Reflection Probeها:

  • برای محیط‌های ثابت از حالت Baked استفاده کنید.
  • وضوح Cubemap را متناسب با نیاز کاهش دهید.
  • از به‌روزرسانی Every Frame در صورت غیرضروری بودن خودداری کنید.
  • Refresh Mode را روی حالت مناسب قرار دهید.
  • محدوده تأثیر و Culling Mask را مدیریت کنید.
  • از تعداد زیاد Reflection Probeهای هم‌پوشان اجتناب کنید.

۹. بهینه‌سازی Post Processing و افکت‌های نوری

بسیاری از بازی‌ها برای ایجاد جلوه‌های سینمایی از افکت‌های پس‌پردازش استفاده می‌کنند. این افکت‌ها می‌توانند کیفیت تصویر را افزایش دهند، اما اجرای آن‌ها در رزولوشن بالا و روی هر فریم ممکن است فشار زیادی به GPU وارد کند.

Ambient Occlusion

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

Bloom

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

بهتر است Intensity و Threshold را با دقت تنظیم کنید و از فعال کردن تنظیمات غیرضروری در دستگاه‌های ضعیف خودداری کنید.

Volumetric Lighting

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

برای نسخه موبایل بهتر است از روش‌های ساده‌تر مانند Particle System، شیدرهای سبک و بافت‌های آماده برای شبیه‌سازی برخی جلوه‌ها استفاده شود.

۱۰. بهینه‌سازی نورپردازی برای Android و iOS

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

بنابراین طراحی سیستم نورپردازی برای Android و iOS باید از ابتدا با رویکرد Performance First انجام شود.

تنظیمات پیشنهادی برای شروع آزمایش موبایل

تنظیم مقدار پیشنهادی اولیه
Render Pipeline URP
Main Light ترجیحاً یک نور اصلی
Additional Lights Disabled یا Per Vertex در دستگاه‌های ضعیف
Additional Light Shadows غیرفعال در صورت عدم نیاز
Shadow Distance محدود و متناسب با محیط
Shadow Cascades یک یا دو Cascade برای شروع آزمایش
Soft Shadows خاموش یا کیفیت پایین
HDR فقط در صورت نیاز واقعی
MSAA متناسب با GPU و رزولوشن
Lighting Baked برای محیط ثابت

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

تفاوت Android و iOS

اگرچه هر دو پلتفرم موبایل هستند، اما نباید فرض کنیم تمام گوشی‌های Android و iPhone عملکرد یکسانی دارند.

تنوع GPU، رزولوشن نمایشگر، معماری سخت‌افزار و APIهای گرافیکی در دستگاه‌های مختلف باعث می‌شود تنظیمات نورپردازی باید روی چند دستگاه واقعی آزمایش شوند.

برای مثال، پشتیبانی از Vulkan در Android و Metal در iOS می‌تواند بر نحوه اجرای مسیر رندرینگ تأثیر بگذارد. به همین دلیل، تست خروجی واقعی روی دستگاه‌های هدف اهمیت زیادی دارد.

۱۱. بهینه‌سازی نورپردازی برای Windows و کامپیوتر

در نسخه Windows معمولاً امکان استفاده از تنظیمات گرافیکی پیشرفته‌تری وجود دارد؛ اما این موضوع به معنی استفاده نامحدود از نورهای پویا و سایه‌ها نیست.

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

پیشنهادهایی برای نسخه PC

  • استفاده از Shadow Resolution بالاتر در سیستم‌های قوی‌تر
  • افزایش Shadow Distance در صورت نیاز بصری
  • استفاده کنترل‌شده از Additional Lights
  • فعال‌سازی Soft Shadows متناسب با قدرت GPU
  • استفاده از Reflection Probe با کیفیت مناسب
  • فعال‌سازی افکت‌های Post Processing در صورت نیاز

اگر پروژه شما از URP استفاده می‌کند، Forward+ می‌تواند در صحنه‌هایی با تعداد زیادی نور پویا مفید باشد؛ با این حال افزایش تعداد نورهای قابل استفاده به معنی رایگان بودن آن‌ها نیست و باید عملکرد نهایی بررسی شود.

در پروژه‌های PC با هدف کیفیت بصری بسیار بالا، HDRP نیز می‌تواند انتخاب مناسبی باشد؛ به‌خصوص زمانی که امکانات پیشرفته نورپردازی و بازتاب‌ها بخش مهمی از طراحی هنری بازی هستند.

۱۲. ساخت پروفایل‌های گرافیکی مختلف

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

به‌جای استفاده از یک تنظیم یکسان برای تمام دستگاه‌ها، می‌توان کیفیت نورپردازی را براساس سخت‌افزار هدف تغییر داد.

ویژگی Low Medium High
Shadow Resolution پایین متوسط بالا
Shadow Distance محدود متوسط بیشتر
Soft Shadows خاموش اختیاری روشن
Additional Lights محدود متوسط بیشتر، با تست عملکرد
Post Processing حداقلی متوسط پیشرفته

می‌توانید این پروفایل‌ها را از طریق Quality Settings مدیریت کنید و با استفاده از کدنویسی C#، سطح کیفیت را هنگام اجرای بازی تغییر دهید.

۱۳. بررسی عملکرد با Unity Profiler

یکی از اشتباهات رایج در بهینه‌سازی بازی این است که توسعه‌دهنده تنها بر اساس ظاهر صحنه تصمیم می‌گیرد کدام قسمت باید بهینه شود.

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

Unity ابزارهای مختلفی برای بررسی عملکرد بازی در اختیار توسعه‌دهندگان قرار می‌دهد:

Unity Profiler

Profiler برای بررسی میزان استفاده از CPU، GPU، حافظه و سایر منابع استفاده می‌شود. با استفاده از آن می‌توانید متوجه شوید که افت فریم ناشی از پردازش CPU است یا GPU.

Frame Debugger

Frame Debugger به شما اجازه می‌دهد مراحل رندر شدن یک فریم را بررسی کنید. این ابزار برای شناسایی Passهای اضافی، نحوه رندر آبجکت‌ها و بررسی تأثیر تنظیمات گرافیکی بسیار کاربردی است.

Rendering Debugger

Rendering Debugger در پروژه‌های مبتنی بر SRP، از جمله URP، امکان بررسی بخش‌های مختلف سیستم رندرینگ و نورپردازی را فراهم می‌کند.

نکته بسیار مهم: عملکرد بازی را فقط در Unity Editor بررسی نکنید. نسخه Development Build یا خروجی واقعی بازی را روی دستگاه هدف اجرا کنید؛ زیرا عملکرد Editor لزوماً نشان‌دهنده عملکرد نسخه نهایی نیست.

۱۴. مثال عملی: طراحی نورپردازی بهینه برای یک جنگل تاریک

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

در چنین محیطی به نور ماه، تاریکی بین درختان، مه، مشعل کاراکتر و سایه‌های محیطی نیاز داریم.

اگر برای هر درخت، سنگ، بوته و آبجکت کوچک یک نور Real-time جداگانه در نظر بگیریم، تعداد محاسبات گرافیکی به‌سرعت افزایش پیدا می‌کند.

راهکار بهتر این است که سیستم نورپردازی را به چند بخش تقسیم کنیم:

مرحله اول: نور اصلی محیط

برای نور ماه می‌توان از یک Directional Light استفاده کرد. اگر محیط ثابت باشد، بخش‌هایی از نورپردازی را می‌توان Baked کرد.

مرحله دوم: نور غیرمستقیم محیط

برای نمایش نور غیرمستقیم روی کاراکتر و اشیای متحرک از Light Probes یا APV استفاده می‌کنیم.

مرحله سوم: مشعل کاراکتر

مشعل می‌تواند از یک نور Point یا Spot متحرک استفاده کند. بهتر است محدوده نور محدود باشد و سایه پویا تنها در صورت نیاز واقعی فعال شود.

برای نمایش شعله آتش می‌توان از ترکیب Particle System، متریال Emission و افکت Bloom استفاده کرد. توجه داشته باشید که Emission به‌تنهایی به معنی تولید نور مستقیم روی سایر اشیا نیست؛ برای این کار باید از نور واقعی یا راهکارهای مناسب نورپردازی استفاده شود.

مرحله چهارم: مه و فضای ترسناک

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

نتیجه طراحی: با ترکیب نورپردازی Baked برای محیط ثابت، نورهای Real-time محدود برای منابع متحرک و استفاده صحیح از Light Probes، می‌توان یک محیط جنگلی تاریک و جذاب ایجاد کرد، بدون اینکه تمام صحنه وابسته به نورهای پویا باشد.

۱۵. چک‌لیست نهایی بهینه‌سازی نور در Unity

پیش از انتشار نسخه نهایی بازی، بهتر است موارد زیر بررسی شوند:

  • انتخاب Render Pipeline متناسب با پلتفرم هدف
  • استفاده از Baked Lighting برای محیط‌های ثابت
  • کاهش تعداد نورهای Real-time غیرضروری
  • محدود کردن Shadow Distance
  • کاهش Shadow Resolution در دستگاه‌های ضعیف
  • مدیریت Shadow Cascades
  • غیرفعال کردن سایه نورهای فرعی غیرضروری
  • استفاده صحیح از Light Probes یا APV
  • مدیریت اندازه و تعداد Lightmapها
  • بهینه‌سازی Reflection Probes
  • کاهش افکت‌های Post Processing غیرضروری
  • ساخت پروفایل‌های گرافیکی مختلف
  • بررسی GPU و CPU با Profiler
  • تست روی دستگاه‌های واقعی Android و iOS
  • بررسی عملکرد نسخه نهایی Windows

جمع‌بندی؛ کیفیت بصری در کنار عملکرد مناسب

بهینه‌سازی نورپردازی یکی از مهم‌ترین مراحل توسعه یک بازی سه‌بعدی حرفه‌ای است. استفاده هوشمندانه از Baked Lighting، مدیریت نورهای Real-time، کاهش هزینه سایه‌ها و انتخاب صحیح Render Pipeline می‌تواند تأثیر قابل توجهی بر عملکرد بازی داشته باشد.

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

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

در نهایت، اندازه‌گیری عملکرد با ابزارهایی مانند Unity Profiler و Frame Debugger باید بخش جدایی‌ناپذیر فرایند بهینه‌سازی بازی باشد.

مهدی یدی

مهدی یدی

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

ارسال دیدگاه

کد امنیتی

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

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

Captcha Active