[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-549065259", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxeub&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&puid32=&fmt=1&pr=" } } ]
{ "author_name": "Андрей Верещагин", "author_type": "self", "tags": ["riotgames","\u0430\u0440\u0442"], "comments": 1, "likes": 12, "favorites": 5, "is_advertisement": false, "section_name": "gamedev", "id": "11620" }
Андрей Верещагин
878
Gamedev

Материалы, облегчающие жизнь

Рендер чемпионов в League of Legends.

Поделиться

В избранное

В избранном

Один из сотрудников Riot Games Пол Гиртс (Paul Geerts) рассказал о системе материалов, которая позволила разработчикам League of Legends упростить процесс создания персонажей для игры и сделать эффекты текстур более интересными.

Разработчикам требуется разная информация, чтобы нарисовать чемпиона. В прошлом вся она хранилась в INI-файлах, но сейчас всё иначе. Тем не менее, INI-файлы остаются хорошим способом, чтобы показать, как создаются персонажи.

Файл annie.skn содержит бинарные данные о меше чемпиона, треугольники, вершины и UV-информацию. В то же время в annie.skl содержится «скелет», иерархия костей, с помощью которых аниматоры могут заставить Энни атаковать или танцевать.

Текстура представляет собой «разобранного» чемпиона

Прежде, когда нужно было нарисовать Энни (или любого другого чемпиона), в коде League of Legends присутствовала строчка, которая говорила графическому драйверу использовать текстуру в слоте 0 в следующий раз.

Со временем появились другие возможности, позволяющие изменить процесс появления чемпионов в игре.

Карта отражений перешла в слот 2, а блеск отправился в слот 11. Они связаны с пронумерованными текстурами в шейдере. Когда разработчики хотят вывести на экран Энни, они используют большой блок «привязанного» к чемпиону кода, который занесён в GPU. Таким образом, когда разработчики хотят поэкспериментировать с новыми эффектами, им приходится «зарываться» глубоко в код, пытаясь выяснить, использует ли кто-то слот 7 для чего-нибудь.

Все эффекты простого сияния (вроде плаща Эш) — были созданы с помощью системы частиц.

Раньше она была проще, как и процесс создания чемпиона. Но это не значит, что не было никаких проблем. Полагаясь на систему частиц, разработчикам приходилось совершать больше ненужных действий.

В конце концов они поняли, что их способ управления рендером не подходит для растущей игры, поэтому такой метод работы с кодом был назван устаревшим. Разработчики понимали, что рано или поздно от него придётся избавиться.

Система материалов

В основе системы материалов лежит последовательный способ определения каждого элемента, который должен быть заложен в GPU, прежде чем игра будет рендерить кадр.

Ядро системы материалов было написано во время обновления Summoner’s Rift, несколько лет назад. Сейчас разработчики пытаются сделать эту технологию шире, а также избавиться от устаревшего кода для чемпионов. Вот отрывок из системы материалов, созданной для простых материалов.

Разработчики сделали один набор состояний рендера для каждого чемпиона. Рисовать с ним стало просто.

Теперь разработчики обращаются к текстурам и параметрам по их названиям, а не номерам. При этом текстуры всё равно должны оканчиваться номерным слотом, чтобы GPU могла использовать их, но теперь это происходит автоматически и разработчикам не приходится запоминать номера.

У такого подхода есть несколько преимуществ перед устаревшим кодом:

  • снижение сложности петли рендера (render loop) и лучшее использование системного кэша;
  • разработчики могут сосредоточится на оптимизации одного кода, а не распространятся на разные системы;

  • изучение системы материалов однажды позволить Riot games быстро и легко переходить между разными базами кода;

  • искать в коде строчку «DIFFUSE_MAP», например, в 932 раза проще, чем искать цифру 0.

Кроме того, создатели игры могут «клонировать» материалы и менять текстуры, оставляя другие элементы нетронутыми. Большую часть работы составил перенос устаревшего кода для создания материалов из данных, которые уже были у разработчиков. С патча 7.7 Riot Pixels делает это для всех чемпионов.

Анатомия материалов

Материалы собраны из некоторого количества техник (techniques) и каждая из них содержит, по крайней мере, один проход (pass). Техника отвечает на определённый метод рендеренга, а проходы — на однократный вызов создания геометрии.

Здесь разработчики использовали «нормальную» технику, но в качестве других примеров могут выступать техники «depth only» для карт теней, «z pre-pass» или конкретные игровые спецэффекты.

Сейчас пиксельные шейдеры могут за один проход сделать многое, но порой имеет смысл разделить процесс на несколько однократных вызовов для одного объекта. Каждый проход включает в себя все необходимые состояния — шейдеры, режимы наложения, глубины, отбрасывание нелицевых граней, альфу и другие.

В настоящее время материалы на персонажах League of Legends включают в себя две техники: «нормальную» и «переход». Разработчикам приходилось переписывать эффект перехода, который используется, например, когда Кассиопея превращает оппонента в камень. Прежде разработчикам приходилось смешивать диффузную текстуру персонажа с текстурой камня и отправлять результат в слот 0.

Такой подход сопряжён с некоторыми проблемами. Во-первых, не всем материалам нужна диффузная текстура. Например, если разработчики хотят создать стеклянную пушку, им не понадобится диффузная текстура, ведь стекло как материал можно симулировать с помощью цвета и подсветки. Во-вторых, даже если у материала есть диффузная текстура, её замена может изменить лишь некоторые части персонажа, оставив остальные в первозданном виде.

Сейчас у Riot Games есть технология «перехода». Когда эффект перехода проигрывается, используются разные шейдеры, которые контролируют смешение материала с целевой текстурой. В этом случае шейдер управляет тем, как происходит переход. Например, его код определяет, какие координаты текстуры нужно использовать.

Есть и другие преимущества. Ранее, при создании смешанной текстуры использовалась исходная текстура в полном разрешении, даже если персонаж на экране был маленьким. С помощью шейдеров снижается нагрузка на систему, так как он работает только с видимыми пикселями. Для снижения нагрузки разработчикам также пришлось оптимизировать расчёты перехода.

Система материалов позволила упростить работу Riot Games, а также заставила игру лучше работать на компьютерах пользователей. Но есть и другая причина, почему разработчики хотят, чтобы все состояния GPU были собраны в материалах — всё может храниться в данных, а не коде.

Разработчики хотели сделать перья чемпионов Шаи и Рейкана переливающимися. Так как всё создаётся с помощью материалов, отдельные материалы для персонажа могут быть созданы сразу в данных. Но для этого потребовалось создать специальный инструмент.

Так как перья сделаны на основе сервера данных, Riot Games получили возможность создать действительно красивые перья, которые не используют ресурсы. Кроме того, любые изменения в материалах сразу же появляются в игре. Это позволяет художникам сразу же получать отзыв о своей работе.

#riotgames #арт

Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Узнавайте первым важные новости

Подписаться