Дев блог → СarbonUI и EVE Online: incursion 1.6

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

Почему CarbonUI?

Интерфейс в EVE значительно устарел к текущему времени, так же как и основная часть кода, отвечающая за рендеринг. Старый интерфейс рендерился, используя fixed-function рендеринга в Direct3D — основной в D3D7 подход. D3D9 так же поддерживает этот подход, но это может сыграть злую шутку с производительностью, и ограничивает вас только возможностями, которые предлагают fixed-function — никаких модных шейдеров, например.

Мы планировали тюнинг UI долгое время по ряду причин:

  • улучшение юзабилити;
  • улучшение внешнего вида;
  • улучшение производительности.

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

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

Итак, CarbonUI — это эволюция структуры текущего пользовательского интерфейса и его фреймворка, с совершенно новой системой рендеринга. Мы старались изменить настолько мало, насколько это вообще возможно в верхнем уровне UI, так что UI-программисты, работающие в Python не увидят больших изменений — и что более важно, это ~200K строк UI кода, который продолжает работать. Было много кода требующего модифицирования для работы с новыми слоями рендеринга или был простов крайне необходим рефакторинг. Результатом стало то, что немногие файлы UI были затронуты изменениями.

Некоторые ключевые особенности:

  • Сцены UI могут быть реализованы в различных контекстах;
  • Объекты UI могут быть отрендерены в текстуры для создания 3D объектов;
  • UI станет поддерживать 3D, что позволит произвести взаимодействие с UI в 3D сценах;

Скриншоты показывают возможность отображения элементов 2D интерфейса на экране 3D объекта.

  • UI так же позволяет рендерить набор 2D примитивов в 3D сцену, позволяющую прорисовать всё это с созданием эффекта глубины и перспективы;

Интерфейс кают капитанов использует новые возможности CarbonUI.

  • 2D рендеринг как 2D наложение;
  • Весь Python код и объекты UI могут быть использованы в различных контекстах — сцены могут быть перемещены из одного контекста в другой на лету;
  • Производительность стала лучше, чем была на старом UI;
  • Текстуры автоматически собираются в текстурный атлас, делая гораздо более эффективным рендеринг без отягощения работы художников UI;
  • Клиппинг сделан в пиксельных шейдерах;
  • Трансформации происходят в вершинных шейдерах;
  • Пиксельные шейдеры делают премультипликацию альфа слоя как непрозрачного, прозрачного и адитивно смешаного в D3D режиме наложения;
  • В результате обращений к рендеренгу стало менее 10, а раньше это было более 100 обращений;
  • Выравнивание полностью отделено от рендеринга;
  • Выравнивание теперь полностью выполнено на Python, что является более легким в обслуживании;
  • Оптимизация рендеринга больше не приводит к риску потери выравнивания;
  • Рендеринг теперь полностью происходит при помощи шейдеров, что открывает нам возможность делать всякие крутые штуки на них;
  • Теперь все примитивы полностью поддерживаются основные эффекты, такие как тень, свечение, размытие;

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

  • Новые библиотеки полностью написаны на Питоне, что позволит делать более легкий и динамичный UI.

Выравнивание

Что мы имеем ввиду под выравниванием? Это то, как элементы UI расположены на экране, грубо говоря, координаты по оси X и Y, но программист UI не должен размещать их по этим координатам. Для примера, если она хочет разместить кнопку внизу экрана, то кнопка получает CENTERBOTTOM выравнивание. Если окно изменяется-то координаты пересчитываются, так, что бы кнопка осталась по центру внизу экрана.

Перемещение этой функции из C++ в Питон — было не однозначным решением. Это конечно быстрее отрабатывается в C++, но мы много усилий положили на улучшение производительности в Питоне. С другой стороны это было ДО, что означало, что внесение изменений будет сопряжено с некоторыми трудностями.

Это было связано с двумя причинами:

  • Рендеринг и выравнивание — это переплетенные воедино темы, изменение одного влекло за собой риск потери работоспособности другого;
  • Цикл тестирования разработки на Питоне значительно короче цикла тестирования разработки на С++.

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

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

Почему это должно меня волновать?

Когда EVE была запущена около 8 лет назад, UI выглядел круто по сравнению с другими играми. Времена меняются, а вот наш пользовательский интерфейс не очень. Хотя такие проекты как CarbonUI трудно даются — мы всегда должны делать что-то такое, что позволяет выйти за рамки, использовать всё, что дают современные технологии. Даже если игроки не увидят сейчас очевидной разницы, когда мы запустим CarbonUI на TQ, то мы можем вам гарантировать, что наши дизайнеры интерфейса будут слышать от программистов — «Ага, без проблем» значительно чаще, когда ставят им очередную сумасшедшую идею в задачи. В конечном счете, наша любимая игра про космические кораблики станет еще лучше.

Что будет с производительностью?

Мы расскажем подробнее о разнице в производительности с CarbonUI в будущем девблоге!


Перевод © Chegevarich, небольшие правки © .up

Обсуждение на форуме EVE-RU.


Написать комментарий
 
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.