Я помню шлейфы в EVE. Давным-давно они действительно у нас были. В моей памяти они были прикольными. И красивыми. И так я установил Empyrean Age снова и поиграл немного на одном из наших серверов на «Классическом клиенте», конечно. И тогда я понял, что старые шлейфы были на самом деле очень классные, но не то, что я назвал бы шикарными.
Взгляните, помните их?

Шлейфы в Empyrean Age

Так прошлым летом, когда в офисе было тихо, а у меня было свободное время я опять задумался над шлейфами: почему их убрали в Apocrypha... и самое главное: как их заставить выглядеть лучше и реднериться быстрее.

Мой первоначальный план был сделать их за лето. Я был слишком оптимистичен. Позже выяснилось, что совсем вообще детско-наивно оптимистичен...

Сплайны в помощь!

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

Посмотрите сами, как просты кубические сплайны Эрмита:

Теперь я знал, как создать плавную кривую, но конечно не так, как это происходит при правильном геометрическом искривлении. Плоскостной след? Звездоподобный? Или цепочки частиц? Если честно, я понятия не имел, и я думаю, не я один. Вот некоторые из наиболее перспективно выглядящих результатов:

Плоские, обращенные к камере
Плоские звездообразные


Как вы можете видеть: не очень красиво. Определенно они работают быстрее, чем старые, и еще быстрее, чем старые вызывают желания отключить их в меню настроек.

Трассировка лучей

И так, очевидно, что форма жесткой геометрии ломает объект на изгибе, заставляя выглядеть его совсем уродливым под определенным углом зрения. Так что теперь я не знал как их делать. В такой момент приходится делать шаг назад и еще раз подумать, чего-бы вам хотелось достичь: отрисовку плавно изгибающегося цилиндра (потому что это и есть шлейф как таковой),светящегося цилиндра, светящегося, плавно-изгибающегося цилиндра.

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

Математике для пересечения луча с бесконечным цилиндром:

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

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

Трассивровка лучей в конечном цилиндре
Формирование шлейфа конечными цилиндрами


Остальное просто: закрыть пробелы, применить немного выцветания/затухания и пусть художественный руководитель поиграет с размером, длиной и цветом:

Смотрится приятно и сглаженно

Не обращайте внимание на сервер

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

(Кстати, уже давно не лето...)

Одна из причин, почему старые шлейфы иногда получались перепутанными и накладывающимися в том, что они полагались на точную позицию корабля диктуемую сервером. Все MMO игроки знают, что это может привести к какому-то странному поведению движения корабля, особенно в ситуации когда вы ловите лаг. Таким образом, для позиционирования шлейфов я должен был игнорировать абсолютные положения корабля, вместо того, чтобы полагаться на быстрый и безошибочный отклик, движение должно быть интерполировано в клиенте (например, скорость, которую вы видите в HUD, никогда резко не изменится). Если вдруг ваш корабль поймает десинк и будет перепозиционирован, шлейфы просто «прыгнут» вместе с кораблем. Вы даже этого не заметите.

И наконец: точки контроля сплайнов проявляются лишь при позиционном смещении вашего корабля. Таким образом, чем быстрее корабль — тем длинее шлейф.

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

Wolf со шлейфом. Кликабельно
Следы от Punisher

Дальнейшее совершенствование

Конечно, всегда есть что-то большее. Некоторая анимация, поглощение света, преломление и т.д. и т.п. Мне хотелось бы тратить больше времени на шлейфы, так что если вам они вам понравились, я мог-бы получить больше времени для реализации всех идей.


Перевод © Loardriver

[#] 26.11.2011 @ 00:38 by CronMoonvexor
+ 1 -
только что с теста. шлейфы понравились - плавные, длинные, не ломаются xD
всем рекомендую глянуть, тем более что с сиси-ланчером настройка тест-клиента происходит в 2 клика

ах да, еще они повернули гейты :coolface: ответить
[#] 26.11.2011 @ 05:19 by Teneb Exal
+ 0 -
Интересно как сильно упадет FPS после обновы? ответить
[#] 26.11.2011 @ 05:32 by Rivilio
+ 0 -
Мой Purifier тихо плачет в уголке.... :( ответить
[#] 26.11.2011 @ 08:20 by Ermegil
+ 0 -
любопытно, как при уходе в варп след себя ведёт ? Если мне память не изменяет, то в древней версии он просто в какой-то момент разгона обрывался. ответить
- [#] 26.11.2011 @ 10:43 by eastwood
+ 0 -
После того как корабль разгоняется до нужной скорости (3/4 от скорости корбля), он начинает резко набирать варп скорость. Так вот, где то 0.5-1 сек след еще виден. По крайней мере так сейчас на тесте. Поэтому, если наблюдать за другим кораблем, после ухода его в варп, будет резкий недлинный след пед изчезновением корабля из поля видимости. Довольно приятно и реалистично смотрится :) ответить
[#] 26.11.2011 @ 10:09 by chipzet
+ 0 -
я кончил (= ответить
[#] 26.11.2011 @ 12:31 by frionis
+ 0 -
Лучше старые стрипы "со звуком" верните!!!! ответить

Написать комментарий
 
EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. CCP hf. has granted permission to EVE-RU to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, EVE-RU. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.