Unity - ръчно оптимизиране на работата с графики

Оптимизиране на графична производителност

Доброто представяне е от решаващо значение за много игри. По-долу са прости съвета за това хоби оказване на скорост в играта си.

Каква е цената на графики

Графичната част на играта ви зарежда първите две компютърни системи: GPU (графичен процесор единица) и CPU (централен процесор). Първото правило на всяка оптимизация: разберете къде възниква проблема. като стратегия за оптимизация на GPU и процесора има значителни разлики (понякога ситуация възниква, когато в оптимизацията за GPU-голяма тежест за процесора и обратно).

Общи затруднения и техните проверка:

  • процент на запълване GPU често е ограничен (fillrate) или честотна лента на паметта.
  • Започнете играта с по-ниска разделителна способност на екрана подобрява производителността? След това най-вероятно ще запълни ограничена от скоростта на GPU.
  • CPU често е ограничен от броя на нещата, които трябва да бъдат изготвени, известни още като "изготви разговори".
  • Проверете pokazatell "изготви разговори" в Оказване Статистика прозорец; ако тя е повече от няколко хиляди (за PC) или няколко стотин (за мобилни устройства), може да се наложи да се оптимизира броя на обектите.
  • GPU дръжки прекалено много върхове. Какъв е броят на върховете е нормално, се определя от набор от GPU и вертексни шейдъри. То може да бъде препоръчително да се използва не повече от 100 хиляди мобилни и не повече от няколко милиона за PC.
  • Процесорът има прекалено много върхове, за да обработват. Това би могло да бъде в одрани мрежи, кърпа симулация, частици, или други игрови обекти и мрежи. Както по-горе, като цяло е добра практика да се запази този брой възможно най-ниски, без да прави компромис с качеството на играта. Вижте раздела за оптимизация на CPU-долу за указания как да направите това.
  • Оказване не създава никакви проблеми за GPU, или за процесора. Проблемът може да бъде, например, скриптове или физика. Използвайте Profiler да открие източника на проблема.

оптимизиране на процесора

Всичко това използване "на обект" CPU е-много ресурси, така че ако имате много видими обекти, е възможно да се добави. Например, ако имате хиляда триъгълници, то е много по-лесно от процесора, ако всички те са в една мрежа, а не в един окото на триъгълник (добавяне до 1000 меша). Цената на двата сценария на графичния процесор е много подобна, но направено от процесора работата да направи хиляди обекти (вместо един) е значително по-висока.

Намаляване на броя видим обект. За да се намали обема на работата на процесора трябва да направите:

  • Комбинирайте близки обекти ръчно или с помощта дозиране инструмент наравно повикване в единство.
  • Използвайте по-малко материали, комбинирайте текстури в големи текстури атлас.
  • Използвайте по-малко обекти, за да бъдат предоставени на няколко пъти (отражения, сенки, на пиксел източници на светлина, и така нататък. Н. Виж по-долу).

Комбинирайте предмети, така че всяко око, съдържаща най-малко няколко стотин триъгълници и ispolzovat само един материал. Важно е да се разбере, че обединението на два обекта, които използват различни материали, няма да се увеличи производителността. Основната причина, поради която двамата мрежа с помощта на различни материали, е, че те ispolzuyutsya различни текстури. За да се оптимизира CPU производителност, което трябва да се уверите, че обектите, които ви събират, използват една и съща текстура.

Въпреки това, когато използвате много източници пиксел светлина в Forward оказване на път. има ситуации, в които няма смисъл да комбинирате предмети, описани по-подробно по-долу.

GPU: модели за оптимизация на геометрията

Има две основни правила за оптимизиране на геометрията на модела:

  • Да не се използва триъгълници повече от необходимото
  • Опитайте се да запазите броя на бода на UV-картата, а броят на твърди ръбове (удвоили върхове) по-ниска, колкото е възможно

Докато количеството на геометрията на модела засяга главно на графичния процесор, някои Unity функции включват модел обработка и на процесора, например, окото одиране.

Най-бърз осветление - е тази, която не се изчислява. Използвайте излъчване карта за печене вместо статично осветление изчисление на осветление във всяка снимка. Процесът на създаване на светлинни карти отнема не просто поставяне на източника на светлина в сцената време, но:

  • Сега е много по-бързо (по 2-3 пъти в сравнение с 2 пиксел източници на светлина)
  • Тя изглежда по-добре, защото можете да се пекат глобалното осветление с по-високо качество

В много случаи, можете да замените поставянето на светлинния източник правилни шейдъри и съдържание за настройки. Например, вместо поставяне на източника на светлина директно в предната част на камерата, за да се получи ефекта "светва ръбове модел" (джанта осветление), по-лесно да добавите изчисляването на този ефект директно в Shader.

Осветлението в оказване напред

Осветлението в оказване напред

Pixel динамично осветление ще добави разходите за оказване на всеки пиксел и може да доведе до появата на извършени в няколко преминавания обекти. В маломощни устройства, като например мобилни устройства или евтин компютър, за да се избегне използването на повече от един пиксел на източника на светлина. осветяване на всеки отделен обект, и се опитайте да използвате картата на излъчване. Vertex динамично осветление могат да добавят разходите за случаи на връх трансформации. Опитайте се да избягвате ситуации, в които множество светлини осветяват един обект.

Ако използвате пиксел осветление, а след това kazhdly меша като ще бъдат предоставени толкова пъти, колкото източника на светлина пиксел свети. Ако комбинирате две от мрежата са далеч един от друг, тя ще се увеличи размерът на окото. Всички пиксел източник на светлина освети всяка част на окото обединена ще покрие мрежата в момента е, така че броят на рендиране проходи, необходими за тази решетка ще се увеличи. Обикновено, броят на комбинация от комбинираното количество равно на проходите на окото, представляващи части от тях, при което няма печалба от комбиниране. Поради тази причина, че не е необходимо да се съчетаят в клетките, които са достатъчно далеч един от друг, за да бъдат осветени в различни източници на светлина пиксела.

В процеса на визуализация Unity намира всички светлини около окото и изчислява тяхното значение за окото. В настройките за качество на настройка, можете да определите колко много светлини в края може да се използва за осветяване на всяко око. За всеки източник на светлина на неговия приоритет се изчислява въз основа на разстоянието от окото, и яркостта на светлинния източник. Също така е на стойност в рамките на параметъра Render Mode Light компонент, който може да отнеме две стойности: важна или маловажна. Светлинните източници са означени, че не е важно да има по-нисък приоритет.

Да вземем например една игра, където играчът контролира превозно средство се движи в тъмното с фаровете включени. Най-вероятно, фаровете ще са най-важният източник на светлина в играта и опция Render Mode е настроен за тях да стойност Важно. Задните светлини ще бъдат по-малко важни, без да причинява значително влияние върху окончателното изображение, така че за тях Render режим може да бъде настроен да не е важно. като по този начин спестяване на хардуерните ресурси.

Оптимизация пиксел осветление пести ресурси и CPU и GPU: CPU прави по-малко равен на повиквания, както и на графичния процесор се справя по-малките върхове и растеризира малко пиксели за всеки допълнителен обект.

GPU: компресиране на текстури и mipmaps

Използването на компресирани текстури намаляване на размера на вашата структура (в резултат те да се зареждат по-бързо и заемат по-малко памет), и може значително да увеличи производителността. Сгъстен текстури използват една малка част от честотната лента на паметта, в сравнение с 32-битови RGBA-текстури.

Използването на визуализиране на текстури

Като правило, генериране на MIP Карти опция внос е разрешен за текстурите, използвани в 3D-сцена. В този случай, компресия текстура помага да ограничат размера на текстурата данни транспортирани в GPU по време на представяне. Mimpapy позволи на графичния процесор да се използва по-ниски текстури резолюция за малки триъгълници.

Налице е изключение от това правило: когато един Texel (текстура пиксела) съответства на един пиксел на екрана, която се намира в интерфейса, потребителски и 2D-игри.

LOD и наслояване справка разстояние за sulling

Бракувани обекти включва отпускането на обекти невидими. Това е ефективен начин за намаляване както на централния и графичния товара.

В някои игри, е препоръчително да се намали малки обекти по-агресивни от големи, за да се намали разликата между натоварването на CPU и GPU. Например, малки камъни и тревата може да се режат на по-малко разстояние от големи сгради.

Има редица начини, можете да постигнете това:

Ръчно да зададете на слой Culling разстояния върху камерата

Това може да бъде постигнато с помощта на системно ниво на детайлност или ръчно разстояние корекция за почистване на камерата слоеве. Можете да поставите малки обекти в отделен слой, и да го помоли за подстригване разстояние, използвайки Camera.layerCullDistances на собственост.

В реално време, сенки

В реално време, сенки изглеждат добре, но те могат значително да влоши работата, а добавянето на допълнителни равенство покани за процесора и допълнителна обработка на GPU. Подробности са дадени в страницата сенки.

GPU: Съвети за писане на шейдър висока производителност

Различни платформи имат много различни възможности за изпълнение; компютър GPU-висок клас може да се справи много по-по отношение на графика и шейдърите от мобилен GPU нисък клас. Същото се отнася и дори на една платформа; бърз GPU е десетки пъти по-бързо от бавна интегриран графичен процесор.

Имайте предвид, че ефективността на GPU в мобилни устройства и компютри от нисък клас е вероятно да бъде много по-ниска, отколкото на компютъра, който използвате, за да се развива. Обикновено, шейдърите ръчно оптимизирани да се намали количеството на изчисления и прочитания текстура за получаване на висока производителност. Например, някои вградени в шейдъри Unity имат "мобилни" еквиваленти, които са много по-бързо поради някои ограничения и опростяване на правилата.

По-долу са препоръки, които са важни за GPU в мобилни устройства и компютри с ниско ниво:

Комплекс математическа операция

Трансцендентална математически функции (като например Pow. Exp. Дневник. Cos. Sin. Tan) са доста ресурси интензивно, затова избягвайте да ги използват, когато е възможно. Помислете за използване на търсене на текстури, като алтернатива на сложни математически изчисления ако е приложимо.

Избягвайте писане на собствените си операции (като нормализират. Dot. Inversesqrt). вградени възможности Unity е да гарантират, че водачът да може да генерира много по-добър код. Не забравяйте, че операцията на Alpha Test (изхвърляне) често прави фрагмент шейдър по-бавно.

операции с плаваща запетая

Въпреки прецизността (плаваш срещу половината срещу фиксирана) на плаваща запетая променливи до голяма степен се игнорира на настолни графични процесори, много важно е да се получи добра производителност на мобилни графични процесори. Видите типовете данни и Shader Precision за повече подробности.

Подробности за изпълнение шейдър могат да бъдат намерени на страница Shader изпълнение.

Списък стъпки за увеличаване на ефективността на вашата игра

Пример - създаване на равнината билборд

Групиране равенство разговори (Draw Call групиране)