مواد و شیدرها، مواد و شیدرها، مواد و شیدرها

برای بهینه سازی استفاده از متریال ها و شیدرها در بازی اندروید خود، این بهترین شیوه ها را دنبال کنید.

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

موتور بازی شیدرهای سازگار با موبایل

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

برای تعریف سایه‌زن‌ها و متریال‌ها، به بهترین شیوه‌های Material and Shader برای هنرمندان مراجعه کنید.

اگر از موتور بازی مانند Unity یا Unreal Engine 4 استفاده می کنید، از سایه زن های داخلی که برای سخت افزار موبایل طراحی شده اند استفاده کنید. این شیدرها شامل پیاده سازی ویژگی های ساده شده برای عملکرد بیشتر در دستگاه های تلفن همراه هستند. در صورت امکان، هنگام پیکربندی مواد خود، ویژگی هایی را که از آنها استفاده نمی کنید، خاموش کنید. این ویژگی ها ممکن است مواردی مانند رنگ آمیزی یا نقشه های جزئیات باشد. غیرفعال کردن ویژگی های استفاده نشده به موتور اجازه می دهد تا آنها را از برنامه سایه زن نهایی حذف کند و در نتیجه عملکرد بهتری داشته باشد.

وحدت

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

Unreal Engine 4

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

تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal
شکل 1. تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal.

نمونه‌برهای بافت را به حداقل برسانید

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

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

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

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

مقایسه مدل رندر شده با و بدون نور
شکل 2. نمونه ای از مدلی که با نورپردازی واقعی (سمت چپ) و بدون نورپردازی زمان واقعی (راست) رندر شده است.

استفاده از شفافیت را به حداقل برسانید

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

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

نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity
شکل 3. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity.
نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal
شکل 4. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal.

از روش آلفای مناسب استفاده کنید

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

آزمایش آلفا باعث می شود که ماده شی 100٪ مات یا 100٪ شفاف به نظر برسد. شما می توانید آستانه مقدار آلفا را برای این برش پیکربندی کنید. در Unity این نوع شفافیت Cutout نامیده می شود. در Unreal Engine 4 به آن Masked Blend Mode گفته می شود.

ترکیب آلفا به مواد شیء اجازه می دهد تا طیفی از شفافیت داشته باشد و می تواند یک شی را تا حدی شفاف نشان دهد. یونیتی این نوع شفافیت را شفاف می نامد. در Unreal Engine 4 به آن حالت Translucent blend گفته می شود.

مقایسه بین ترکیب آلفا و آزمایش آلفا
شکل 5. یک تصویر مثال (سمت چپ) که با استفاده از ترکیب آلفا (مرکز) و آزمایش آلفا (راست) ارائه شده است.

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

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

پیچیدگی سایه زن نمایه

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

Unreal Engine 4 شامل حالت نمای پیچیدگی سایه زن است که تخمین هزینه اشیاء را در صحنه شما ارائه می دهد.

حالت نمای Shader Complexity در ویرایشگر Unreal
شکل 6. حالت نمای Shader Complexity در ویرایشگر Unreal.

همچنین می‌توانید از ویژگی Unreal's Material Stats برای نمایه کردن هزینه مواد در هنگام نوشتن آنها استفاده کنید.

Material Stats در ویرایشگر Unreal نمایش داده می شود
شکل 7. آمار مواد در ویرایشگر Unreal نمایش داده می شود.

در سایه زن راس محاسبه کنید

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

با این حال، اگر این داده توسط shader قطعه مصرف شود، باید از سایه زن رأس عبور داده شود. اگر مقدار داده‌های منتقل‌شده خیلی زیاد باشد، انجام محاسبات در سایه‌زن قطعه ممکن است عملکرد بالاتری داشته باشد. می توانید از ابزارهای پروفایل برای ارزیابی استفاده از کاشی برای تعیین مکان بهینه سایه زن برای مجموعه ای از محاسبات استفاده کنید. Unreal Engine 4 دارای یک ویژگی UVs سفارشی است که می تواند به این پروفایل کمک کند.

از انجام عملیات ریاضی پرهزینه خودداری کنید

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

  • اضافه شدن
  • تفریق
  • ضرب

عملیات گران تر عبارتند از:

  • بخش
  • ماورایی (سین، cos، قدرت، لگ، قهوهای مایل به زرد)

عملکرد نمایه اغلب

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

،

برای بهینه سازی استفاده از متریال ها و شیدرها در بازی اندروید خود، این بهترین شیوه ها را دنبال کنید.

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

موتور بازی شیدرهای سازگار با موبایل

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

برای تعریف سایه‌زن‌ها و متریال‌ها، به بهترین شیوه‌های Material and Shader برای هنرمندان مراجعه کنید.

اگر از موتور بازی مانند Unity یا Unreal Engine 4 استفاده می کنید، از سایه زن های داخلی که برای سخت افزار موبایل طراحی شده اند استفاده کنید. این شیدرها شامل پیاده سازی ویژگی های ساده شده برای عملکرد بیشتر در دستگاه های تلفن همراه هستند. در صورت امکان، هنگام پیکربندی مواد خود، ویژگی هایی را که از آنها استفاده نمی کنید، خاموش کنید. این ویژگی ها ممکن است مواردی مانند رنگ آمیزی یا نقشه های جزئیات باشد. غیرفعال کردن ویژگی های استفاده نشده به موتور اجازه می دهد تا آنها را از برنامه سایه زن نهایی حذف کند و در نتیجه عملکرد بهتری داشته باشد.

وحدت

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

Unreal Engine 4

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

تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal
شکل 1. تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal.

نمونه‌برهای بافت را به حداقل برسانید

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

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

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

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

مقایسه مدل رندر شده با و بدون نور
شکل 2. نمونه ای از مدلی که با نورپردازی واقعی (سمت چپ) و بدون نورپردازی زمان واقعی (راست) رندر شده است.

استفاده از شفافیت را به حداقل برسانید

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

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

نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity
شکل 3. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity.
نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal
شکل 4. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal.

از روش آلفای مناسب استفاده کنید

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

آزمایش آلفا باعث می شود که ماده شی 100٪ مات یا 100٪ شفاف به نظر برسد. شما می توانید آستانه مقدار آلفا را برای این برش پیکربندی کنید. در Unity به این نوع شفافیت Cutout گفته می شود. در Unreal Engine 4 به آن Masked Blend Mode گفته می شود.

ترکیب آلفا به مواد شیء اجازه می دهد تا طیف وسیعی از شفافیت داشته باشد و می تواند یک شی را تا حدی شفاف نشان دهد. یونیتی این نوع شفافیت را شفاف می نامد. در Unreal Engine 4 به آن حالت Translucent blend گفته می شود.

مقایسه بین ترکیب آلفا و آزمایش آلفا
شکل 5. یک تصویر مثال (سمت چپ) که با استفاده از ترکیب آلفا (مرکز) و آزمایش آلفا (راست) ارائه شده است.

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

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

پیچیدگی سایه زن نمایه

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

Unreal Engine 4 شامل حالت نمای پیچیدگی سایه زن است که تخمین هزینه اشیاء را در صحنه شما ارائه می دهد.

حالت نمای Shader Complexity در ویرایشگر Unreal
شکل 6. حالت نمای Shader Complexity در ویرایشگر Unreal.

همچنین می‌توانید از ویژگی Unreal's Material Stats برای نمایه کردن هزینه مواد در هنگام نوشتن آنها استفاده کنید.

Material Stats در ویرایشگر Unreal نمایش داده می شود
شکل 7. آمار مواد در ویرایشگر Unreal نمایش داده می شود.

در سایه زن راس محاسبه کنید

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

با این حال، اگر این داده توسط shader قطعه مصرف شود، باید از سایه زن رأس عبور داده شود. اگر مقدار داده های منتقل شده خیلی زیاد باشد، انجام محاسبات در سایه زن قطعه ممکن است عملکرد بالاتری داشته باشد. می توانید از ابزارهای پروفایل برای ارزیابی استفاده از کاشی برای تعیین مکان بهینه سایه زن برای مجموعه ای از محاسبات استفاده کنید. Unreal Engine 4 دارای یک ویژگی UVs سفارشی است که می تواند به این پروفایل کمک کند.

از انجام عملیات ریاضی پرهزینه خودداری کنید

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

  • اضافه شدن
  • تفریق
  • ضرب

عملیات گران تر عبارتند از:

  • بخش
  • ماورایی (سین، cos، قدرت، لگ، قهوهای مایل به زرد)

عملکرد نمایه اغلب

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

،

برای بهینه سازی استفاده از متریال ها و شیدرها در بازی اندروید خود، این بهترین شیوه ها را دنبال کنید.

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

موتور بازی شیدرهای سازگار با موبایل

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

برای تعریف سایه‌زن‌ها و متریال‌ها، به بهترین شیوه‌های Material and Shader برای هنرمندان مراجعه کنید.

اگر از موتور بازی مانند Unity یا Unreal Engine 4 استفاده می کنید، از سایه زن های داخلی که برای سخت افزار موبایل طراحی شده اند استفاده کنید. این شیدرها شامل پیاده سازی ویژگی های ساده شده برای عملکرد بیشتر در دستگاه های تلفن همراه هستند. در صورت امکان، هنگام پیکربندی مواد خود، ویژگی هایی را که از آنها استفاده نمی کنید، خاموش کنید. این ویژگی ها ممکن است مواردی مانند رنگ آمیزی یا نقشه های جزئیات باشد. غیرفعال کردن ویژگی های استفاده نشده به موتور اجازه می دهد تا آنها را از برنامه سایه زن نهایی حذف کند و در نتیجه عملکرد بهتری داشته باشد.

وحدت

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

Unreal Engine 4

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

تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal
شکل 1. تنظیم رندر پیش نمایش موبایل در ویرایشگر Unreal.

نمونه‌برهای بافت را به حداقل برسانید

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

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

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

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

مقایسه مدل رندر شده با و بدون نور
شکل 2. نمونه ای از مدلی که با نورپردازی واقعی (سمت چپ) و بدون نورپردازی زمان واقعی (راست) رندر شده است.

استفاده از شفافیت را به حداقل برسانید

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

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

نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity
شکل 3. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unity.
نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal
شکل 4. نمونه ای از ابزار تجسم overdraw در ویرایشگر Unreal.

از روش آلفای مناسب استفاده کنید

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

آزمایش آلفا باعث می شود که ماده شی 100٪ مات یا 100٪ شفاف به نظر برسد. شما می توانید آستانه مقدار آلفا را برای این برش پیکربندی کنید. در Unity به این نوع شفافیت Cutout گفته می شود. در Unreal Engine 4 به آن Masked Blend Mode گفته می شود.

ترکیب آلفا به مواد شیء اجازه می دهد تا طیف وسیعی از شفافیت داشته باشد و می تواند یک شی را تا حدی شفاف نشان دهد. یونیتی این نوع شفافیت را شفاف می نامد. در Unreal Engine 4 به آن حالت Translucent blend گفته می شود.

مقایسه بین ترکیب آلفا و آزمایش آلفا
شکل 5. یک تصویر مثال (سمت چپ) که با استفاده از ترکیب آلفا (مرکز) و آزمایش آلفا (راست) ارائه شده است.

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

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

پیچیدگی سایه زن نمایه

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

Unreal Engine 4 شامل حالت نمای پیچیدگی سایه زن است که تخمین هزینه اشیاء را در صحنه شما ارائه می دهد.

حالت نمای Shader Complexity در ویرایشگر Unreal
شکل 6. حالت نمای Shader Complexity در ویرایشگر Unreal.

همچنین می‌توانید از ویژگی Unreal's Material Stats برای نمایه کردن هزینه مواد در هنگام نوشتن آنها استفاده کنید.

Material Stats در ویرایشگر Unreal نمایش داده می شود
شکل 7. آمار مواد در ویرایشگر Unreal نمایش داده می شود.

در سایه زن راس محاسبه کنید

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

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

از انجام عملیات ریاضی پرهزینه خودداری کنید

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

  • اضافه شدن
  • تفریق
  • ضرب

عملیات گران تر عبارتند از:

  • بخش
  • ماورایی (سین، cos، قدرت، لگ، قهوهای مایل به زرد)

عملکرد نمایه اغلب

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