Дневник разработчиков Stellaris № 38 от 27 июня 2016 года
Новый графический фон систем / New Skyboxes
Всем привет и добро пожаловать в очередной дневник разработчиков Стеллариса! На этой неделе должен был выйти дневник, раскрывающий наши взгляды на будущее игры, но мы решили отложить это на неделю - так что наш Арт-директор Aerie расскажет о некоторых графических изменениях, которые появятся с патчем «Азимов».
Этот дневник будет чуть более техническим и углублённым, чем остальные.
Одно из основных графических изменений, запланированных для «Азимова», это изменение заднего плана - того, что обычно называется Скайбокс (skybox). Основная выявленная проблема - отсутствие разнообразия от системы к системе. Получается, что из-за одного и того же скайбокса они все выглядели одинаково. В системах различное количество планет в разном сочетании, с разными владельцами и т.д. Но фон занимает 95% всех пикселей экрана в любой момент времени, так что он оказывается самым важным визуальным фактором.
То есть, надо просто наделать побольше скайбоксов, так?
Хорошо, но со скайбоксами есть проблема с очень большими требованиями памяти. Каждый занимает около 12.5МБ видеопамяти. Для сравнения, весь пользовательский интерфейс в игре занимает всего лишь 90 MB. Такие требования возникают из-за того, что размеры нашей текстуры 12280 x 2048 точек. Так происходит потому,что она охватывает все 360 градусов вокруг вас. Даже когда приближение камеры достигает 150%. Несмотря на размер, эти файлы ещё и достаточно сильно сжаты, так что с теми скайбоксами, что у нас есть, мы знаем о чём говорим. Из-за размера скайбоксов мы не стали рассматривать вариант с простым добавлением новых.
Тем не менее, мы придумали кое-что другое - перекрасили их. Можно использовать инструмент, называющийся LUT (таблица поиска элементов), в которой используются ссылки на текстуры под перекраску. Таким образом, мы можем совершить все необходимые изменения в Photoshop, используя цветовой баланс, уровни, кривые, смену оттенков и насыщенности, а потом заставить всё это отразится на текстурах в игре. LUT - это очень мощный инструмент, способный изменить настроение игры, который, тем не менее, имеет большой недостаток: его использование вызывает ещё больше проблем с артефактами сжатия, то есть в итоге с использованием памяти.
Как я уже говорил раньше, наш скайбокс не очень подходил для поставленных задач, хоть он эстетически и смотрелся на отлично, но, если говорить честно, был испорчен с самого начала. Всё что мы сделали, так это огромную панораму размером 4000x2000 точек. Изображение было обёрнуто вокруг сферы в Maya и обрабатывалось шестью камерами с полем зрения в 90 градусов, чтобы захватить всю информацию для скайбокса.
Но 4x2k текстуры недостаточно для 12x2k скайбокса, нам нужна была как минимум 8x4k текстура для работы.
Проблемы же всё углублялись и углублялись. Ещё до рендеринга, панорамная структура была создана в Photoshop, с помощью сшивания различных облако и туманностей, используя уровни и маски. Из-за этого у текстуры возникали проблемы с самопересечениями, а после импорта в Maya качество падало ещё сильнее.
В какой то момент мы рассматривали создание нового скайбокса с лучшим разрешением и исходными текстурами, но по той же методике. Но работа с 8x4k весьма требовательна к оборудованию, и чем больше слоёв, тем лучшие компьютеры требуются для продолжения. Что более важно, не было никаких гарантий, что это даст именно тот самый результат, на который мы рассчитывали.
Так что вернёмся к самому началу. Нам нужно что-то совершенно другое.
Мы решили попробовать поработать с симуляцией жидкости, используя её для создания окружения, которое потом легко было бы отрендерить. У нас был весьма ограниченный опыт работы с динамикой жидкости, но всегда прекрасно искать новые решения. С помощью жидкостей мы могли бы полностью обойти первый этап, избегая излишней порчи изображения. Работа с жидкостями в Maya весьма проста, так что после нескольких несложных учебных мы поняли, что сможем получить то, что надо.
До того как мы добавили новый скайбокс в игру из Maya, мы провели дополнительную работу в Photoshop, чтобы добавить больше деталей. Так что теперь у нас есть новый скайбокс, который выглядит примерно как старый, но лучшего качества и с меньшими проблемами при сжатии.
Для перекрашивания этого нового скайбокса оказалось недостаточно. Перекрашивание вызывало появление значительного количества артефактов, делая итоговую картину неприемлемой. У нас было больше вариантов, но в результате мы сделали три шага вперёд и два назад.
Один из ребят, работающих над движком, предложил использовать YCoCg сжатие. Вместо сохранения информации в виде RGB, данный метод сохраняет яркость, оттенок и насыщенность, что гораздо лучше подходит для цветов наших скайбоксов. Забавно, но метод YCoCg не отличается от того, как воспринимает цвета человеческий глаз. В любом случае, это отличный способ избежать порчи изображения, так что мы приняли эту классную идею на вооружение. Заставить это работать было несложно, а результаты не заставили себя долго ждать. Новые текстуры оказались в два раза тяжелее, по 25МБ каждая, но они закрыли такую часть экрана, что это точно того стоило. Если какая-то часть игры и требует таких графических ресурсов, так это скайбокс.
И всё таки этого недостаточно. Основная проблема, вызывающая большую часть артефактов, это резкие скачки оттенка, но нам в любом случае требовалась возможность перехода от сине-зелёного фона к жёлтому, красному или оранжевому. Так что, вместо использования LUT, мы проделали это прямо в движке, на этапе раннего рендеринга, с небольшой цветокоррекцией после. С этим способом мы можем даже влиять на цвета кораблей, так чтобы они более гармонично смотрелись в системе. В общем и целом, мы получили великолепный результат.

Кроме простого изменения цветов мы сделали кое что ещё, чтобы расширить разнообразие. Мы создали несколько новых скайбоксов с различной плотностью звёзд. Один будет использоваться ближе к центру, "средний", примерно похожий на уже имеющийся, и один для внешнего кольца, где звёзды станут гораздо реже, а скайбокс темнее.
Со всеми этими изменениями каждая система станет более уникальной, и будет гораздо проще понять, в какой точке галактики вы находитесь.
Источник: vk.com/stellaris_revolucion