Минулого разу ми розмовляли про ландшафт. Тепер його потрібно розмалювати. Тож розберімося, що таке графічні шейдери та текстури.
Дуже часто можна почути „мильні текстури“, „текстури гамно“, „на текстурах драбинка“ і решту схожих висловів. Так що ж це таке? Текстури — це квадратна картинка. Здебільшого це просто фотографія, допиляна в графічному редакторі. Або просто картинка, яку малює художник. У нас усі текстури розміром 2048х2048px. Займають вони біля 2-х Мб. Тепер логічне запитання. Невже в таких компаніях як Ubisoft працюють такі погані художники, що навіть картинку не можуть намалювати людську? Чи проблема в чомусь іншому?
Насправді, текстури зараз ніхто не використовує у чистому вигляді. На моделі накладають матеріали, які є ніщо іншими, як шейдерами.
Графічний шейдер — це програма, яка визначає остаточний вигляд об’єкту. Тобто за допомогою шейдерів і створюється ефект металу, прозорості, свічення і навіть зміни геометрії моделі. Насправді можливості доволі великі. Але це все добро обчислюється графічним процесором. Тому й на слабких відеокартах гра може підвисати „на рівному місці“, коли ніби немає ніяких ефектів. До прикладу, у нас було просідання fps до 0. А все через те, що забагато текстур було в межах одного шейдера. Крім того, ще й зміна геометрії будинка =)
Текстури й шейдери
Я вже писав, що текстури в чистому вигляді не використовуються, адже найпростіший ефект зручніше зробити саме за допомогою шейдера. Розгляньмо простий приклад. У нашій грі буде досить багато доріг. Відповідно вона має мати розмітку. Як її намалювати?
У нас є текстура асфальту без розмітки.
Також маємо Normal Map. Це теж по суті текстура, але вона використовується для визначення глибини. Тобто асфальт не рівний. У нього є багато маленьких камінчиків, кожний з яких виступає на певну висоту. Такий ефект добивається за допомогою Normal Map.
Тепер нам потрібна ще одна текстура, яку можна розкласти на канали відповідно до кольорів.
В цьому випадку нас цікавить саме червоний колір.
Далі потрібно зробити інтерполяцію. Інтерполяція текстур — це накладання однієї текстури на іншу в певних координатах. Тобто. Ми беремо текстуру з асфальтом і накладаємо на неї білий колір у координатах червоного альфа-каналу.
Це доволі простий приклад використання шейдерів. У цьому випадку виходить ефект намальованої розмітки. Видно камінчики та потертості фарби.
Для ландшафту все значно складніше. До прикладу. У нас ландшафт площею 8 квадратних кілометрів. Якщо у випадку з дорогою все просто, достатньо кілька метрів зробити, а далі просто розмножити, то тут так не вийде.
Потрібно написати алгоритм, згідно з яким ландшафт буде розмальовуватися автоматично. Тобто потрібно знаходити кут підйому і якщо той кут більший за заданий, потрібно накласти текстуру скелі (а точніше цілу низку текстур та Normal Map). Якщо той кут менший, але то не рівна площина, то потрібно накласти зовсім іншу низку текстур. І так далі.
Більше того, коли в нас є ландшафт, розбитий по текстурах, та це зроблено саме за допомогою програмних засобів — маємо простір для уяви та можливості використати це. Наприклад для накладання трави. Тобто трава буде накладатися на конкретні місця автоматично. Це дуже сильно полегшує роботу. Найкраще це видно у FarCry 3. Де трава накладається деколи з баґами. =)
Де живе „мильце“?
Шейдери також можна використати для налаштовування графіки. Найчастіше використовується саме для компресії текстур (яких є не мало). Після компресії, зображення стають меншими. Аби не було „сходинок“ на самій текстурі, апаратними методами її „замилюють“. Але, це не те „мильце“, за яке так часто критикують розробників. Хоча комп’ютери, які є в простих людей не потягнуть фотореалістичну графіку. Адже тоді текстури будуть дуже великого розміру та споживатимуть багато ресурсів.
Звісно, такі технології полегшують роботу. Але це тільки трава. Крім неї мають бути дерева, камені, якісь кущі, споруди і ще велика купа всякого. Це все треба рзставити вручну. Кожний камінчик, кожне деревце — усе має бути розкладене. На це треба чимало часу й сил. Мені страшно уявити, що абсолютно все в тій же GTA5 було розкладене вручну.
Також, хочу подякувати всім, хто нас підтримував. Наша гра отримала зелене світло!
Сподіваюся, ця стаття була цікавою, до зустрічі!
«Смертна кара» — щоденник розробки #2
Cподобалася стаття? Підтримай PlayUA
На платформі Donatello ви можете підтримати нас як одноразовим донатом, так і оформити щомісячну підписку. Усі наші підписники на Donatello отримують цифрові або фізичні приємнощі залежно від суми донату. Долучайтеся до нашої спільноти!