Я помню шлейфы в EVE. Давным-давно они действительно у нас были. В моей памяти они были прикольными. И красивыми. И так я установил Empyrean Age снова и поиграл немного на одном из наших серверов на "Классическом клиенте", конечно. (Везука, они могут поиграть еще в eve когда она была еще торт -прим. пер.) И тогда я понял, что старые шлейфы были на самом деле очень классные, но не то, что я назвал бы шикарными.
Взгляните, помните их?
Кликабельно.
Кликабельно.
Так прошлым летом, когда в офисе было тихо (Ага, значит все-таки в потолок плевали, а не лаги фиксили,... так и запишем - прим. пер.), а у меня было свободное время я опять задумался над шлейфами: почему их убрали в Apocrypha (Что значит почему? - Сами-же сказали, что они вызывают утечку памяти, Вы там между собой совсем что-ли не общаетесь? - прим. пер.) ... и самое главное: как их заставить выглядеть лучше и реднерится быстрее.
Мой первоначальный план был
Сплайны в помощь!
С самого начала это было довольно ясно, что мы должны использовать сплайны для новых шлейфов. Они дают вам приятные плавные изгибы и позиционируются лишь по паре контрольных точек и нормалей. И их математика достаточно проста, чтобы быть реализованной в вершинных шейдерах, так что нет необходимости обновлять VertexBuffer каждый отдельный кадр для каждого корабля в сцене. Кстати, по такому-же принципу работали и старые шлейфы. (Ну да, ну да, старые грабли лучше нового трактора. Уже знаешь куда прийдется удар - прим. пер.)
Посмотрите сами, как просты кубические сплайны Эрмита:
(o_O ???! - прим. пер.)
Теперь я знал, как создать плавную кривую, но конечно не так, как это происходит при правильном геометрическом искривлении. Плоскостной след? Звездоподобный? Или цепочки частиц? Если честно, я понятия не имел, и я думаю, не я один (Ага, точно между собой не общаются - прим. пер.). Вот некоторые из наиболее перспективно выглядящих результатов:
Кликабельно.
Кликабельно. (это то, что Звездноподобно, ... я-бы сказал звездато, точнее звиздец (star-shaped в оригинале) - прим. пер.)
Как вы можете видеть: не очень красиво. Определенно они работают быстрее, чем старые, и еще быстрее, чем старые вызывают желания отключить их в меню настроек.
Трассировка лучей
И так, очевидно, что форма жесткой геометрии ломает объект на изгибе, заставляя выглядеть его совсем не звездато под определенным углом зрения. Так что теперь я не знал как их делать. В такой момент приходится делать шаг назад и еще раз подумать, чего-бы вам хотелось достичь: отрисовку плавно изгибающегося цилиндра (потому что это и есть шлейф как таковой),светящегося цилиндра, ... светящегося, плавно-изгибающегося цилиндра.
И тут меня осенило: почему бы не решить проблему с трассировки лучей в пиксельном шейдере? На первый взгляд это звучит немного глупо (а выглядит вообще четырехэтажно, в чем вы скоро убедитесь - прим. пер.), но когда вы посмотрите на математику, что это не так сложно. Пересечение луча с конечным цилиндром, безусловно, выполнимо в шейдере и с учетом довольно большого числа тех конечных цилиндров шлейф в результате будет плавно-изогнутым цилиндром.
Математике для пересечения луча с бесконечным цилиндром:
Теперь нам нужно, поделить этот бесконечный цилиндр на конечный при втором условии: направление отрисовки должно перекрываться и ограничиваться кораблем.
(Все просто, это математика – К.О. –прим. пер.)
В итоге нам удалось получить точку входа и выхода наблюдаемую в конечном цилиндре, в результате чего этот луч и есть шлейф. На основании этого легко выводятся некоторые световые значения:
Трассивровка лучей в конечном цилиндре. Кликабельно.
Формирование шлейфа конечными цилиндрами. Кликабельно.
Остальное просто: закрыть пробелы, применить немного выцветания/затухания и пусть художественный руководитель поиграет с размером, длиной и цветом:
http://cdn1.eveonlin...54/3217/10.jpg'>
Смотрится приятно и звездато. Кликабельно.
Не обращайте внимание на сервер
Теперь я знал, как сделать шлейфы, но я все равно должен был выяснить, где фактическое положение всех точек сплайна, т.к. контроль будет поступать из них.
(Кстати, уже давно не лето ...) - Спасибо, Кеп – прим. пер.
Одна из причин, почему старые шлейфы иногда получались перепутанными и накладывающимися в том, что они полагались на точную позицию корабля диктуемую сервером. Все MMO игроки знают, что это может привести к какому-то странному поведению движения корабля, особенно в ситуации когда вы ловите лаг. (Все помнят десинки, да? Кто не помнит – кыш из темы, дайте отцам понастальгировать, они еще помнят, когда eve была торт– прим. пер.) Таким образом, для позиционирования шлейфов я должен был игнорировать абсолютные положения корабля, вместо того, чтобы полагаться на быстрый и безошибочный отклик, движение должно быть интерполировано в клиенте (например, скорость которую вы видите в HUD никогда резко не изменится). Если вдруг ваш корабль поймает десинк (Вы-же говорили, что победили их?-Да научите вы их уже разговаривать друг с другом – прим. пер ) и будет перепозиционирован, шлейфы просто «прыгнут» вместе с кораблем. Вы даже этого не заметите. (Прямо как при лагогенераторе – вас уже убили, а вы и не заметили – прим. пер.)
И наконец: точки контроля сплайнов проявляются лишь при позиционном смещении вашего корабля. Таким образом, чем быстрее корабль – тем длинее шлейф. (На капах я уже проверил – тетановоды будут страдать – не видать им своих шлейфов – прим. пер)
Все это собралось как раз вовремя, чтоб быть выпущенным в Crucible, так что я очень надеюсь, что вы будете наслаждаться новым шлейфами. Я знаю что делал, потому что теперь они так же хороши, какими я их помнил.
Хвостатый волк. Кликабельно.
Православные шлейфы православны после православной пуньки. Кликабельно.
Дальнейшее совершенствование
Конечно, всегда есть что-то большее. Некоторая анимация, поглощение света, преломление и т.д. и т.п. Мне хотелось бы тратить больше времени на шлейфы, так что если вам они вам понравились, я мог-бы получить больше времени для реализации всех идей.
Обсуждение ( Я так понимаю тут все желающие могут отписаться в пользу того, чтоб CCP Mankiller`a не перекидывали на другие задачи, а позволили ему доработать шлейфы до высшей степени звездатости – прим. пер.)
Сообщение отредактировал Loardriver: 25 November 2011 - 23:57