Duke экспериментирует с PBR (physically-based rendering) – физическим методом рендеринга, в сочетании с IBL (image-based lighting) – освещением на основе карт окружения. Чтобы интегрировать это в SE, была добавлена поддержка PBR текстур для кораблей, возможность указать, требует ли материал карту окружения, и дополнительный проход фильтрации созданной карты окружения (специальное размытие, необходимое для PBR и IBL). Таким образом, модели кораблей теперь освещаются своим реальным окружением, а характеристики их поверхности (отражательная способность и рассеивающие свойства) задаются текстурами попиксельно. Набор текстур включает:

  • Карты альбедо, нормалей и эмиссии – как и до этого в SE, это текстуры, которые определяют цвет поверхности, нормали и цвет свечения.
  • Карты шероховатости и металличности теперь заменяют карту бликов (specular). Обе – текстуры в градациях серого. Первая определяет гладкость поверхности: менее грубые поверхности похожи на зеркало, а более грубые выглядят матовыми. Вторая – это переключение между металлами и диэлектриками, поскольку эти два класса материалов взаимодействуют со светом по-разному.
  • Карта затенения окружения (ambient occlusion) – это текстура в градациях серого, которая задаёт небольшие тени в углах и различных углублениях модели.
  • Пока что карты шероховатости, металличности и AO объединены в единую RGB текстуру, но в будущем можно будет задавать любые комбинации (например, поместить карту металличности в альфа-канал карты альбедо, а шероховатости – в альфа-канал карты нормалей).

    Тестовые скриншоты пока не выглядят на 100% правильными, но это только начало. Стандартный тест PBR – массив шариков с постепенно изменяющейся металличностью (сверху вниз) и шероховатостью (слева направо):

    В файлах материалов корабля *.sml введён новый тег MaterialPBR {…} для описания PBR-материала. В нём задаются пути к вышеупомянутым текстурам, а также аддитивные и мультипликативные константы. Последние можно использовать для подстройки внешнего вида материала или для задания материала без текстур, то есть с однородным цветом, шероховатостью или металличностью, как, например, на скриншоте с шариками. Таким образом, SE теперь поддерживает как PBR, так и старые «specular» материалы (они используются для старых моделей кораблей, материалы которых описаны в тегом Material {…} в скрипте).

    Тестовая модель Damaged helmet:

    Тестовая модель Cerberus:

    Эта система всё еще требует серьёзной доработки, поэтому не ожидайте, что она будет завершена в 0.990. Основная проблема – скорость обновления карт окружения. Рендеринг самой карты окружения – и так сложная задача для SE (вспомните, как настройки качества чёрных дыр и варп-эффекта влияют на производительность). А проход фильтрации сгенерированной карты ещё хуже, шейдер очень тяжёлый, т.к. вычисляет двумерную свёртку. Также есть проблемы с учётом освещения от солнца, которое должно быть аналитическим (так что на него не будут влиять окклюдеры, такие как облака, горы и другие корабли – для их учёта надо реализовать тени). Но всё же моддеры могут уже начать переводить свои старые аддоны кораблей на PBR текстуры. Существует множество программ, которые могут помочь в преобразовании старых текстур в PBR текстуры, например, эта.

    Обсудить на форуме.