Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Графика, рендер, шейдеры
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91
Zagolski
Только для теней, всех что есть в игре. И всего одна эта текстура создает все тени (тут нужно отдать должное отложенному рендеру). Только они туда не все сразу записываются, а по очереди, под сотню раз разных теней за кадр (в зависимости от кол-ва источников света и их типа + тени от солнца).
sergy172
На сколько сложно реализовать на р1 под динамическими объектами (шкаф, стул...) декали, имитирующие тени, как в старых играх, типа Макса Пэйна или автосимуляторов?
Нюанс таких декалей в том, что чем дальше объект от поверхности, тем они прозрачнее, и например на расстоянии в пол метра, полностью исчезают.
Были и такий которые повторяли и изменяли форму объекта, как тень от "солнца" в зените.
cjayho
QUOTE (sergy172 @ 21.05.2019, 13:38) *
На сколько сложно реализовать на р1 под динамическими объектами (шкаф, стул...) декали, имитирующие тени, как в старых играх, типа Макса Пэйна или автосимуляторов?
Нюанс таких декалей в том, что чем дальше объект от поверхности, тем они прозрачнее, и например на расстоянии в пол метра, полностью исчезают.
Были и такий которые повторяли и изменяли форму объекта, как тень от "солнца" в зените.


Хватит насиловать труп, закопай обратно. Проще уж р2а пилить если хочется запеченных теней и освещения.
RayTwitty
Цитата(sergy172 @ 21.05.2019, 14:38) *
На сколько сложно реализовать на р1 под динамическими объектами (шкаф, стул...) декали, имитирующие тени, как в старых играх, типа Макса Пэйна или автосимуляторов?
Нюанс таких декалей в том, что чем дальше объект от поверхности, тем они прозрачнее, и например на расстоянии в пол метра, полностью исчезают.
Были и такий которые повторяли и изменяли форму объекта, как тень от "солнца" в зените.

Лолшто? Можно скрины с примерами?
iOrange
Цитата(RayTwitty @ 21.05.2019, 22:23) *
Лолшто? Можно скрины с примерами?

Скорее всего имелись ввиду shadow blob
sergy172
Цитата(iOrange @ 21.05.2019, 23:47) *
Скорее всего имелись ввиду shadow blob

В настройках игр на разных движках, это называлось именно "decals" и на русский переводилось, как "тени".
Хорошая замена невозможной (невозможной ли?) на р1 SSAO, HBAO и так далее.
Декали даже были в ранних билдах, правда только под неписями и ГГ.

Цитата(RayTwitty @ 21.05.2019, 23:23) *
Лолшто?
Это я должен спрашивать.
Твой вопрос из разряда "есть ли жизнь за мкадом".
Не знать одну из самых распространённых фишек игростроя, даже со стороны простого игрока, это надо суметь!

Это вопрос из разряда "сержи на форуме опять спросил какую-то херь, попробуй расшифруй" biggrin.gif
RT
Zagolski
Цитата(sergy172 @ 22.05.2019, 00:50) *
Хорошая замена невозможной (невозможной ли?) на р1 SSAO, HBAO

Возможно. Токма без накладывания его на траву и листву, а иначе дикий филрейт будет из-за связки альфа-тест + форвард p1.
ForserX
http://xray-oxygen.org/index.php/Константы

Оффтоп или нет, решайте сами.

Начал немного документацию шейдеров. Начал с констант. Если есть у кого желание подсобить, то редактирование/добавление страниц доступно после регистрации.
OlegatoR
cjayho, топикбан за флуд
Zagolski
Тут занимался отложенным рендером и кое-что оптимизировал. Может кому пригодится. Сам g-buffer. В сталке он слишком жирный, особенно в ТЧ. Для диффуза 8 бит на канал, а для нормали и для позиции по 16 бит. Это жесть.
Начнем с того, что нормаль можно тоже в 8 битах хранить (16 для нее не нужно), этим мы выиграем 10% фпс. Только нужно при упаковке в g-buffer нормаль перевести в 0...1 (она там сразу в -1...1 кодируется), а при распаковке обратно в -1...1.
Теперь насчет позиции. Достаточно иметь только глубину, которую вообще можно получить из буфера глубины (на дх10/11 запросто, но и на дх9 тоже возможно), а позицию xy во view space восстановить из z. Кстати, в ЗП так и происходит, если g_buff_opt включить. Правда, там все равно z в g-buffer пишется в 16 бит, а можно и не писать. И еще при этом можно убрать из вершинных шейдеров умножение на матрицу для позиции, т.е. вырезать (+1% фпс). И как еще один бонус, у нас будет более точная 32 бит глубина, а не 16 бит.
Наконец, нормаль тоже можно упаковать в xy. Если правильно это делать, косяков с освещением не будет (в ЗП с g_buff_opt она кодируется).
В общем, я у себя до +50% выигрыша перфоманса получил (тут еще от железа зависит), загнав все в две DXGI_FORMAT_R8G8B8A8_UNORM поверхности, т.е. всего 64 бит (было 160 бит). cool.gif
Zagolski
Добавлю. Если будем жать нормаль, лучше использовать формат DXGI_FORMAT_R10G10B10A2_UNORM, иначе возможны слабые артефакты на бампе. С 10 бит артефактов нет - проверено и поставлен знак качества. И снижения фпс нет.
В этом случае пишем материал в альфу: для 4 материалов в игре как раз 2 бита. А хеми в B канал (можно туда что-нибудь еще закодить).
SkyLoader
Цитата(Zagolski @ 25.05.2019, 15:14) *
В этом случае пишем материал в альфу: для 4 материалов в игре как раз 2 бита. А хеми в B канал (можно туда что-нибудь еще закодить).

Данные сталкерских материалов разве не интерполированы? Для материалов этого мало будет, получится лишь хранить его id, но не weight, который отвечает за переход от одного материала к другому. Ну а так, в целом, правильно в таком формате хранить нормаль. Просто для этого надо грамотно распределить остальные данные GBuffer'а.
Zagolski
В АЕ имеется выбор из четырех материалов. В шейдер из них передаются значения: 0.0625, 0.3125, 0.5625, 0.8125. В 2-бит текстуре значения будут чуть отличаться, но их можно подкорректировать к этим значениям. А вес - это да, я не учел. Но его можно кодить в хеми (раз все равно стало 10 бит), а в шейдер его вывести отдельно в L_material (там все равно xyz не используются).
xrModder
Небольшое исправление отражение неба в воде (R2)
В gamedata\shaders\r2\water.ps перед строкой:
Код
      vreflect.y     = vreflect.y * 2 - 1;
Написать:
Код
half3 vreflectabs    = abs(vreflect);
half  vreflectmax    = max(vreflectabs.x, max(vreflectabs.y, vreflectabs.z));
      vreflect      /= vreflectmax;
if (vreflect.y < 0.999)
Zagolski
А что оно делает и что правит? Судя по коду, ранее в векторе отражения использовалось приведение Y к -1...+1, а теперь стала выбираться наибольшая из сторон. Скрин бы не помешал, посмотреть отличия отражения неба. Интересно глянуть.
xrModder
Цитата(Zagolski @ 27.05.2019, 13:06) *
А что оно делает и что правит? Судя по коду, ранее в векторе отражения использовалось приведение Y к -1...+1, а теперь стала выбираться наибольшая из сторон. Скрин бы не помешал, посмотреть отличия отражения неба. Интересно глянуть.

Вечером выложу.
xrModder
Цитата(Zagolski @ 27.05.2019, 13:06) *
А что оно делает и что правит? Судя по коду, ранее в векторе отражения использовалось приведение Y к -1...+1, а теперь стала выбираться наибольшая из сторон. Скрин бы не помешал, посмотреть отличия отражения неба. Интересно глянуть.

Вот скриншоты:
До
Виден угол текстуры SkyBox и линия у горизонта
После
С исправлением ничего подобного нет


Исправление уже имеется в шейдере игры, но закомментирован (видимо из-за более высокой требовательности к вычислительным ресурсам).
Zagolski
На небе у тебя какая-то рожа злая. biggrin.gif Хорошая правка, исправляющее кривое отражение неба. Надо забирать! Да и ресурсов там всего-то с гулькин нос...
Еще бы убрать отражение скайбокса в воде под крышей.
xrModder
Цитата(Zagolski @ 27.05.2019, 22:31) *
Еще бы убрать отражение скайбокса в воде под крышей.

?
atanda
Цитата(xrModder @ 27.05.2019, 20:49) *
Цитата(Zagolski @ 27.05.2019, 22:31) *
Еще бы убрать отражение скайбокса в воде под крышей.

?

Ну, ты стоишь под крышей, а в воде у тебя отражается небо
Zagolski
На болотах внутри церкви вода, в ней отражается небо, а над водой имеется крыша. Откуда в воде небо?

Цитата(Дизель @ 27.05.2019, 21:23) *
Zagolski, а при чем тутxrModder.
Беги к KD за помощью.

Это просто мысли вслух.
Diesel
Zagolski, а при чем тутxrModder.
Беги к KD за помощью.
xrModder
Цитата(Zagolski @ 28.05.2019, 00:20) *
На болотах внутри церкви вода, в ней отражается небо, а над водой имеется крыша. Откуда в воде небо?

Тут простая правка шейдера не поможет biggrin.gif
Modera
Цитата(xrModder @ 27.05.2019, 22:09) *
Тут простая правка шейдера не поможет biggrin.gif

Как-раз таки это и нужно. Создать отдельный шейдер для воды в помещениях и вместо скайкуба использовать что-то другое, например снять кубомапу с той самой церкви.
macron
Цитата(Modera @ 27.05.2019, 22:45) *
Создать отдельный шейдер для воды в помещениях и вместо скайкуба использовать что-то другое, например снять кубомапу с той самой церкви.

Если вода всего уровня представлена единым объектом, то не выйдет. Надо будет кусок в церкви вырезать в каком-нибудь 3D-редакторе как отдельный объект (для назначения отдельного шейдера). Либо считерив наложить поверх воды в церкви отдельную плоскость (с отдельным шейдером) чуть выше уровня общей воды, а для надежности между ними проложить еще черную плоскость. А потом перекомпиляция...
RSFSR
а еще можно сделать фековую геометрию, как на болотах 1935 rolleyes.gif
ForserX
Тут сейчас бленды на XML переписывал, как раз с водными шейдаками запаривался. Почему бы просто не убрать s_env0/1?
RayTwitty
Цитата(macron @ 27.05.2019, 23:33) *
Цитата(Modera @ 27.05.2019, 22:45) *
Создать отдельный шейдер для воды в помещениях и вместо скайкуба использовать что-то другое, например снять кубомапу с той самой церкви.

Если вода всего уровня представлена единым объектом, то не выйдет. Надо будет кусок в церкви вырезать в каком-нибудь 3D-редакторе как отдельный объект (для назначения отдельного шейдера). Либо считерив наложить поверх воды в церкви отдельную плоскость (с отдельным шейдером) чуть выше уровня общей воды, а для надежности между ними проложить еще черную плоскость. А потом перекомпиляция...

А еще замутить сразу же parallax corrected cubemap, чтобы смещения камеры отображать. Кароче способ какой-то геморный biggrin.gif

Если бы я был пыс, я бы просто убрал воду из церкви да и всё.
iOrange
Цитата(RayTwitty @ 27.05.2019, 22:43) *
А еще замутить сразу же parallax corrected cubemap

Вариант с env probes (с коррекцией) - самый вменяемый и не затратный, имхо.
Можно в один проход с SSLR + заодно будет для металов (cmft сворачивать в мипы и будет красиво).
atanda
Цитата(iOrange @ 28.05.2019, 00:39) *
Можно в один проход с SSLR + заодно будет для металов (cmft сворачивать в мипы и будет красиво).

Вы это на дх9 замутите, тогда будет круто)
xrModder
В некоторых шейдерах есть комментарии 1 (0) - full_env и 0 (1) - no_env - может это и есть настройки полного отражения игрового мира в воде?
Zagolski
Наверное, будет правильнее проверять, находится ли вода под небом или под потолком, а в шейдере воды сделать условие, считывать ли кубамапу неба или другую кубомапу типа потолка (или вообще не учитывать).
Тут на ум приходит несколько вариантов. Поможет карта высоты. Это как бы то же самое, что и буфер глубины, только снята сверху, как сделана в ЧН/ЗП карта дождя (можно и ее юзать). Но это потеря фпс, потому как карту придется рендерить каждый кадр (хотя можно и не каждый).
Либо попробовать считывать данные из маски террейна (там вода под небом отмечена другим цветом).
Еще как вариант попробовать читать данные из лайтмапов, хеми для помещений. Если затемнено, значит помещение и кубамапу не учитывать.
А можно в движке пускать луч в небо (например, с позиции камеры) и выявлять препятствие, а затем отправлять в шейдер константу, есть ли крыша или нет.
Нужно опробовать эти варианты и выбрать наиболее грамотный.
xrModder
Цитата(Zagolski @ 28.05.2019, 17:00) *
Наверное, будет правильнее проверять, находится ли вода под небом или под потолком, а в шейдере сделать условие, считывать ли кубамапу неба или создать другую кубомапу типа потолка (или вообще не учитывать).
Тут на ум приходит несколько вариантов. Поможет карта высоты. Это как бы то же самое, что и буфер глубины, только снята сверху, как сделана в ЧН/ЗП карта дождя (можно и ее юзать).
Либо попробовать считывать данные из маски террейна (там вода под небом отмечена другим цветом).
Еще как вариант попробовать читать данные из лайтмапов, хеми для помещений. Если затемнено, значит помещение и кубамапу не учитывать.
А можно в движке пускать луч в небо (например, с позиции камеры) и выявлять препятствие, а затем отправлять в шейдер константу, есть ли крыша или нет.
Нужно опробовать эти варианты и выбрать наиболее грамотный.

Интересно, почему разработчики не реализовали полное отражение игрового мира в R2, емнип Direct3D 9 вроде как поддерживает full reflection.
Diesel
xrModder, я прям не напрягаясь (в течении полу года ломал голову как это работает) в R2 шейдеры ОГСЕ внедрил, ну и в R3 тоже.

Или full reflection - это не то?

DX9 NeoAxis - отражения так же камерой сделаны.
iOrange
Цитата(buffy @ 28.05.2019, 09:38) *
Вы это на дх9 замутите

Зачем?
atanda
Цитата(iOrange @ 28.05.2019, 14:57) *
Цитата(buffy @ 28.05.2019, 09:38) *
Вы это на дх9 замутите

Зачем?

Потому что речь изначально шла о стк ТЧ, а в нём максимум дх9
Zagolski
Цитата(Zagolski @ 28.05.2019, 14:00) *
Поможет карта высоты.

Наверное, это будет более корректно. Например, если часть воды в помещении, а часть под небом - в этом случае в воде будет корректное отражение части неба и части не неба (псевдо-потолка). Со стороны будет казаться, что на границе действительно потолок отражается. Плюс можно будет дождь на GPU замутить из карты высоты. Да и вообще она может потребоваться для различных графических фишек (лужи какие-нибудь, намокание поверхности только вне потолка или другой преграды). Я у себя этот вариант попробую реализовать. По идее можно попробовать заполненную карту теней для этого дела использовать (хотя тут возможны косяки, если солнце на горизонте).
RayTwitty
А что если на первых кадрах рассчитать глобальное освещение для всей локации? Тогда по идее, можно будет избавиться вообще от статики и лайтмапов, заодно получить нормальные затенения в помещениях. Пересчитывать там вряд ли что-то нужно, ведь почти вся геометрия статична.
atanda
Цитата(RayTwitty @ 28.05.2019, 20:12) *
А что если на первых кадрах рассчитать глобальное освещение для всей локации? Тогда по идее, можно будет избавиться вообще от статики и лайтмапов, заодно получить нормальные затенения в помещениях. Пересчитывать там вряд ли что-то нужно, ведь почти вся геометрия статична.

А чем это в контексте будет отличаться от запекаемых лайтмапов или запекаемого GI?
RayTwitty
Цитата(buffy @ 28.05.2019, 20:51) *
А чем это в контексте будет отличаться от запекаемых лайтмапов или запекаемого GI?

Тем что не надо будет по 20 часов конпелировать локации и терять в производительности динамического GI.
ForserX
RayTwitty, мы думали использовать результаты adaptive ht для получение первого лайтмапа, который юзается в шейдерах. Только руки так и не дошли.
Diesel
Какой шейдер в ОГСЕ выводит отражения на асфальте (при намокании)?
Вода у меня отражается, а вот грунты чего то не хотят.

================================================================================

Цитата(RayTwitty @ 29.05.2019, 00:34) *
Цитата(buffy @ 28.05.2019, 20:51) *
А чем это в контексте будет отличаться от запекаемых лайтмапов или запекаемого GI?

Тем что не надо будет по 20 часов конпелировать локации и терять в производительности динамического GI.


Прям 20 часов - это много? 240 часов - это много.
Если поменять default настройки материала, на def_shaders\def_vertex - то лайтмапов не будет. А нафига на всей локации лайтмапы?
atanda
Судя по исходникам в файле level шейдеры хранятся так:
default/prop\prop_mus_kont_01a,lmap#3_1,lmap#3_2
'\' - разделитель
'prop_mus_kont_01a,lmap#3_1,lmap#3_2' - лист текстур
'default/prop' - должен быть шейдер, но его не в библиотеке(shaders.xr) нет и не в shaders/[r1|r2]/*.s
Вопрос такой - что это за ерунда и как так получилось?
SkyLoader
buffy, default - имя шейдера, prop\prop_mus_kont_01a,lmap#3_1,lmap#3_2 - три текстуры для этого шейдера.
Diesel
Цитата(buffy @ 29.05.2019, 04:51) *
'default/prop' - должен быть шейдер, но его не в библиотеке(shaders.xr) нет и не в shaders/[r1|r2]/*.s

возможно это шейдер default - который куда то в движок ныряет. У меня визуалки сейчас нет, посмотреть не могу.

Спасибо, что закрыл предыдущую страницу. Теперь я хрен дождусь ответа. biggrin.gif


Повтор:

Какой шейдер в ОГСЕ выводит отражения на асфальте (при намокании)?
atanda
Цитата(SkyLoader @ 29.05.2019, 03:04) *
buffy, default - имя шейдера, prop\prop_mus_kont_01a,lmap#3_1,lmap#3_2 - три текстуры для этого шейдера.

Круто, но как?


АА, стоп '\' =/= '/'

Ну вот кто так разделяет?

wallbash.gif

Скай, пока не ушёл, тут ещё вопрос возник:

lmap* это простая развертка всей статичной геометрии? Если так, то как её элементы сортируется? Т.е. в какой зависимости lmap*_1 приобретает индекс. До последнего времени думал, что по материалам в сцене, а не по площади


ЗЫ: сорян за сумбурный вопрос)
Diesel
buffy, в распаке моделей конвертером Бардака, видна последовательность геометрии - там строчность на лицо.
ed_rez
Буду объяснять свой вопрос примерами, ибо терминами запутаю и вас, и себя.
Существует схема- текстура и наложение на нее деталь-текстуры. Возможно ли такое, когда на текстуру, она же, к примеру, монотонна (белая), но с четкими деталями различных переходов, структуры ткани и т.д. и т.п. (черный), добавляется еще одна текстура, но с определенными расцветками, к примеру, камуфляж, в итоге при слитии двух текстур получается готовая текстура? Естественно, что камуфляж идет, как деталь-текстура, которая множится на основную модель, чтобы не нагружать память огромного размера текстурой.
Diesel
Цитата(ed_rez @ 29.05.2019, 13:01) *
в итоге при слитии двух текстур получается готовая текстура?

А что мешает делать? Это не запрещено, если у тебя один рендер. Вот на dx9 будет не так не работать.
ed_rez
Дизель,
хорошо, попробую это сделать. Не помню уже причин, но что-то мне подсказывает, что где-то заковырка. Иначе давно ввели эту схему.
Одна текстура деталей для многих моделей и с десяток различных расцветок, но маленьких бесшовных текстур для умножения их на основную. Есть основная 2К, значит 64*(256х256). И эти 64х будут считать в памяти, как 1х. Я не придумываю "ноу-хау", все это уже есть, когда "ходил под стол пешком".
Статика мне даром не нужна без параллакса и бампов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.