THe first Unofficial
Russian Community

Система света

Сегодняшнее обновление одно из самых важных и волнительных, так как относится к нашему движку, который, по сути, был заполнен только технически. Начиная с Кикстартера мы преуменьшали некоторые ожидания нашей команды и наших вкладчиков того, как будет выглядеть игра на старте. Делали мы это, потому что я и Эндрю верим, что лучше уж удивить людей хорошими новостями, нежели расстроить плохими. Как мы всегда говорили — никогда мы не сядем на поезд несбыточных обещаний, и пусть сделанное нами говорит само за себя. И так с огромным удовольствием представляю вашему вниманию статью в которой Эндрю расскажет Вам о том над чем работала наша команда за кулисами и что мы надеемся внедрить в Hatchery в течении пары недель. На этой ноте я удаляюсь!

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

— Марк Джейкобс

До сих пор в CU было достаточно простое освещение, по своему типу напоминающее освещение в театральных постановках средней школы. У нас было солнце дающее «ключевой свет» и «заполняющий свет», который отсвечивал под углом и бросал голубое размытие на тени, в то время как всё остальное было тёмным. Эта система была использована для того, что бы получить инструмент для работы с другими вещами и всегда была в листе того, что должно быть переделано. Сейчас Джордж и я взяли цель на то чтобы довести сделанное до стандартов 2016 года. Мы надеемся, что игра доживёт до 2026 года, так что это задел на будущее.

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

Некоторые игровые движки делают эти вычисления заранее, но этот подход недостаточен для CU. Весь наш мир динамичен. Игроки могут строить и разрушать строения. Земля изменяется в зависимости от того, кто её контролирует. Время суток и углы освещения полностью меняются. Нам необходимо освещение, которое будет адаптироваться на лету к миру, который изменяется на лету.

Частью захвата этих отражений от объектов мы добавили то что называется «Кубическая карта». Кубическая карта это развёртка шести граней куба, на каждой из которых текстура. Выглядит так:

Кубическая карта

Если вы посмотрите в центр куба, то увидите все направления. Примеры можно посмотреть здесь.

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

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

Для того, что бы увидеть различия, сравните эти изображения, на одном просто солнце, на другом сетка света. Вы можете видеть детали здания и видеть что тени уже не просто чёрные и при этом ничего не размыто. Разные цвета разного света во всевозможных направлениях создаёт контраст, который изменяется в зависимости от поверхности.

Сравнение света на двух изображениях

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

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

В итоге мы осознали, что действительно должно обрабатываться в карте куба. Видеть врага, стоящего далеко на горе важная часть игрового процесса, но это не важная часть того, как свет падает и отражается от вашего персонажа. Также и частицы могут быть удалены, как и трава и многочисленные кусты. Модели используемые в игре обычно имеют несколько уровней детализации, начиная с нескольких десятки тысяч треугольников, когда вы находитесь близко к объекту и до нескольких сотен когда далеко. Второй пример подходит идеально для освещения. Самые важные модели это небо, земля, и близстоящие здания и результат всегда достаточно хорош — и что более важно достаточно быстр для того чтобы поддержать огромные сражения которые являются ядром CU. На этой картинке вы можете видеть огромное отличие от системы нынешней (тёмное изображение) и новой (светлое изображение).

Система света, сравнение

Галерея Эндрю с нынешней системой света - (тёмное изображение), и новой (светлое изображение).

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.