Хитрости в разработке игрового арта #1

Doom 3 – Volumetric Glow

Doom 3 известна своими красивыми тенями, но в последние пару дней я обратил внимание на волюметрические эффекты вокруг источников света. Перед тем, как мы начнем, хочу сказать, что у этого свечения много вариаций, вот некоторая терминология (поправьте если ошибся):

Glare(ослепительный свет) - появляется там, где свет чересчур яркий, это не дает увидеть острые границы источника света. Этот эффект пропадает когда нет прямого визуального контакта с его источником.

Haze(дымка) - по сути туман, который становится видимым в результате прохождения через него света. Эффект не пропадает когда мы теряем визуальный контакт с источником.

Lens flare(отблеск от линзы) - этот эффект создает впечатление неидеальности поверхности линзы камеры. Этот фотошоповский эффект очень много где использовался с тех пор, как появился.

blog_glare_haze_lensflare

Ниже вы можете видеть, как в Doom 3 сделали эту “ауру” для источников света. Эти эффекты исчезают когда мы не имеем прямого визуального контакта с их источником.

Я знаю несколько способов сделать что-то похожее:

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

2. Поместить геометрию с текстурой, которая будет имитировать эффект засвечивания, вокруг источника света(этот эффект будет исчезать, если посмотреть на него под определенным углом). Такой способ поможет сэкономить память и эффект не будет пропадать в момент, когда теряется визуальный контакт с источником света, но художникам придется потратить какое-то количество времени на то, чтобы расставить всю эту геометрию в нужных местах.

3. Поместить большой спрайт засвета, который будет всегда поворачиваться за камерой. Это лучше всего работает с квадратными источниками света, которые в Doom 3 встречаются довольно часто.

Я создал тестовый объект состоящий из полигона, как сказано в документации к D3, и добавил материал, который вы видели в игре:

blog_flares_02

Эффект ведет себя немного странно, потому что когда игрок проходит мимо него, эта “аура” начинает явно двигаться. Другой артефакт вы можете увидеть на самой первой картинке(оранжевая лампочка): нижняя лампочка обрезается в месте стыка со стеной. Этого не будет, если использовать второй метод создания эффекта и расставлять всё вручную(потому что тогда геометрия не будет меняться в зависимости от положения камеры).

Как именно способ выбрали в id Software? Не имею ни малейшего понятия, в интернете также пусто. Нашел только один вопрос без ответа на форуме.

Мы, кстати, также можем посмотреть на сетку:

blog_flares_03

Разве это не прекрасно? Геометрия складывается и раскладывается с помощью(как мне кажется) vertex color так, что кажется будто бы смотришь на объемный источник света.

blog_flares_04

Этот эффект прорисовывается только в том случае, если ты находишься перед лампочкой, в противном случае он сразу же исчезает:

blog_flares_05

Под определенным углом эффект отключается с помощью vertex color(как мне кажется). В любом случае это выглядит классно.

blog_flares_06

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

Left 4 Dead 2 – Рвота

Недавно я увидел как реализована одна интересная граната в Left 4 Dead 2. Она состоит из стеклянной колбы и рвоты/желчи внутри. Эта колба висит на ремне персонажа и её более детализированная версия появляется, когда мы берем её в руки и видим от первого лица. Меня удивило то, насколько она проработана, там даже присутствует симуляция физики!

Тут вы можете увидеть как разработчики добились этого эффекта. Они просто создали кость, которая реагирует на тряску. Эта кость контролирует верхние точки геометрии жидкости. Остальная часть геометрии привязана ко второй кости. Из проблем хочется выделить то, что можно видеть как цилиндр деформируется во-время сильной тряски.

puke02

Даже не смотря на это, я всё равно очень рад, что они реализовали эту дешевую симуляцию жидкости.

Было бы приемлемо даже если бы они пре-анимировали эту “симуляцию” или вообще ничего не сделали. Вы спросите, почему меня это так удивляет?

Когда я работал над Sacred 2, мы пытались сделать так, чтобы некоторые глаза следили за персонажем. Идея состояла в том, чтобы создать кости и заставить их всегда быть направленными на игрока. Мы не делали до того момента ничего в таком роде, так что когда у нас возникли проблемы с реализацией, эту идею было решено отложить, так как были более приоритетные задачи. Меня удивляют такие вещи в играх, потому что я знаю насколько сложно выделить время и сделать всякие прикольные штуки типо этой.

sacred2_01

Мой вам респект, Valve!

Если интересно, то вот сетка этой модели:

puke_wireframe

Doom 3 – HDUI

Doom 3 очень классная игра, но, к сожалению, я смог поиграть только в первые 10 минут, потому что потом мне стало страшно и пришлось её выключить. К счастью, всё что мне нужно для этой и других заметок, я смог найти на первых 10-ти минутах геймплея до момента появления монстров.

Давайте взглянем на этот монитор:

blog_intro_01

В старых играх всегда приходилось уменьшать разрешение текстур, чтобы поместиться в ограничения железа. Разрешение надписи “Information” это именно то, что ожидаешь увидеть в играх того времени, но вы только посмотрите на надписи чуть ниже. Их грани острые как лезвие бритвы.

Меня сильно удивила такая резкость надписей на разных мониторах и дисплеях, сложилось чувство, что надписи сделаны с помощью геометрии.

НЕТ.

Сюрприз, я был не прав. Короче говоря, в игре не используются текстуры, в обычном понимании, для элементов UI. Они использовали свой язык скриптования типо HTML(но более мощный). Надписи хранятся в нескольких текстурах, но большая часть надписей расставляется при помощи плоскостей с текстом, которые создавались прямо в движке.(просто вводишь нужный текст и готово).

blog_ui_wireframe_01

Этот язык позволяет анимировать элементы, так что вы можете зафейкать анимацию крутящегося логотипа с помощью растяжения и сжатия…

blog_ui_rotate_wire

...набрать текст в реальном времени...

blog_ui_typing

blog_ui_typing_wire

...и конечно же с помощью этой фичи можно добавить интерактивности, что, в свою очередь, является другой фишкой дума. Можно реально поиграть в игру с индюком прицеливаясь и кликая на монитор...

blog_ui_puncher

Доп инфа на анг: http://www.battleteam.net/tech/fis/index.html

Оригиналы:

Doom 3 – Volumetric Glow

Left 4 Dead 2 – Рвота

Doom 3 – HDUI

Перевод был подготовлен в рамках проекта CgTranslate.

Спасибо за внимание и удачи!