HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Paranoia 2:Savior (https://hlfx.ru/forum/forumdisplay.php?forumid=38)
-- Полный исходный код P2:Savior 1.51, включая компиляторы и модельвьювер (https://hlfx.ru/forum/showthread.php?threadid=5552)
Отправлено Дядя Миша 26-08-2021 в 12:48:
Для того же, для чего и в Халфе - сохранять информацию между уровнями.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 26-08-2021 в 13:46:
Цитата:
Дядя Миша писал:
Вещественное с плавающей точкой хранит не значение, а выражение, грубо говоря. Ну чтобы тебе было понятнее, 4 * 12 = 48 и 6 * 8 = 48.
Согласно стандарту, одно и то же число всегда будет записано одинаково.
"Некоторые числа могут иметь несколько представлений в формате, в котором они были только что описаны. Например, если b = 10 и р = 7, то число −12,345 может быть представлено как: −12345 × 10−3, −123450 × 10−4 или −1234500 × 10−5.
Для десятичных форматов любое представление справедливо, и совокупность этих представлений называется когортами. Когда результат может иметь несколько представлений, стандарт определяет, какой выбран членом когорты.
Для бинарных форматов представление делается уникальным путём выбора наименьшего представляемого показателя. Для чисел с показателем в нормальном диапазоне (не все из них или все нули), ведущий бит мантиссы всегда будет равен 1. Следовательно, ведущий 1 бит может подразумеваться, а не сохраняться явно в памяти. Это правило называется ведущей битной конвенцией или скрытой битной конвенцией. Правило позволяет сберечь 1 бит памяти, чтобы иметь ещё один бит точности. Ведущий бит конвенции не используется для субнормальных чисел; их показатель находится за пределами нормального диапазона значений. "
Отправлено SNMetamorph 26-08-2021 в 15:46:
Цитата:
Дядя Миша писал:
Для того же, для чего и в Халфе - сохранять информацию между уровнями.
Но оно в данном случае хранит кастомную информацию не для конкретных энтить, а просто какой-то глобальный стейт?__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord
Отправлено Дядя Миша 26-08-2021 в 18:05:
Ну да. Состояния этих переменных из env_global можно считывать.
На одной карте модифицируешь глобальную переменную, на другой считываешь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 26-08-2021 в 18:25:
Цитата:
Дядя Миша писал:
Это вероятно тот самый гейзенбаг, о котором так долго твердили большевики. Вылет в движке, как-то связан с логом.
Условия появления:
1. Только на P2
2. Только в режиме -dev (без -dev или в режиме -dev 2 не проявляется).
Возникает на самом начальном этапе инициализации.
Я так и не понял, что это такое, и откуда взялось, но это точно связано с ведением лога.
Поймал вылет на ванильной паранойе, запускал с параметрами -console -log +sv_cheats 1 -dev 7
Отправлено SNMetamorph 27-08-2021 в 17:37:
Зачем в шейдерах в texfetch.h в функции normalmap2D инвертируется Y-координата нормали?
Cg Pixel Shader:
Добавлено 27-08-2021 в 21:37:
Цитата:
SNMetamorph писал:
Зачем в шейдерах в texfetch.h в функции normalmap2D инвертируется Y-координата нормали?
Cg Pixel Shader:
Ага. Без этой инверсии нормалка начинает выглядеть неправильно.
Также, параллакс маппинг не заработал нормально, пока я в viewDir векторе не инвертировал Y координату. Это уже получается какая-то проблема типа SQB, только с TBN в шейдерах. Получается, TBN как-то не совсем правильно строится?__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord
Отправлено Дядя Миша 27-08-2021 в 17:58:
Цитата:
SNMetamorph писал:
Получается, TBN как-то не совсем правильно строится?
Из hlrad->lightmap.cpp:3773
C++ Source Code:
VectorNegate( directionnormals[1], directionnormals[1] ); |
Это еще с даркплейса тянется. Для паранои первую версию компиляторов делал китаец (Кастомный VHLT). Я предложил ему взять имплементацию делюкс-маппинга из Darkplaces. Просто, чтобы иметь возможность контролировать контент под сторонним движком (и кстати я этим активно пользовался на начальных этапах). А там тангента инвертирована почему-то была. Ну вот и пришлось так всё оставить.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 27-08-2021 в 18:15:
SNMetamorph потому что в паранойе нормалмапы были вразнобой, половина в директикс спейсе, половина в опенгл спейсе.

Инвертирование было попыткой сделать так, чтобы большая часть нормалмап выглядела правильно.
Плюс у моделей неправильно строится TBN в случае отзеркаленной развертки.
Вроде я это исправил, в gl_studio_init.cpp строчки 1524 и далее:
C++ Source Code:
3 | Vector tmpVect = CrossProduct( sVect, tVect ); |
4 | bool leftHanded = DotProduct( tmpVect, normal ) < 0.0f; |
8 | tVect = CrossProduct( normal, sVect ); |
9 | sVect = CrossProduct( tVect, normal ); |
13 | tVect = CrossProduct( sVect, normal ); |
14 | //sVect = CrossProduct( normal, tVect ); |
16 | sVect = CrossProduct( tVect, normal ); |
И для нормалмап в опенгл спейсе инвертирование игрека не нужно, если что.
Отправлено Дядя Миша 27-08-2021 в 18:18:
ncuxonaT Элбер текстуры брал с разных игр. Во всех этих играх совпадает стандарт? Или тоже вразнобой?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 27-08-2021 в 18:26:
Цитата:
ncuxonaT писал:
SNMetamorph потому что в паранойе нормалмапы были вразнобой, половина в директикс спейсе, половина в опенгл спейсе.

Инвертирование было попыткой сделать так, чтобы большая часть нормалмап выглядела правильно.
Плюс у моделей неправильно строится TBN в случае отзеркаленной развертки.
Вроде я это исправил, в gl_studio_init.cpp строчки 1524 и далее:
C++ Source Code:
3 | Vector tmpVect = CrossProduct( sVect, tVect ); |
4 | bool leftHanded = DotProduct( tmpVect, normal ) < 0.0f; |
8 | tVect = CrossProduct( normal, sVect ); |
9 | sVect = CrossProduct( tVect, normal ); |
13 | tVect = CrossProduct( sVect, normal ); |
14 | //sVect = CrossProduct( normal, tVect ); |
16 | sVect = CrossProduct( tVect, normal ); |
И для нормалмап в опенгл спейсе инвертирование игрека не нужно, если что.
Вроде понял, а вроде и нет. Ведь в случае с параллаксом я вообще нормалмапы не юзаю, а для корректного результата делать инвертирование все же приходится. Т.е. что-то не так с TBN внутри шейдера. Я думаю, нужно что-то в самом TBN поменять, чтоб не приходилось везде ставить инверсии.__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord
Отправлено ncuxonaT 27-08-2021 в 19:05:
Дядя Миша Элбер большую часть нормалмап генерировал сам из диффуза каким-то суперуродским способом, что всё покрывалось мерзким шумом. А из тех игр, откуда он брал, только в параграфе 78 нормали вразнобой, в остальных вроде бы всё прилично.
SNMetamorph на мировых полигонах TBN тоже как-то не так считается при отзеркаленной развертке, возможно, параллакс к этому чувствителен. Можешь сделать карту с двумя стенами, чтобы на одной текстура была слева направо, а на другой справа налево? Параллакс на обеих будет одинаково работать, или на одной чудить?
Отправлено Дядя Миша 27-08-2021 в 19:13:
Разница в освещении будет заметна, естественно. Но на рельеф нормалмапа не влияет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 27-08-2021 в 19:57:
Цитата:
ncuxonaT писал:
Параллакс на обеих будет одинаково работать, или на одной чудить?
Ну работает хорошо на обоих.
Добавлено 27-08-2021 в 23:57:
А вот нормали видно что по-разному отображаются.

__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord
Отправлено ncuxonaT 27-08-2021 в 20:22:
Хм, будем думать.
Отправлено SNMetamorph 28-08-2021 в 06:49:
А как в П2 рендере сделано, что на картах которые собраны п2шным компилятором с включенным динамическим солнцем улица корректно затемняется полностью? А при этом то, что в помещении, и лампы, остаётся светлым? По идее же эмбиент должен вообще всё освещение на локации затрагивать, и должно темнеть все, кроме динлайтов.
__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord