Unity - керівництво використання і продуктивність вбудованих шейдеров

Шейдери в Unity використовуються через матеріали. які по суті комбінують код шейдера з його параметрами, такими як текстури. Глибоке пояснення зв'язку шейдер / матеріал може бути знайдено тут.

Властивості матеріалу показуються в інспектора. коли будуть обрані або сам матеріал, або GameObject. який використовує матеріал. Інспектор для матеріалу виглядає так:

Unity - керівництво використання і продуктивність вбудованих шейдеров

Кожен матеріал виглядає трохи по іншому в інспектора, в залежності про використовуваного в ньому шейдера. Сам шейдер визначає які властивості будуть доступні для налаштування в інспектора. Інспектор матеріалу описаний в деталях на сторінці довідника по компоненту Material. Пам'ятайте, що шейдер реалізовується через матеріал. Таким чином, в той час як шейдер визначає властивості, які будуть відображатися в інспектора, матеріал містить налаштовані дані слайдеров, квітів і текстур. Найбільш важлива річ - пам'ятати про те, що один шейдер може бути використаний у багатьох матеріалах, але один матеріал не може використовувати кілька шейдеров.

питання продуктивності

Є кілька факторів, які можуть впливати на загальну продуктивність в грі. На цій сторінці ми поговоримо про питання продуктивності для вбудованих шейдеров. Продуктивність шейдеров найбільш залежить від двох речей: самого шейдера і який режим рендеринга використовується проектом або конкретної камерою. Для рад по продуктивності при написанні свого шейдера дивіться сторінку Продуктивність шейдеров ShaderLab.

Режими рендеринга і продуктивність шейдеров

З режимів візуалізації, підтримуваних Unity, режими відкладеного освітлення і вершинного освітлення мають найбільш передбачувану продуктивність. У відкладеному висвітленні кожен об'єкт зазвичай малюється двічі не залежно від кількості які висвітлюють його джерел світла. У вершинному висвітленні кожен об'єкт малюється один раз. Таким чином, продуктивність в шейдерах при цьому буде залежати від того, як багато текстур вони використовують і які здійснюють розрахунки.

Продуктивність шейдеров при упереджувальний режимі рендеринга

Шейдери Vertex-Lit в упереджувальний режимі рендеринга завжди менш ресурсомісткі, ніж Pixel-Lit шейдери. Ці шейдери працюють за допомогою розрахунку освітлення на вершинах заважав, використовуючи відразу все джерела освітлення. Тому, неважливо скільки джерел освітлення висвітлюють об'єкт, він все одно буде відмалювали тільки один раз.

Pixel-Lit шейдери розраховують підсумкове освітлення для кожного отрісовиваємих пікселя. Через це, об'єкт повинен бути відмалювали один раз для отримання освітлення від оточення і від одного головного спрямованого джерела світла, і по одному разу для кожного додаткового джерела освітлення, який його висвітлює. Це збільшує навантаження на CPU для обробки і відправки на графічний адаптер команд, і навантаження на GPU для обробки вершин і відтворення пікселів. Простір, займане на екрані попиксельно висвітлюються об'єктом, також впливає на продуктивність відтворення. Чим більше об'єкт, тим більше доведеться обробити пікселів і тим повільніше буде проходити отрисовка.

Так що використання pixel lit шейдеров вимагає додаткових ресурсів, але, зате, дозволяє реалізувати деякі дивовижні ефекти за допомогою тіней, карт нормалей, красивих розкритих відблисків і джерел світла з cookie текстурами (це лише деякі з можливостей).

Запам'ятайте, що можна форсувати тип рендеринга у джерел освітлення в піксельний ( "important") або верховий / SH ( "not important"). Будь-верховий світло, що потрапляє на Pixel-Lit шейдер буде розраховуватися на основі вершин об'єкта або всього об'єкта, і не буде споживати додаткових ресурсів і видавати ефекти, асоційовані з пиксельними джерелами освітлення.

Основа продуктивності шейдеров

Розглядаючи вбудовані шейдери. вони йдуть у міру збільшення складності:

  • Unlit .Це просто текстура, на яку не впливає будь-яке висвітлення.
  • VertexLit.
  • Diffuse.
  • Normal mapped. Це трохи більше ресурсномісткий шейдер, ніж Diffuse: в ньому додана ще одна текстура (карта висот) і кілька додаткових шейдерних інструкцій.
  • Specular. У цьому доданий розрахунок дзеркальних відблисків.
  • Normal Mapped Specular. Знову ж таки, дещо ресурсномісткий шейдер в порівнянні зі Specular.
  • Parallax Normal mapped. У цьому додані розрахунки параллаксового застосування карт нормалей.
  • Parallax Normal Mapped Specular. У цьому додані розрахунки і параллаксового застосування карт нормалей і дзеркальних відблисків.

Сімейство шейдеров нормалей (Normal Shader Family)