HLFX.Ru Forum Страницы (260): « Первая ... « 207 208 209 210 [211] 212 213 214 215 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Aynekko 18-12-2021 в 12:22:

Цитата:
Ku2zoff писал:
Я думаю, что тебе надо поштудировать оптику.

Там судя по всему не в этом дело, а в том что все динамические источники света не учитывают angles и scale модели. На каком этапе это сломалось, я не знаю. Дядя Миша даже сам не знает. И похоже дело не в шейдере, а где-то в коде, т.к. это касается только студиомоделей. Это все пока, что удалось выяснить.

__________________
Мой мод на Xash


Отправлено ncuxonaT 18-12-2021 в 13:00:

Разве мы в прошлый раз не пришли к тому, что трансформация модели идет через modelview матрицу, а источники света этого не учитывают?


Отправлено Aynekko 18-12-2021 в 13:08:

Я смотрел в параное 2, там по сути все точно так же за некоторыми исключениями (копипастил - все сломалось). Точно так же строится rotationmatrix. Вот и говорю, какие-то замуты с матрицами мира/модели/света, как одно к другому складывается я вообще не понимаю.

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 18:31:

Цитата:
Aynekko писал:
Дядя Миша даже сам не знает.


Я напомню как обстояло дело. Когда я готовил обновление для билда 0.65 (которое мог бы вообще не делать), я частично взял рендерер от паранои, чтобы не изобретать велосипед дважды. Но параноевский рендерер более требовательный к видеокарте и я об этом упоминал в теме про разработку.
И сразу же нашлась куча людей, которые возмутились - как это так? Ксаш не будет запускаться на моей замечательной встройке 1654-го года выпуска?
А вот раньше запускался! Это недопустимо! Я тогда не стал с ними спорить, прикинул как бы ужаться в лимиты и сделал это. И тогда же отписался в теме - я сделал новый билд совместимым с вашим железом, но клянусь небесным котэ, я не завидую тому, кто будет это дебажить! Так и оказалось!

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 18-12-2021 в 18:51:

Цитата:
Дядя Миша писал:
как это так? Ксаш не будет запускаться на моей замечательной встройке 1654-го года выпуска?

Ага, а сейчас народ занимается PrimeXT на базе паранои и как оказалось он очень многим нужен в таком виде, хоть и требователен к видюхе еще больше (там чего уже только не прикрутили - pbr, hdr). Вот поди разбери.
Цитата:
Дядя Миша писал:
ну за минуту поисков найти ничего не удалось, а дальше я не стал разбираться.

Что мне сделать, чтобы ты потратил 2 минуты хотя бы? Я уже весь рендер моделей сравнил построчно 2 раза, только толку мало. Проблема в том, что кроме тебя тут просто некому разобраться. Я бы может и перешел на прайм или параною, но я уже столько фичей сделал для мода, что переезд просто не получится.

P.S. Я сузил проблему до этих строчек в DrawLightForMeshList
C++ Source Code:
1
tr.modelorg = m_pModelInstance->m_protationmatrix.VectorITransform( RI->vieworg );
2
Vector right = m_pModelInstance->m_plightmatrix.VectorIRotate( RI->vright );
3
Vector lightorg = m_pModelInstance->m_protationmatrix.VectorITransform( pl->origin );
4
Vector lightdir = m_pModelInstance->m_plightmatrix.VectorIRotate( pl->frustum.GetPlane( FRUSTUM_FAR )->normal );

Но она может быть здесь, а может быть и не здесь...

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 19:12:

Ничего делать не надо, когда-нибудь я сам найду на это время.
У тебя ведь еще далеко до релиза? К тому же, меня удивляет, почему товарищи форкеры это до сих пор не поправили. Как форкать - так они первые. А как баг исправить - немогут

Добавлено 18-12-2021 в 22:12:

Цитата:
Aynekko писал:
Я сузил проблему до этих строчек в DrawLightForMeshList

Задача сводится к тому, что в m_plightmatrix. Я уже просто не помню.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 18-12-2021 в 19:17:

Цитата:
Дядя Миша писал:
У тебя ведь еще далеко до релиза?

Пока далеко. Буду признателен. Я вот тени от точечных источников из паранои смог перенести и доделать. И вот столкнулся с освещением от лайтов на моделях, всю малину портит.
Цитата:
Дядя Миша писал:
почему товарищи форкеры это до сих пор не поправили

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

Добавлено 18-12-2021 в 22:17:

Цитата:
Дядя Миша писал:
Задача сводится к тому, что в m_plightmatrix.

C++ Source Code:
// build the rotation matrix
m_pModelInstance->m_protationmatrix = matrix3x4( origin, angles, scale );
m_pModelInstance->m_plightmatrix = m_pModelInstance->m_protationmatrix;

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 19:42:

Aynekko напомни, какие именно лайты глючат и как это выражается.
А то я сел разбираться и уже забыл в чём проблема.

Добавлено 18-12-2021 в 22:42:

Если мне память не изменяет, то кажется с рескейленными моделями там фонарь не работал или что-то вроде этого. Ну так те матрицы, которые строятся для прямого скейла совершенно не годятся для обратного.
Там обратный скейл нужен - еденица делённая на него. Для каждой компоненты. В декалях я это сделал, а для света забыл совершенно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 18-12-2021 в 19:48:

Цитата:
Дядя Миша писал:
как это выражается

Судя по всему, светильники не учитывают поворот модели (angles) и скейл. Я это понял после того, как сделал тени от точечных лайтов. Когда у модели скейл 1 и angles 0 0 0, свет и тени ложатся на модель идеально. Иначе - съезжает проекция тени тут же и аттенюация работает неправильно.

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 19:51:

Посмотрел, там всё еще интереснее. Оказывается для ксаш-мода этого фикса с декалями вообще нет, но для паранои он есть. В чём тут смысл - на статик с пользовательским скейлом декаль тоже ложится не оригинального скейла.
А в зависимости от размера этого статика. Если модель ужата по одной из осей, то декаль тоже ужмётся или растянется, чего естественно быть не должно. В параное, собственно, свет считается в мировом пространстве, поэтому там не нужны обратные преобразования. Но все вот эти VectorIRotate и VectorITransform они неполноценные преобразования.
Они скейл принимают всегда еденичный. Зато быстро. Поэтому надо построить m_plightmatrix с обратным скейлом. Для еденичного разницы всё равно не будет.

Чот такое попробуйте:

C++ Source Code:
// build the rotation matrix
m_pModelInstance->m_protationmatrix = matrix3x4( origin, angles, scale );
m_pModelInstance->m_plightmatrix = matrix3x4( origin, angles, Vector( 1.0f / scale.x, 1.0f / scale.y, 1.0f / scale.z ));

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 18-12-2021 в 20:16:

Цитата:
Дядя Миша писал:
Чот такое попробуйте

Увы

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-12-2021 в 08:02:

Ну что увы? У нас теперь есть две матрицы. Они обе прямые, но в одной из них инверсный скейл. Значит ту вторую нужно использовать везде, где она вызвает функцию VectorIRotate или VectorITransform.

r_studio.cpp:4046

C++ Source Code:
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg );

вот первое место

r_studio.cpp:4048
C++ Source Code:
Vector lightorg = m_pModelInstance->m_plightmatrix.VectorITransform( pl->origin );

вот второе место
r_studio:4199
C++ Source Code:
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg );

Последнее для хрома. Правда хром не будет правильно освещаться на статиках, ну ничего, там всё равно нету костей, так что некритично.

И наконец в шейдерах
xash\core.pak\glsl\studiodlight_fp.glsl:87
C++ Source Code:
light *= textureCube( u_ProjectMap, -normalize( var_LightVec )).rgb;

Впрочем в последнем я не уверен, может функция сама нормализует вектор внутри.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 19-12-2021 в 08:36:

Особо ничего не поменялось. Аттенюация сменилась на обратную, теперь огромные модели наоборот видны издалека, а маленькие освещаются вплотную (раньше было с точностью наоборот).
Вот видео. Сначала тут точечный источник, закрепленный на игроке, потом показываю обычный фонарик:

https://www.youtube.com/watch?v=Pbi_Q2yph0A

Правильность наложения теней можно проверить по брашевому полу. На некоторых моделях от омнилайта она ложится правильно, потому что у них angles 0 0 0. А другие повернуты и все съезжает. Если модель лежит на боку, то тень тоже на боку будет. А от прожектора почему-то тени ложатся всегда правильно.
Видимо, потому что подход разный:

C++ Source Code:
shadow = ShadowProj( var_ShadowCoord, u_ShadowParams.xy, dot( N, L )); // прожектор
shadow = ShadowOmni( -var_LightVec, u_ShadowParams ); // динлайт

u_ShadowParams.zw, которые в диналайте, равны -pl->projectionMatrix[2][2] и pl->projectionMatrix[3][2], в параное2 так же, к слову. Видимо осталось от копипасты параноевской, так как теней от динлайтов изначально в ксашмоде не было.

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-12-2021 в 10:40:

Эй-эй, так я про тени ничего не говорил, только про свет. А свет вроде как правильно начал накладываться. Он же у тебя раньше обрезался?

Добавлено 19-12-2021 в 13:40:

C++ Source Code:
matrix4x4 lightView = pl->modelviewMatrix.ConcatTransforms( m_pModelInstance->m_protationmatrix );

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 19-12-2021 в 11:16:

Про тени я без претензий, просто показываю наблюдение. Проекция теней от динлайта не учитывает angles модели. И скейл кажется тоже...

Цитата:
Дядя Миша писал:
свет вроде как правильно начал накладываться. Он же у тебя раньше обрезался?


Да, он обрезался шейдером из-за if( spotDot < spotCos ) discard, на моделях со скейлом < 1. Сейчас вроде бы такого нет, но все равно скейл модели влияет - см. аттач, две модели, с виду они одинаковые, а по факту это 2 разные модели. Справа модель скейл 0.5, слева 1. С омнилайтом похожая ситуация. Они ведь должны освещаться идентично.

Цитата:
Дядя Миша писал:
Возможно тут тоже следует использовать m_plightmatrix.

Так стало еще хуже, свет от прожектора в моделях скейлом < 1 отображается точкой в оригине модели.
Цитата:
Дядя Миша писал:
Да и я не вижу что ты там делаешь, я не вижу что вообще поменялось в форке


В плане освещения вроде бы ничего критичного не менял, во всяком случае я вернул его в ксашмодовское состояние на момент 0.81 рев2. Ну разве что добавил тени от динлайтов в r_shadows.cpp. Прожектор не тронут.

Давай даже так. Я сейчас специально возьму 0.81 рев2 и буду фиксить все там. И показывать результаты.

Добавлено 19-12-2021 в 14:16:

https://youtu.be/i2YUJnMQSxM

Вот, 0.81 рев2 (клиент и сервер) с фиксами из последних постов с лайтматрицей. Та же картина.

__________________
Мой мод на Xash


Временная зона GMT. Текущее время 12:40. Страницы (260): « Первая ... « 207 208 209 210 [211] 212 213 214 215 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024