Старая проблема
Фундаментальный вопрос любого CGI программиста: «Какого цвета этот пиксель на экране?» Чем более точно программист ответит на этот вопрос, тем выше качество картинки в итоге. Основные инструменты для получения точного ответа — это, естественно, физика и математика. В то же время, найти точную формулу, которая бы описывала как выглядит окружающий мир, невозможно хотя бы из-за нашего текущего уровня понимания.
Так что же мы делаем в CGI? Мы упрощаем! И мы вынуждены это делать потому, что, как минимум в компьютерных играх, изображения, которые мы должны рассчитать, должны быть представлены игроку в режиме реального времени, а он отчаянно желает видеть «реалистично» отображённые взрывы космических кораблей. В такой ситуации мы обязаны упрощать ради эффективности и, в тоже время, поддерживать настолько реалистичную математическую модель, насколько это возможно.
Старый ответ
В прошлом мы определяли цвет пикселя используя формулу названную «Модель отражения Фонга», которая была так популярна, что она была встроена в аппаратное обеспечение первого поколения видеокарт. Эта модель была частью дошейдерной реализации графического конвейера, которая также известна как Fixed Function Pipeline. Она представлена на формулах внизу:
Несмотря на то, что это модель была изобретена в 1973 году, она до сих пор позволяет получить очень хорошие результаты. Огромное число игр и фильмов были созданы с её помощью, в том числе и EVE Online.
С момента своего создания модель Фонга была многократно улучшена. Одно из крупнейших улучшений произошло когда были представлены языки программирования шейдеров. Они были введены с целью замены конвейера с фиксированной функцией (Fixed Function Pipeline). Это улучшение дало программистам значительную свободу в вопросах генерации каждого пикселя на экране. Но, несмотря на наличие таких улучшений как карты нормалей, карты отражений, cubemap reflections и т.д. конечные результаты всё ещё полагались на базовые принципы старой модели.
Новый ответ
Несмотря на всю её популярность, модель Фонга показывает свой возраст. И одной из самых заметных её морщин является игнорирование закона сохранения энергии — фундаментального принципа физики. Это значит, что при определённых условиях освещения, итоговый пиксель получается значительно ярче, чем бы он был, если бы учитывалось количество переданной ему энергии. Это мешает нам сделать картинку более реалистичной.
Следовательно, нам нужна новая и лучшая формула для точного определения цвета пикселя. Она должна учитывать сохранение энергии и быть более сложной и реалистичной по сравнению с моделью отражения Фонга. В конце концов, циклы графического процессора созданы для того, чтобы показывать лучшие результаты!
На самом деле, мы можем заменить одну формулу набором из нескольких, которые бы использовали одни и те же данные (свойство материала), но с разными уровнями точности/упрощения. Этот новый набор моделей визуализации называется «Физически точный рендер» или ФТР.
Для использования в Новом Эдеме мы выбрали следующие модели: аппроксимация Шлика (Schlick’s approximation), функция распределения Троубриджа-Рейтца (Trowbridge-Reitz distribution или GGX) и функция видимости Шлика-Смита (Schlick-Smith visibility function). В общем и целом, достаточно стандартный ФТР коктейль для работы с неорганическими объектами. Чтобы дать вам идею о сложности наших вычислений, ниже приведена формула для спекуляра:
Вот некоторые из результатов (корабли с новой ФТР моделью показаны на скриншотах, где корабль ближе к камере):
Новая проблема
Казалось бы, стоит поковыряться в математических формулах, улучшить поведение света и материалов, сделать всё более близким к реальности, а потом включить новые формулы в EVE и всё сразу станет превосходно, да?
В общем — нет.
С одной стороны, ФТР показывает состояние наших ресурсов гораздо точнее. Однако, в прошлом мы иногда полагались на физически неточные числа чтобы избежать определённых проблем с изображением. Теперь же нам придётся исправлять те проблемы заново и напрямую. Соответственно, много графических ресурсов будут в отличном состоянии только после дополнительной работы.
Мы всё время ищем проблемные места и вырабатываем подходы к решению найденных проблем. В некоторых случаях мы просто переколбашиваем карты нормалей. В других — нам приходится изменять параметры объектов. В особых случаях, мы вынуждены прибегнуть к полному редизайну. Мы надеемся, что после реализации ФТР в EVE, капсулиры со всего Нового Эдема внесут свой вклад в развитие графической составляющей игры, а также получат удовольствие от постоянно улучшающего качества изображения.
Кроме всего прочего, новый подход позволяет нам в дальнейшем улучшать качество наших шейдеров. Мы спокойно сможем добавить в игру новый материал, добавить динамическую грязь (старые корабли выглядят как старьё?) или сгенерировать карты затенения (ambient occlusion maps) для кораблей субкапитальнго класса. И, естественно, не стоит забывать о кастомизации кораблей. После применения новой логики для определения цвета пикселей, у нас резко возрастёт количество возможностей для улучшения внешнего вида EVE.
Это реальное преимущество технологии ФТР и, одновременно, причина, по которой мы работали для того, чтобы представить эту технологию в Рее (Rhea).
Перевод © Garret