Приношу свои извинения за размер этой статьи ― нам не так часто выпадает возможность рассказать о своей работе, а рассказать нам хочется о многом. Речь пойдет о новой системе отображения орудий в игре.
Почему именно орудия, а не что-то еще?
С момента начала этого проекта прошел почти год, и можно смело сказать, что за это время мы смогли сделать многое. Внешний вид орудий (хоть мы и улучшили его в рамках обновления Trinity) по сути дела оставался практически неизменным с момента запуска EVE Online. Для своего времени эта система была вполне прогрессивной: модель орудия состояла из нескольких элементов, на которые накладывалась общая текстура; наш графический движок осуществлял эту процедуру, практически не создавая дополнительной нагрузки на видеокарту. Простота этой схемы со временем стала нашей главной проблемой. После того, как мы реализовали в обновлении Trinity поддержку карт нормалей, использование общих для всех моделей текстур стало затруднительным — ведь любое изменение геометрии влечет за собой создание принципиально новой карты нормалей; копированию с карты на карту поддаются лишь мелкие детали. Использование общих карт нормалей в дополнение к прочим общим текстурам ― это, к сожалению, едва приемлемый компромисс, поскольку на переделку всей системы времени у нас не было.
Еще одним гвоздем в гроб старой системы стало то, что она не позволяла добавлять новые модели орудий. Хорошим примером этому служат осадные орудия на дредноутах. Для их отображения был написан специальный код, который после выхода нескольких обновлений перестал работать корректно ― поэтому, хотя функциональность этих орудий не изменилась, на сервере Tranquility в последнее время они выглядели неправильно. Нам также приходилось отклонять многочисленные запросы на от разработчиков игрового мира на создание новых моделей орудий ― поэтому, например, на кораблях Sleeper, появившихся в обновлении Apocrypha, нет турелей; огонь ведется из произвольных точек на модели корабля.
Как можно видеть, у нас было множество причин реализовать новую систему отображения орудий в игре ― и с выходом каждого обновления их количество лишь увеличивалось. Поэтому мы приступили к работе.
В ходе первой рабочей встречи наш арт-директор перечислил основные аспекты системы, которые он хотел бы видеть в игре, но которые в свое время не были реализованы в силу технологических причин. Один из них ― перевод орудий в боевое положение; второй ― более высокая степень детализации. Уже тогда мы знали, что разработка новой системы займет много времени, и хотели сделать внешний вид орудий достаточно внушительным, чтобы оправдать затраченные усилия. Идея демонстрации того, как орудия переводятся в боевое положение, нам очень понравилась — ведь анимация способна сделать любую картинку значительно более реалистичной. Как упоминалось ранее, мы пытались реализовать это и в рамках предыдущей версии системы, но ― как и раньше ― перед нами встал вопрос: в какой именно момент орудия должны переводиться в боевое положение? Ведь орудия начинают ведение огня сразу после захвата цели. Сначала мы хотели привязать перевод в боевое положение к получению бортовым компьютером приказа на захват цели ― но во многих случаях захват осуществляется практически мгновенно, и соответствующая анимация выглядела бы довольно комично. Другая идея заключалась в том, чтобы добавить в игру «предохранитель» ― кнопку, на которую нужно было бы нажать для перевода орудий в боевое положение. Но такая функция сильно осложнила бы жизнь многим игрокам. В ходе очередной встречи один из наших специалистов по компьютерной графике предложил очень простую схему: когда корабль выходит из режима скольжения, орудия автоматически переводятся в боевое положение, а когда этот режим снова активируется, орудия автоматически «втягиваются» в корпус. В комнате повисла тишина; каждый из нас спрашивал себя, почему никто не подумал об этом раньше. Тогда же было решено, что при нахождении корабля в доке станции орудия должны быть спрятаны; чуть позже мы решили, что в расчет также должно приниматься состояние соответствующих боевых модулей — выключенные модули все время остаются в походном положении.
Исходная система отображения орудий не отличалась разнообразием ― зачастую орудия отличались лишь видом ствола (хоть у нас и существовало множество различных моделей стволов). Вместо этого мы решили сосредоточиться на создании различных моделей самих орудий, что также позволило бы сделать их анимацию более интересной.
Для каждой из четырех рас было разработано по 5 моделей на каждый типоразмер орудий. Исключением из этого правила стало оружие гибридного действия ― ведь их используют как калдари, так и галленте (это отражено и в дизайне самих моделей). В итоге было нарисовано 67 эскизов моделей, для каждой из которых необходимо было реализовать собственную схему анимации ― эти модели использовались бы для отображения всех 613 вариантов орудий, существующих в игре в настоящий момент.
Изначально мы планировали сделать еще больше моделей. Например, в игре появились бы турели для привязки спецэффектов модулей — таких, как энергетические модули-вампиры, системы подсветки цели, дистанционные системы ремонта брони и накачки щита, и т.д. (сейчас при работе этих модулей лучи исходят из точки в пространстве рядом с кораблем, что выглядит крайней нереалистично); мы также хотели сделать отдельные модели для модулей РЭБ и усилителей сенсорных систем. В исходный план входили и модели пусковых установок ракет ― но из-за нехватки времени все эти идеи пришлось отложить на потом.
Улучшенная система сопровождения цели
В ходе работы над новой системой мы изменили принцип сопровождения цели орудиями. Для начала стоит отметить, что до настоящего времени каждое орудие было представлено двумя турелями на корпусе корабля. Когда захваченный в прицел корабль покидал сектор обстрела одной турели и попадал под огонь другой, первая турель мгновенно возвращалась в исходное положение, а вторая начинала сопровождение цели. Теперь первая турель по мере возможности продолжает сопровождать цель, даже не «видя» ее, так что процесс передачи цели от одной турели к другой выглядит гораздо более естественным.
Сектора огня и расположение орудий
Так как сектора огня орудий и расположение турелей на корпусе корабля имеют непосредственное отношение к процессу сопровождения целей, настало время рассказать еще об одном изменении. Орудия космических кораблей в EVE Online вращаются на 360 градусов в плоскости установки турели; угол возвышения орудий ― 90 градусов, угол склонения ― -15. В ходе работы над обновлением Apocrypha― точнее, над моделями новых кораблей категории Tech 3,― мы столкнулись с проблемой при размещении турелей. Оказалось, что в силу их модульной конструкции довольно сложно разместить на противоположных сторонах корпуса турели таким образом, чтобы их сектора огня перекрывались. Тогда мы предложили реализовать возможность представления каждого боевого модуля не только двумя турелями, как сейчас, но и тремя. Опять же, старая система не позволяла это сделать.
Добавив к модулю третью турель, мы смогли уменьшить сектора огня и избавиться от необходимости располагать турели в параллельных плоскостях. Чтобы наглядно продемонстрировать это, посмотрим на корабль Rifter (тоже страдавший от этой проблемы), оснащенный артиллерией малого калибра. Показанные на изображении турели расположены по разные стороны корабля, но плоскости корпуса, на которых они закреплены, не параллельны друг другу; поэтому над кораблем возникает «мертвая зона». Попытка вести огонь по цели, расположенной непосредственно над кораблем, приводит к ошибкам при отображении стрельбы.
Добавив третью турель, мы сделали сектора огня данного боевого модуля полностью перекрывающимися, и он всегда может вести огонь по цели вне зависимости от ее положения в пространстве.
Расположение орудий и разъемы высокой мощности
Изначально мы хотели реализовать внешний вид гравизахватов и демонтажных модулей с помощью турелей для привязки спецэффектов, но потом мы решили, что это — слишком важный аспект игры, который нельзя оставлять за рамками первой версии системы ― и сделали для этих модулей отдельные турели. Это повлекло за собой существенную проблему: раньше количество турелей, отображающихся на модели корабля, непосредственно соответствовало количеству точек монтажа орудий для данного корабля, а не количеству разъёмов высокой мощности. Поэтому наши специалисты по компьютерной графике добавили дополнительные точки крепления турелей на все модели кораблей, а программисты изменили код таким образом, что турель теперь может занимать любой разъем высокой мощности. Пары (или тройки) точек крепления турелей пронумерованы от 1 до 8 (конечно, восемь точек крепления задано не для всех моделях кораблей); разъемы высокой мощности соответствуют этой нумерации. Разъем 1 соответствует паре (или тройке) 1а, 1b (и 1с) ― если вам не нравится, как турели данного орудия отображаются на модели вашего корабля, вы можете перенести его в другой разъем, и их расположение изменится. Раньше все турели устанавливались в точки крепления по порядку вне зависимости от разъема, в котором было установлено соответствующее орудие.
Окно просмотра моделей орудий
В ходе работы над проектом нам требовался простой способ просмотра каждой отдельной турели в игровом клиенте — наподобие окна просмотра моделей кораблей. Наши программисты разработали соответствующий инструмент для внутреннего использования, который мы не планировали включать в игру ― пока на него не посмотрели наш креативный директор и арт-директор. Они попросили улучшить его и добавить его в игру ― результат (отчасти вдохновленный элементами дизайна DUST 514) вы можете видеть на приведенном ниже изображении.
Схема окраски орудий
Чтобы внешний вид орудий лучше соответствовал виду корабля, мы создали набор шейдеров, позволяющий менять окраску орудия в зависимости от используемой на корабле цветовой схемы. Вне зависимости от того, какие орудия установлены на корабле (высокоэнергетические, артиллерийские или гибридного действия), они будут выглядеть так, как будто они выпущены одним и тем же производителем. Стоит отметить, что несмотря на внешнюю схожесть, это не тот же шейдер, что используется на корабле. Для моделей кораблей используется шейдер, смешивающий три различных материала; в случае турелей используются шейдеры, смешивающие два материала ― третий материал отвечает за свечение стволов при длительном ведении огня.
Разное: визуальные эффекты, отдача и асинхронное ведение огня
Наш креативный директор настоятельно попросил реализовать для каждой турели небольшую случайную задержку при выстреле, чтобы сгруппированные орудия не стреляли одновременно. Теперь залпы орудий выглядят более реалистично.
Что касается спецэффектов, то их обновление является гораздо более масштабным начинанием и выходит за рамки этого проекта ― но мы обязательно вернемся к нему в будущем. Пока что нам все-таки пришлось частично изменить визуальные эффекты при ведении огня ― ведь с введением системы анимации турелей вспышки выстрелов должны исходить от конца ствола. В старой системе для сдвоенных орудий выстрелы из обоих стволов были реализованы с помощью одного спецэффекта ― и при переходе к новой системе такие турели стреляли бы четырьмя лучами. Прямо скажем, это выглядело бы странно, поэтому наш специалист по визуальным эффектам провел немало времени, изменяя спецэффекты соответствующим образом.
Было бы неправильно не упомянуть вопрос отдачи при стрельбе. Благодаря новой системе анимации мы наконец смогли создать визуальный эффект отдачи для всех орудий. Сначала мы хотели сделать так, чтобы лазеры не испытывали отдачу при стрельбе, но это создало определенные сложности при тестировании анимации процесса ведения огня. По техническим причинам спецэффекты от выстрелов были реализованы в последний момент, и до этого отдача при выстреле была единственным видимым элементом этого процесса. Почему мы не убрали этот эффект впоследствии? Скажу честно: нам очень понравилось, как выглядит стрельба из лазеров с отдачей, и было бы несправедливо по отношению к художникам и дизайнерам просто отказаться от всей проделанной работы.
Как можно видеть, новая система отображения орудий ― масштабное начинание, затронувшее многие аспекты игры; рассказать о всех ее элементах невозможно в рамках одной статьи. При ее реализации не обошлось без ошибок ― хоть мы и попытались исправить как можно большее их количество перед выходом обновления. И тем не менее, эта система более надежна по сравнению с предыдущей, и она позволит нам продолжить работу над улучшением внешнего вида игры.
Надеюсь, что результат вам понравится.
-Salvo