Как настроить шейдеры в сталкер

Обновлено: 30.06.2024

Шейдерпак с полной поддержкой текущей ревизии X-Ray Extensions. Для разработчиков модов, онли.

Изменения оригинала:
- Новые модели освещения для инфинити и локальных источников
- Усиление качания деревьев
- Убран уродский блум ламп и пересветов
- Правка фильтрации смаллскаев
и пр.

Имеется опциональный файл _shaders_config.h
В помощь модмейкеру:
Список эффектов и не только настройки которых можно менять ингейм (альт-табом):
- SSAO / implementation by daemonjax
- Саншафты ака GodRays
- Setting local light
- misc lighting
- Shadow
- Sky4CE sunshafts
- Depth Of Field - By Meltac, Sky4ce
- Saturation and Contrast

Всё остальное изменяется только с перезапуском игры.

Все копирайты внутри кода сохранены.
Чьё творчество было использовано: KD87/лучи, софт вода и частицы, волнующаяся трава, Codemaker aka DX11.2 aka Codepoet/твик лучей, Meltac/Depth of field, dynamic depth of field, Zoom depth of field, Saturation and contrast filters, Sky4CE/parallax occlusion mapping, back sunshafts, depth of field, cj ayho/soft shadows, local lights fixes, macron/shaders 2218, new infinite light model, other, Daemonjax/ new ssao implementation

Установка:
- Скопировать папку R2 в папку shaders
- Пропатчить свой движок расширениями из X-Ray Extensions
- А так же потребуется внести изменения в погодные конфиги в соотвествии с расширениями для работы лучей.

sun_shafts = x ; значение в пределах 0 - 1 интенсивность лучей
sun_shafts_density = x ; значение в пределах 0 - 1 длина лучей / фронт лучи, онли, тоесть длина бэк лучей не изменится.
Поскольку я в шейдере сделал проверку примерно такого содержания: лучи активны только тогда, когда оба приведёных значения больше нуля. Сделано во избежания всяческих косяков с плавным появлением лучей, да и оптимизация к тому же.
Использовать конфиги так: за нужный час до того как нужно проявить саншафты ставим длину лучей на нужное значение, а уже со следующего часа активировать оба. Так лучи появятся плавно без "вырастания". Иначе вы получите постепенно удлинняющиеся лучи при одном количестве семплов, а это не очень красиво. По хорошому нужно делать лучи с поэтапным семплированием, но я ещё не разобрался с masm32, а без добавления нового юниформа в движок это не сделать.
Третий параметр rain_max_drop_angle = x ; ахтунг! задаётся в градусах. По умолчанию для дождя стоит 10 градусов отклонения от оси. Поэтому для прямого дождя стоит указать значение равное нулю.

Как разберусь с установкой masm32 на win10 сам добавлю игровые опции в следующую версию.

Ссылки на скачивание:

S.T.A.L.K.E.R.: Shadow of Chernobyl "Dynamic Shaders by Meltac"

- Тестировалось на 1.0005, но должно работать и на остальных
- Фичи работают только на динамическом освещении и выше
- Появление радуги появляется только при определённых погодных условиях (как и положено), поэтому мод плохо совместим с другими погодными модами
- Для работы с другими модами может также потребоваться адаптация bind_stalker.script

Благодарности: Ket, Sky4ce, Kingo64, BAC9-FLCL, Daemonjax, LoNer1, Lyoko774, DDraig, OGSE Team, Thunderfreak

Скриптовые шейдеры

Редактируя любую модель, многие в свойствах поверхностей замечали графу shader, в которой указывается нечто вроде models/model или подобные. Как правило, эти шейдеры упакованы в shaders.xr и shaders_xrlc.xr, которые представляют собой своеобразную базу данных шейдеров, собранных по определенным шаблонам.

Но кроме этих баз данных есть еще и скриптовые шейдеры, которые имеют приоритет перед теми шейдерами, что упакованы в *.xr. Это файлы, имеющие расширение .s и лежащие в папках соответствующих рендеров. Вычислить правильное название шейдера в БД и шейдерного скрипта .s можно очень просто - для примера, если у нас в БД шейдер находится в model/selflight, то имя шейдера должно быть model_selflight.s, если details/blend, то скрипт шейдера будет, соответственно, details_blend.s. Не так уж сложно.

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

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

По некоторым причинам я считаю что для модостроителей шейдерные скрипты являются более предпочтительными, чем распространение своих шейдерных модов в виде модифицированной .xr-БД. Причины в основном две: Во-первых скриптовые шейдеры предоставляют бОльшие возможности для полета фантазии, а во-вторых распространение шейдерных модов в виде скриптовых шейдеров все же делает меньше вероятность конфликта модов, так как разные шейдеры будут в разных файлах, а не все вместе в одном хитром и трудноредактируемом, и, что самое плохое, - труднообъединяемом файле. Поэтому далее мы рассмотрим скриптовые шейдеры.

Что собой представляют шейдерные скрипты? Это обычные скрипты на lua, которые являются своеобразным языком для того чтобы объяснить движку, какие загружать текстуры и какие подключать шейдеры из наличествующих .ps и .vs файлов.

Для тех кто воспрял духом сразу скажу, что несмотря на то, что шейдерные скрипты написаны на языке, который используется в игровых скриптах, это все-таки не одно и то же. Во-первых шейдерные скрипты выполняются при загрузке уровня всего один раз (в фазу загрузки "загрузка шейдеров"), поэтому на отрисовку в реальном времени влиять неспособны, и кроме того, к игровым скриптам скриптовые шейдеры доступа не имеют.

Вот, для примера, содержимое простейшего скриптового шейдера:

Разберем его по косточкам:

  • function normal - объявление стандартной функции шейдерного скрипта. В некоторых шейдерах есть еще функции l_spot, l_point, l_special и normal_hq аналогичного содержания, но явно просчитывающие поведение этого шейдера в условиях освещения
  • shader - вероятнее всего идентификатор шейдера в игре, содержимое этой переменной обычно представляет собой текстовую строку вроде "models_selflight" или "models/selflight".
  • t_base - путь к текстуре, которую следует выводить с помощью этого шейдера
  • t_second, t_detail - пути к другим текстурам, пока назначение их неизвестно.
  • shader:begin( "effects_gradient", "effects_gradient_p" ) - святая святых шейдера. Если точнее - создание объекта шейдера как такового.


После этой строки могут быть такие строки (они необязательны)

  • : blend ( true, blend.srcalpha, blend.one ) - настройка блендинга для текстур с альфой, например, полупрозрачные текстуры без применения этой строки будут выглядеть непрозрачными черными в прозрачных местах. Эти методы блендинга соответствуют переключателю в сдк, где варианты ALPHA-ADD, BLEND, SET и так далее. На примере выше блендинг соответствует положению ALPHA-ADD.

Также вот таблица, по которой можно выбрать остальные параметры блендинга, выбирая в таблице по порядку слева направо:

  • : sorting ( 3, false ) - порядок отрисовки поверхности по отношению к самому объекту, частью которого является поверхность.
  • : aref ( false, 2 ) - функция переключает режим тестирования пикселей по альфе. Первый аргумент - вкл/выкл, второй аргумент - значение альфы, используемое в сравнении альфы пикселей. Если пиксель проверку не прошел, он не будет отрисовываться. Как именно происходит проверка альфы, пока непонятно, функция проверки устанавливается где-то в движке.
  • : zb ( false, false ) - устанавливает функцию сравнения пикселей при z-тесте и включает режим записи в z-буфер для текстуры. Первый аргумент - функция сравнения (false - D3DCMP_LESSEQUAL - пиксель проходит тест только, если его z меньше или равно текущему пикселю, true - D3DCMP_ALWAYS - пиксель всегда проходит тест). Второй аргумент - включение записи в z-буфер, тут вкл/выкл.
  • : fog ( false ) - отключает освещение текстуры и включает для нее FOG DirectX.
  • : emissive ( true ) - применяется в источниках освещения.
  • : distort ( true ) - представляет из себя механизм искажений, аналогичный эффекту искажающегося воздуха в некоторых аномалиях, а также "линза" в главном меню над кнопками.
  • : wmark (true) - используется в валлмарках


Перечисленные ниже параметры могут быть только ниже сэмплерной строки!

  • : texture ( t_base ) - помещение в вышеобъявленный буфер текстуры. Аргумент этой ф-ции представляет собой путь к текстуре, так что вполне можно указать нечто вроде

чтобы в буфер воткнуть текстуру gamedata/textures/fx/fx_sun.dds


Следующие функции устанавливают один из режимов адресации текстуры. Режим адресации определяет способ обработки текстурных координат при выходе их за пределы диапазона [0.0,1.0]

  • : clamp() - режим адресации D3DTADDRESS_CLAMP. Значения текстурных координат, выходящие за рамки [0.0,1.0] обрезаются до 0.0 и 1.0 соответственно. Соответствует галке Texture Clamp в сдк.
  • : wrap () - режим адресации D3DTADDRESS_WRAP. При выходе значений текстурных координат за пределы [0.0,1.0] от значений отнимается их целая часть. Другими словами, если у вас u,v получились [1.3, 2.5], в этом режиме семплирование текстуры будет происходит по координатам [0.3, 0.5].
  • : mirror () - режим адресации D3DTADDRESS_MIRROR. При выходе значений текстурных координат за пределы [0.0,1.0] от значений отнимается их целая часть и остаток вычитается из 1.0. Если u,v получились [1.3, 2.6], в этом режиме семплирование текстуры будет происходит по координатам [0.7, 0.4].

Функции установки фильтрации текстур:

  • : f_none () - точечная фильтрация (то есть по сути, нет фильтрации)
  • : f_linear () - линейная фильтрация
  • : f_bilinear () - билинейная фильтрация
  • : f_trilinear () - трилинейная фильтрация. На редкость бесполезная функция, потому что семплер по умолчанию создается с трилинейной фильтрацией
  • : f_anisotropic () - анизотропная фильтрация.

Помимо этих функций также присутствуют функции для "тонкой" настройки фильтрации: Настройка magnification filter

  • : fmag_none () - без фильтрации
  • : fmag_point () - точечная фильтрация
  • : fmag_linear () - линейная фильтрация

Настройка minification filter

  • : fmin_none () - без фильтрации
  • : fmin_point () - точечная фильтрация
  • : fmin_linear () - линейная фильтрация
  • : fmin_aniso () - анизотропная фильтрация.

Настройка mip filter

  • : fmip_none () - без фильтрации
  • : fmip_point () - точечная фильтрация
  • : fmip_linear () - линейная фильтрация
  • : project() - функция выставляет флаг D3DTTFF_PROJECTED для преобразования текстурных координат перед растеризатором. При выставленном флаге все компоненты текстурных координат делятся на w-компоненту. Актуально только для ffp (R1, ps_1_x).


Также в папке с шейдерами лежат еще файлы .s (именно такого имени - точка и эс), которые являются для всех *.s-файлов своеобразными заголовочными файлами, функции из файла .s доступны из файлов *.s . На данный момент там имеются функции printf, и закомментированные во втором рендере ф-ции l_point и l_spot, которые отвечают за создание точечного и неточечного источников света соответственно.


Статья создана участником cjayho, отредактировал ошибки Sергей][akaMoonlight

Shаders Max v1.06

Shаders Max v1.06 настроенные с правкой опечатки шейдеров стекла + Настроенный user.ltx.


Правила написания и публикации комментариев. За несоблюдение правил — бан!
Тень Чернобыля - Моды [1447]
Чистое Небо - Моды [370]
Зов Припяти - Моды [823]
Модели для Сталкер [294]
Карты Сталкер [116]
Сохранение [6]
Патчи [19]
Билды [26]
Другое [64]
Модостроение [41]
AMK mod [78]
Sigerous Mod [98]
Lost Alpha [68]
Call of Chernobyl [437]
Народная солянка [94]
MISERY [7]
New Level Changer (NLC) [86]
Lost World [22]
OGSE [26]
DMX MOD [41]
Торрент, RePack [47]
Dead Air [35]
Мини-правки для модов [92]
Объединенный Пак 2 [17]
Звуки для Сталкер [9]
Золотой Шар [24]
Anomaly [122]
Аддоны к модам [2]
Ссылка не действительна. Перезалейте. И здесь, и в ссылках выше, что написаны в тексте.

Devious Desires срабатывает слишком часто, невозможно работать стриптиз клубу или мастурбируют или насилуют. Можно ли это как то настроить?

Недостатки DD нет стрип клуба, мудлетов, не растут какие-либо навыки, nisa с DD не взаимодействует. Не срабатывает изнасилования непонятно как начать какую либо анимацию , не видно результата кого либо, пока что DD больше похож на плеер анимаций чем WW, или я что-то не знаю? Сделай нормальную документацию ColonyNudity

Хорошо бы если можно было добавлять дополнительные участки таким образом, по-моему в начале пути в 2014 когда не было доп городов был такой мод, который можно было использовать для добавления участков карьеры от ziro . Не кто не знает , что это за мод, можно ли добавить доп. участки модами, пусть хоть на пустой локации

Ничего неловкого и страшного в этом нет! Просто я честно сказать так и рассчитывал, когда разберемся, либо Вы сами разберетесь, что дадите ответ о результатах действий, ведь эта информация может помочь другим игрокам. А Вы просто написали "решила проблему"

Просто очень часто бывает, что пишут "все включено, мод установлен правильно", а когда начинаешь перебирать возможные проблемы получается, что мод был установлен не туда или выключено что-то, потому я и начал с элементарного. Я просто сам этим модом не пользуюсь, но уже был готов его установить, но я рад, что у Вас все получилось и спасибо что Вы все же написали в чем была причина неразберихи с модом.

Читайте также: