Skip to content

xroo/xroo_cop_pbs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 

Repository files navigation

xroo CoP PBS

Physically Based Shading for Call of Pripyat

В общем

Проект модификации шейдеров S.T.A.L.K.E.R. Зов Припяти, позволяющий создавать PBS материалы для игры. Главные цели проекта:

  • иметь Metalness, Roughness, Occlusiion карты в текстурах;
  • шейдеры не должны взрывать картинку с оригинальным контентом и требовать полной переработки;
  • работать на ванильном движке, или OpenXRay 1.6 для максимальной совместимости со всем вообще.

В поставке:

  • шейдеры для R3 и R2;
  • набор текстур для демонстрации.

Важно знать

  • Работает на R3 и R2. Изменений в R1 не произведено. Да и надо ли?
  • Контент всё равно требует приложить к нему руку, потому что:
    • По умолчанию все материалы - матовые диэлектрики, чтобы материалы блестели где надо и не блестели где не надо нужно нарисовать соответствующие карточки;
    • Не смотря на то, что контент не взрывается, персонажи стали выглядеть как бумажные статуэтки с принтом человека.

В контент включены:

  • SSLR шейдер от Anonim https://www.amk-team.ru/forum/topic/14078-sslr/#comment-1287250, простая реализация;
  • GTAO, простая реализация от LVutner, дополненная шумом из ассета для Unity. На данный момент они интегрированы только на R3. Оптимизаций алгоритмов не производилось.

Рекомендованные настройки user.ltx для включения всех фич

  • r3_gbuffer_opt off обязателен, чтобы мод заработал, в шейдерах своя паковка связанная с костылями, чтобы завести PBS, для которой нужны все карточки в gbuffer-е, подробнее в технических подробностях;
  • r2_ssao_blur on, r2_ssao_opt_data off, r2_ssao_mode default - для того, чтобы завести GTAO с размытием.
  • r3_dynamic_wet_surfaces on, r3_dynamic_wet_surfaces_far 70., r3_dynamic_wet_surfaces_near 50., r3_dynamic_wet_surfaces_sm_res 512 - для того, чтобы дистанция намокания и переход между сухим намокшим были приемлимые.

Известные проблемы

  • На GTAO с r2_ssao_blur 1 вокруг предметов вплотную к небу чёрная обводка, я сделал, чтоб она была белой, но это проблема halfres рендера ssao;
  • Для irradience map заготовлены small sky в софтине Lys. Вместо irradience использован specular с настройкой roughness 0.5, потому что так красивее;
  • Для источников света используются отдельные карты диффуза и глосса, потому что accum шейдерах буффер COL пустой - движок отдаёт только POS и NORM. Дождь изменяет одни диффуз и глосс, а источники света берут другие. Поэтому для источников света нет намокших поверхностей.

Технические особенности

Порядок каналов в _bump:

R G B A
metalness roughness normal y normal x

Порядок каналов в _bump#:

R G B A
normal err x normal err y AO * 0.5 height

В текстурах в ресурсах ваниллы G канал _bump в целом белый, а B канал _bump# в целом серый. Поэтому в G канале _bump именно roughness, а не gloss. А AO в B канале _bump# находится в значениях от 0 до 128.

  • В шейдере изменён порядок каналов GBuffer-а для того, чтобы PBS рендерился без правок движка.
  • POS.xy заменены на 4 канала color+gloss, сжатые с потерями в два. Сделано это для того, чтобы в s_accum получить полный результат просчёта света от источника, включая блеск и диффузный цвет;
  • roughness карта в буфер помещается как 1 - roughness, чтобы намокание правильно работало.
  • я вынул mtl индекс из gbuffer. В X-Ray он в основном нужен, чтобы применять разный характер отражения на поверхностях. Но теперь нельзя делать хаки, назначая кастомный mtl индекс на текстуры и применять к ним особенные эффекты.

Порядок каналов в GBuffer:

- RGB A
POS [color.rgb, gloss], position.z metalness
NORM normal.rgb hemi
COL color.rgb gloss

Что нельзя реализовать без правки движка:

  • рабочий texCubeLOD на R2, он нужен, чтобы размывать скайбокс в зависимости от шершавости поверхности. Доступен только выбор между skybox и smallsky;
  • вращать отражение скайбокса вслед за скайбоксом;
  • тинтить отражение скайбокса при помощи sky_color;
  • сделать, чтобы на намокших от дождя поверхностях были блики от источников света
  • SSLR на полуматовых поверхностях - нужно делать mip-map-ы буфера.
  • SSAO blur сейчас работает следующим образом. Он рендерит SSAO в буфер в полразмера, затем его нужно взять в полный размер и затем размыть. Правильно было бы размыть его в пол-размера, записать в буфер и его уже увеличить до полного, но vanilla движок такое не позволяет.

ToDo:

  • Исправить все баги.
  • Доделать перенос шейдеров на R2, как оказалось, не все шейдеры поправлены.
  • Добавить сюда скриншотов;
  • Перенести SSLR и GTAO на R2;
  • Оттестировать все источники света и все шейдеры на работу с новым пайплайном;
  • Набор демонстрационных текстур окружения;
  • Набор демонстрационных текстур HUD моделей;
  • Набор исправленных текстур персонажей, чтобы они не выглядели так страшно;
  • Демонстрационная локация;
  • Починить фильтрацию rain shadow map, чтобы на вертикальных поверхностях полосы исчезли.

Вечное ToDo:

  • Добавить Filtered Importance Sampling (на самом деле он совсем не обязательный);
  • Сделать новый шейдер террейна с параллаксом на основе sufrace_bumped, height маской между слоями (очень спорная опциональная история, которая звучит дорого, а height маска ещё и очень кастомно, потому что falloff материалов придётся хардкодить, фича может пригодиться в модах);
  • Оптимизации GTAO и SSLR (я тупой, это сложно, я сам не осилю).

About

Physically Based Shading for Call of Pripyat

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published