Scav, увы. Я решаю проблему с уже готовой нормальной текстурой, путём махинаций с каналами и уровнями. Чую, что решения этой заморочки нет. В иделале оранжевая текстра, должна иметь негатиные оттеники светлого и тёмного, тоесть их надо поменять местами, но сама текстура должна остаться желтой. Тогда будет легко перегнать в Сталк.
iOrange
18.03.2020, 07:00
Цитата(Ленин @ 17.03.2020, 19:36)
Если делать в Сталкер правильно, то получается вот так:
Выглядит неправильно, X и Y поменяны местами.
xrModder
18.03.2020, 18:15
Цитата(Ленин @ 17.03.2020, 23:05)
Кто знает алгоритм преобразования вот такой оранжевой нормали?
Я уже мозг сломал. Всяко разно - это безобразно.
А теперь вопрос: как превратить normal map из Survarium в стандартный normal map?
Diesel
18.03.2020, 19:17
xrModder, скинь текстуру на облако, я гляну, если получится, то напишу алгоритм.
xrModder
21.03.2020, 00:22
Цитата(Ленин @ 18.03.2020, 22:13)
xrModder, скинь текстуру на облако, я гляну, если получится, то напишу алгоритм.
xrModder, элементарно. Преобразуешь в TGA. Закидываешь в Фотошоп. Зеленый канал тянешь в красный. Альфу в зелёный. Канал синего превращаешь в белый цвет. Удаляешь альфу. Сохраняешь текстуру 24 бита TGA. Эту TGA несешь в папку импорт СДК. В СДК Эдиторах есть чек нев текстурес, превращаешь в нормал мап.
xrModder, еще я умею делать конверт бампов, могу написать алгоритм - цена договорная.
xrModder
21.03.2020, 18:54
Цитата(Ленин @ 21.03.2020, 03:55)
xrModder, элементарно. Преобразуешь в TGA. Закидываешь в Фотошоп. Зеленый канал тянешь в красный. Альфу в зелёный. Канал синего превращаешь в белый цвет. Удаляешь альфу. Сохраняешь текстуру 24 бита TGA.
Разве? Простая заливка синего канала белым цветом не пойдёт.
Diesel
22.03.2020, 00:08
xrModder, если не пойдёт, тогда поменяй красный и зелёный местами.
В нормальной текстуре всего два вектора.
xrModder
22.03.2020, 00:47
Цитата(Ленин @ 22.03.2020, 03:04)
xrModder, если не пойдёт, тогда поменяй красный и зелёный местами.
В нормальной текстуре всего два вектора.
Похоже ты забыл что находится синем канале normal map.
Для справки: R - нормаль оси X (горизонтальный) G - нормаль оси Y (вертикальный) B - нормаль оси Z (от поверхности)
Diesel
22.03.2020, 01:11
xrModder, Z ось никто не делает. Если ось Z не проектируется в самом начале запекания объёма, то ты её конём не вернёшь. А если ты будешь пытаться насильно встраивать Z, то учти что нужно менять и остальные, иначе у тебя от оригинального объёма ничего не останется.
Для справки середина - это 127, 127, 127.
Diesel
22.03.2020, 02:06
xrModder, сейчас посмотрел внимательно у Варгейминга, что такое Z ось. Это впадины которые не видит рендер, внутренняя тень ( что то похожее на AO).
xrModder
22.03.2020, 02:11
Цитата(Ленин @ 22.03.2020, 05:02)
xrModder, сейчас посмотрел внимательно у Варгейминга, что такое Z ось. Это впадины которые не видит рендер, внутренняя тень ( что то похожее на AO).
Без Z оси невозможно получить нормальные текстуры для сталкача.
Diesel
22.03.2020, 02:17
xrModder, значит в Сурве есть отдельно еще одна текстура для АО, она и нужна для Z оси синего канала.
xrModder
22.03.2020, 02:22
Цитата(Ленин @ 22.03.2020, 05:13)
xrModder, значит в Сурве есть отдельно еще одна текстура для АО, она и нужна для Z оси синего канала.
Нет такого, там только diffuse, свой normal map и specular map.
Diesel
22.03.2020, 02:28
xrModder, скинь все текстуры для этого крипича, возможно они затолкали z в спекуляр.
xrModder
22.03.2020, 02:44
Цитата(Ленин @ 22.03.2020, 05:24)
xrModder, скинь все текстуры для этого крипича, возможно они затолкали z в спекуляр.
SkyLoader, весело? Если приспичит по нужде - будете искать туалет?
Вы еще однако из дифузки бампы не делали.
Кака получается из спекуляра, короче я пас.
Ось Z не привязана к теореме Пифагора в данном случае, так как там 255 - не вершина значения, там считается в инверсию. 255 - это по сути гладкая поверхность, а темные участки это впадины. И в Z не указываются вершины.
Как написал ed_rez, что z - это карта высот... а я вижу там AO ( области не читаемые рендерингом.).
xrModder
23.03.2020, 00:05
Ни один из этих способов, вроде извлечение z-нормали по формуле Пифагора или ao в качестве синего канала не работает.
cjayho
23.03.2020, 01:10
QUOTE (Молния в вакууме @ 22.03.2020, 13:14)
Для того чтобы восстановить Z ось стоит вспомнить теорему пифагора и щепотку алгебры. Так как известно что
CODE
X*X + Y*Y + Z*Z = 1
Получить Z можно как
CODE
Z = sqrt(1 - X*X - Y*Y)
Осталось только где-то взять софт который умеет так делать.
Ваши построения верны только для единичного вектора, а я уверен что вектор например (0,0,0) не является единичным.
Проверить легко: берем изначальный вектор 0,0,0
z = sqrt( 1 - 0*0 - 0*0 ) = 1. Ответ не сходится.
берем 0.2, 0.2, 0.2
z = sqrt( 1 - 0.04 - 0.04 ) = sqrt( 0.92 ) = 0.9591... ответ опять же не верен
length = 1.f; // cjayho: comment this line for RIGHT solution
col.z = (length - (col.x*col.x) - (col.y*col.y));
// Output to screen fragColor = vec4(col.xyz,1.0); }
Если указать единичку, то с картинкой в синем цвете чтото явно не так. А при вычислении длины вектора картинка получается более или менее приближенной к реальности.
Теперь вопрос к размышлению: для получения трех компонент, нужно получить три другие компоненты. Либо красный/зеленый/синий, либо красный/зеленый/длина_вектора. Смысл ли вообще всех вышеуказанных вычислений. Из двух компонент три мы не получим.
Молния в вакууме
23.03.2020, 02:55
Заострю внимание на том, что мы работаем с картой нормалей, а карта нормалей не спроста называется картой нормалей, она содержит закодированные векторы нормали, у которых длинна должна равна единице. Ясен хрен что видео с самкой хумана содержит ненермальные пиксели и восстановить синий цвет такой формулой не получится, это же не нормалмап.
Если уж хочется докопаться до чего либо то стоило упомянуть что при таком вычислении теряется знак. Впрочем карт нормалей которые вовырочивают нормали в обратную сторону я ещё не встречал, так что думаю это не так важно.
xrModder
23.03.2020, 02:56
Синий канал приближенно можно вычислить по формуле sqrt(1-((2*r-1)^2+(2*g-1)^2)), но в некоторых местах есть косяки
iOrange
23.03.2020, 03:26
Зарекался писать что-то в этом топике, хоть судя по названию он мне и профильный, но как-то сильно тут агрессивные все.
В прошлый раз я пытался донести до всех тут как устроен формат BC, но получил только странные нападки в стиле "разработчикам Сталкера виднее, чем тебе!"
Но рискну еще раз: Итак, открыв эту текстуру в Фотошопе видим что только 2 канала заняты - G и A. Это старый известный способ вытянуть максимум качества из BC3 компрессии, для нормалмап. Осмелюсь предположить что игра все еще поддерживает DirectX 9 рендер, и потому BC5 им не доступен. Когда мы пакуем нормалмапу в BC3 мы оставляем только 2 компоненты вектора - X и Y, т.к. знаем что Z всегда положителен. Напомню что опорные цвета RGB блока в BC3 квантуются до r5g6b5 - т.е. у зеленого канала больше всех точность. А еще альфа-канал лежит отдельным блоком с хорошей точность.
Значит запихиваем X и Y в G и A каналы соответственно. Конкретно разработчики этой игры решили положить Y в G и X в A.
Z же легко восстановить из условия нормированности вектора (бедный дядя Пифагор тут не причем).
Цитата(cjayho @ 23.03.2020, 00:06)
Из двух компонент три мы не получим.
Легко, нормаль - нормированный вектор, длина которого всегда равна 1. Соотв восстановить третий компонент - элементарно.
Цитата(Молния в вакууме @ 22.03.2020, 13:14)
Осталось только где-то взять софт который умеет так делать.
Покажу на примере Paint.NET: 1) Идем на сайт https://www.boltbait.com/pdn/CodeLab и качаем инсталляху, устанавливаем (посление версии работают даже с Paint.NET с Windows Store) 2) Открываем текстуру в Paint.NET 3) Идем в "Effects -> Advanced -> CodeLab..." 4) File -> Open - открываем файлик который я приложил 5) Жмем ОК, наслаждаемся результатом 6) Для любой следующей текстуры достаточно просто нажать "Ctrl + F" чтоб повторить последний примененный эффект
Зарекался писать что-то в этом топике, хоть судя по названию он мне и профильный, но как-то сильно тут агрессивные все.
В прошлый раз я пытался донести до всех тут как устроен формат BC, но получил только странные нападки в стиле "разработчикам Сталкера виднее, чем тебе!"
Но рискну еще раз: Итак, открыв эту текстуру в Фотошопе видим что только 2 канала заняты - G и A. Это старый известный способ вытянуть максимум качества из BC3 компрессии, для нормалмап. Осмелюсь предположить что игра все еще поддерживает DirectX 9 рендер, и потому BC5 им не доступен. Когда мы пакуем нормалмапу в BC3 мы оставляем только 2 компоненты вектора - X и Y, т.к. знаем что Z всегда положителен. Напомню что опорные цвета RGB блока в BC3 квантуются до r5g6b5 - т.е. у зеленого канала больше всех точность. А еще альфа-канал лежит отдельным блоком с хорошей точность.
Значит запихиваем X и Y в G и A каналы соответственно. Конкретно разработчики этой игры решили положить Y в G и X в A.
Z же легко восстановить из условия нормированности вектора (бедный дядя Пифагор тут не причем).
Цитата(cjayho @ 23.03.2020, 00:06)
Из двух компонент три мы не получим.
Легко, нормаль - нормированный вектор, длина которого всегда равна 1. Соотв восстановить третий компонент - элементарно.
Цитата(Молния в вакууме @ 22.03.2020, 13:14)
Осталось только где-то взять софт который умеет так делать.
Покажу на примере Paint.NET: 1) Идем на сайт https://www.boltbait.com/pdn/CodeLab и качаем инсталляху, устанавливаем (посление версии работают даже с Paint.NET с Windows Store) 2) Открываем текстуру в Paint.NET 3) Идем в "Effects -> Advanced -> CodeLab..." 4) File -> Open - открываем файлик который я приложил 5) Жмем ОК, наслаждаемся результатом 6) Для любой следующей текстуры достаточно просто нажать "Ctrl + F" чтоб повторить последний примененный эффект
Конвертировал несколько стандартных normal map в XY normal map (как в Survarium'е), потом восстановил синий канал и сравнил с оригиналом - разницы практический нет.
Большое спасибо за скрипт!
cjayho
23.03.2020, 08:35
QUOTE (iOrange @ 23.03.2020, 02:22)
QUOTE (cjayho @ 23.03.2020, 00:06)
Из двух компонент три мы не получим.
Легко, нормаль - нормированный вектор, длина которого всегда равна 1. Соотв восстановить третий компонент - элементарно.
Эм. Я по невнимательности своей не обратил внимания что речь идет о карте нормалей. Извиняюсь.
QUOTE (Молния в вакууме @ 23.03.2020, 01:51)
Ясен хрен что видео с самкой хумана содержит ненермальные пиксели и восстановить синий цвет такой формулой не получится, это же не нормалмап.
Если уж хочется докопаться до чего либо то стоило упомянуть что при таком вычислении теряется знак. Впрочем карт нормалей которые вовырочивают нормали в обратную сторону я ещё не встречал, так что думаю это не так важно.
Ну в rgb-пространстве знак тоже не особо используется. Насчет видео с самкой хумана - как пожелаете, погу использовать видео с самкой не хумана. Ну или самцом
Как говорил, тов.Шариков: - а мы их душили-душили. Сутки мозг ломал над нормалями Сурвариума, а в итого для x-ray 06 dx10 их надо вообще вот так делать:
Получаем вот так:
Я что то давно обратил внимание на инверсию нормалей, но сейчас убедился в этом на своём опыте.
iOrange, спасибо за скрипт. Очень пригодился.
Diesel
25.03.2020, 01:23
Что хотел Сурвариум показать таким бампом? Во-первых это 4096 - слишком жирно, аж в глазах ребит, а во-вторых это хрень полная, а не бамп.
iOrange
25.03.2020, 01:28
Цитата(Ленин @ 25.03.2020, 00:19)
это хрень полная, а не бамп.
Потому что это нормалмапа, а не бамп
У вас просто материал плохо настроен, сама нормалмапа очень хорошего качества.
RayTwitty
25.03.2020, 03:17
Цитата(Ленин @ 25.03.2020, 01:19)
аж в глазах ребит
Фильтрация текстур какая стоит?
Diesel
26.03.2020, 02:13
RayTwitty, кайзер был. Сейчас скомбинировал свою нормаль с оригинальной, да мип-мапы ухудшил. Рябить перестало.
Черные впадины еще раздражают немного. Это что надо править? Это же спекуляр бампа хреновый?
cjayho
27.03.2020, 10:43
QUOTE (Ленин @ 26.03.2020, 01:09)
да мип-мапы ухудшил
это как?
Zagolski
28.03.2020, 17:46
Цитата(iOrange @ 25.03.2020, 01:24)
Потому что это нормалмапа, а не бамп
В сталкерских кругах это принято называть бампом, как я заметил. Думаю, из-за названия текстур, у них приписка _bump. Вот и зовут все бампом. А так да, технически неверно нормалмапу бампом называть.
Цитата(Ленин @ 26.03.2020, 02:09)
Черные впадины еще раздражают немного. Это что надо править? Это же спекуляр бампа хреновый?
Там везде параллакс работает, похоже это он впадины создает. Плюс у бампов крутизна в шейдерах усилена z*=0.5, поэтому те черные участки - это куда свет как бы не попадает и они не освещены. В 2д-редакторе попробуй чуть выпрями текстуру нормалмапы или в sload.h убери z*=0.5 (тут тогда все остальное нарушится).
macron
28.03.2020, 21:09
Раз речь зашла о бампах, поделюсь своими наблюдениями, чтобы повысить блеск через редактирование самого бампа.
Делаем сильнее бампоблеск:
Открываем *_bump.dds через paint.net или другой редактор (*_bump#.dds не трогаем).
Оттенок перемещаем в сторону желтого примерно от -10 до -38. Насыщенность уменьшаем примерно на 25 или 30.
Чем больше оттенок переходит в желтый цвет, тем контрастнее картинка (блеск сильнее, но темные участки чернее). Чем меньше насыщенность, тем больше блеск.
Сохраняем как dxt5 с мип-мапами.
Diesel
28.03.2020, 22:36
Цитата(Zagolski @ 28.03.2020, 19:42)
Цитата(iOrange @ 25.03.2020, 01:24)
Потому что это нормалмапа, а не бамп
В сталкерских кругах это принято называть бампом, как я заметил. Думаю, из-за названия текстур, у них приписка _bump. Вот и зовут все бампом. А так да, технически неверно нормалмапу бампом называть.
Шарю! Вы же не знаете, что я думал в момент написания? Бампы и нормал мапы, я еще в первом классе, десять лет назад учил. Всё ништяк. Просто иной раз я курю больше, чем требуется.
RayTwitty
04.04.2020, 02:09
Цитата(SkyLoader @ 06.07.2016, 10:10)
Заметил один глюк с глоу перед скайбоксом, что он плохо отрисовывался. До этого в основном проверял глоу в индоре. В общем, подправил. Еще заодно исправил отрисовку градиента поверх худа оружия:
Сцылко: http://rgho.st/8RP4hWY89 Проверить досконально не успел, на работу убегал. Так что если кто будет проверять, отпишитесь.
Пытаюсь применить правку глоу на р1, всё подходит, только вылетает по причине отсутствия семплера s_position.
Код
error is (22): error X3004: undeclared identifier 's_position'
Может его можно на р1 заменить чем-нибудь? Насколько я понимаю, добавление s_position влечет за собой множественные правки рендертаргета.
Заметил один глюк с глоу перед скайбоксом, что он плохо отрисовывался. До этого в основном проверял глоу в индоре. В общем, подправил. Еще заодно исправил отрисовку градиента поверх худа оружия:
Сцылко: http://rgho.st/8RP4hWY89 Проверить досконально не успел, на работу убегал. Так что если кто будет проверять, отпишитесь.
Пытаюсь применить правку глоу на р1, всё подходит, только вылетает по причине отсутствия семплера s_position.
Код
error is (22): error X3004: undeclared identifier 's_position'
Может его можно на р1 заменить чем-нибудь? Насколько я понимаю, добавление s_position влечет за собой множественные правки рендертаргета.
Hey. You do not have access to s_position on R1, i think it cannot be just "replaced with something" :/ Try to play with .s shaders maybe
RayTwitty
05.04.2020, 01:05
Цитата(xrModder @ 27.05.2019, 16:21)
Цитата(Zagolski @ 27.05.2019, 13:06)
А что оно делает и что правит? Судя по коду, ранее в векторе отражения использовалось приведение Y к -1...+1, а теперь стала выбираться наибольшая из сторон. Скрин бы не помешал, посмотреть отличия отражения неба. Интересно глянуть.
Вот скриншоты:
До
Виден угол текстуры SkyBox и линия у горизонта
После
С исправлением ничего подобного нет
Исправление уже имеется в шейдере игры, но закомментирован (видимо из-за более высокой требовательности к вычислительным ресурсам).
Подтверждаю, отражения с ЗП-фиксом стали корректнее. Изменения в производительности не заметил, хотя в шейдере написано, что медленнее. Линию у горизонта особо разглядеть не смог, скорее всего по причине низкой дальности прорисовки либо что более вероятно - из-за эффекта Френеля (вроде он) - к горизонту у меня вода темнеет, на дефолтной воде из ТЧ такого эффекта нет. Кстати правку не мешает внедрить и в р1-воду (если используется нормальный шейдер воды от macron). Код аналогичный, всё работает.
З.Ы. мне кажется, или отражение скайбокса в воде не вращается вместе с небом? (изменение sky_rotation в погоде)
Fizzed, изменение настроек s шейдера вряд ли поможет запустить шейдер в таком виде, в каком он есть. Можно поиграться с очередью отрисовки, но тогда бы SkyLoader изначально не парился с z-буфером
Zagolski
09.04.2020, 10:15
Правка эта по отражению скайбокса четкая, я с нее теперь не слезаю. А то что там пометка по снижению скорости, так это в те древние времена дх9 и старых видях. Сегодня вряд ли там что снижается из-за одного if.
Кто-нибудь пробовал увеличивать дальность (far_plane и fog_distance в погоде) раза в три и с тестом к примеру на болотах? Как оно, фпс сильно падает? Я где-то читал коммент, что игра вообще крашится.
abramcumner
09.04.2020, 15:33
Цитата(Zagolski @ 09.04.2020, 10:11)
Я где-то читал коммент, что игра вообще крашится.
Крашилось из-за маленького буфера(точнее из-за алгоритма, который хотел все за один раз отрисовать) при отрисовке партиклов вроде.
xrModder
09.04.2020, 18:10
Цитата(RayTwitty @ 05.04.2020, 04:01)
З.Ы. мне кажется, или отражение скайбокса в воде не вращается вместе с небом? (изменение sky_rotation в погоде)
Да, есть такое.
Zagolski
19.04.2020, 06:31
Намедни тщательно прощупал лоды и обнаружил, что они весьма хороши в плане качества. В смысле - их низкие мипы четкие. Однако в игре дальние объекты (лоды) выглядят совсем плохо, некие размытые образования ужасного качества. Конечно, это из-за того, что текстура накладывается с высоких мипов, поскольку объекты маленькие и далеко. Возможно еще и в шейдере клипится не совсем корректно (там сдвиг больше, чем при рендере основной геометрии). Думаю, качество лодов можно сделать куда лучше. Как минимум попробовать брать с более низких мипов. Как вариант, использовать SampleLevel(smp_base, tc, от 0 до 2) в lod.ps.
Zagolski
21.04.2020, 08:42
Болото от края до края чисто полюбоваться. Тут без лодов и дальность на 2 км выставлена. И вроде тени отключены. Как по мне, как-то не ахти. Не знаю, чего все тащатся от огромных видов. Тумана нет почти, из-за этого все как-то ненатурально и куцо выглядит. С туманной дымкой на ванильных 375 м имхо получше смотрится.
Кстати, по бесшовным локам. В движке же есть вполне рабочие сектора. Клеим огромную локу из всех локаций, разбиваем по секторам (сектор на каждую) и вуаля. Не знаю как на практике, но в теории должно работать.
P.S. Кол-во дипов вверху 30к - на это не обращайте внимание, это с отключенным кулингом по фрустуму и с учетом z-prepass, реально на локации вдвое меньше, т.е. около 15к статических объектов (уже разбитых по материалам).
RayTwitty
21.04.2020, 14:17
Цитата(Zagolski @ 21.04.2020, 08:38)
Как по мне, как-то не ахти. Не знаю, чего все тащатся от огромных видов. Тумана нет почти, из-за этого все как-то ненатурально и куцо выглядит. С туманной дымкой на ванильных 375 м имхо получше смотрится.
Большая дальность оправдана на локациях вроде ЧАЭС, где надо показать помпезность чего-то. В остальных случаях тоже думаю, что незачем. Только фпс посадим, а еще покажем границы локации, которые скрывает туман.
Кстати скрин весьма мыльный.
Diesel
21.04.2020, 14:51
RayTwitty, на правильных локациях xray выше dx9, дальность прорисовки мало садит фпс.
Там массу наворотов по оптимизации замутили пысы.
Сильнее всего трава (которую не курить) садит фпс, остальное пустяк. ...и отражения в воде прям в кол садят фпс...
Еще недавно обратил внимание, что подьём по фейковой лестнице садит фпс.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.