HLFX.Ru Forum Страницы (56): « Первая ... « 40 41 42 43 [44] 45 46 47 48 » ... Последняя »
Показать все 832 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- XashXT (https://hlfx.ru/forum/forumdisplay.php?forumid=30)
-- XashXT/3D [Вопросы и ответы] (https://hlfx.ru/forum/showthread.php?threadid=3689)


Отправлено Aynekko 03-09-2021 в 10:55:

Цитата:
Crystallize писал:
По-моему они обе неправильно освещаются

Маленькая справа со скейлом 0.5. Маленькая слева 1. А большие ящики я не помню. Факт в том, что освещение адекватное только на скейле 1. Любой +\- и оно ломается в зависимости от того, насколько новое число далеко от единицы.
Трудно сказать, в шейдере это нужно делать или в коде… Может там сами кости изначально неправильно работают. С другой стороны, тогда бы и скейл не работал. Эхх

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-09-2021 в 11:23:

Я когда-то во время возни с обновлённым рендерером так и написал: не завидую тому, кто будет это разгребать

__________________
My Projects: download page

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

Цитата:

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


Отправлено ncuxonaT 03-09-2021 в 14:50:

Aynekko покажи код шейдера


Отправлено Aynekko 03-09-2021 в 15:34:

Вот, в архиве оригиналы ксашмодовские, и моя неудачная попытка что-то поправить.

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-09-2021 в 15:49:

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

Добавлено 03-09-2021 в 18:49:

Кстати. Там может еще куллинг неверно работать, например в

AddStudioToLightList( plight_t *pl )

C++ Source Code:
1
Vector modelpos = m_pModelInstance->m_protationmatrix.GetOrigin();
2
float dist = (pl->origin - modelpos).Length();
3
 
4
if( !dist || dist > ( pl->radius + m_pModelInstance->radius ))
5
  return;
6
 
7
if( pl->frustum.CullBox( m_pModelInstance->absmin, m_pModelInstance->absmax ))
8
  return;

Может absmins и absmax не предумножены на скейл. Закоментить этот участок и проверить еще раз всё.

__________________
My Projects: download page

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

Цитата:

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


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

Увы, не помогло

Цитата:
Дядя Миша писал:
дело вообще не в шейдерах.

Я вот тоже так думаю…сколько ни возился с шейдерами, так или иначе приходил к исходному результату. Может где-то в DrawLightForMeshList что-то не так? В параное там все по-другому обставлено, не получилось разобраться.

Вот еще в шейдере я находил такое, что float dist = length( var_LightVec ) напрямую влияет на освещение (картинка в аттаче. Вектор этот var_LightVec = ( u_LightOrigin.xyz - position.xyz ). Я так понимаю lightorigin это фонарик. А вот position!
C++ Source Code:
vec4 position = boneMatrix * vec4( attr_Position, 1.0 );

Из чего я и сделал тогда вывод, что что-то с bonematrix.

Добавлено 03-09-2021 в 19:11:

Аттач

__________________
Мой мод на Xash


Отправлено ncuxonaT 03-09-2021 в 17:43:

В шейдере написано, что u_LightOrigin и u_LightDir в локальном пространстве модели. Когда они из мировых координат переводятся в локальные, скейл учитывается?
И в пиксельном шейдере замени

Cg Pixel Shader:
1
L = normalize( u_LightDir.xyz );
2
 
3
// spot attenuation
4
float spotDot = dot( normalize( var_LightVec ), L );

на
Cg Pixel Shader:
1
L = normalize( var_LightVec );
2
 
3
// spot attenuation
4
float spotDot = dot( normalize( u_LightDir.xyz ), L );

К скейлу это, правда, не относится, но всё же.


Отправлено Aynekko 03-09-2021 в 19:30:

Цитата:
ncuxonaT писал:
И в пиксельном шейдере замени

Вроде что-то поменялось, а что-то и нет. Баг остался, но как будто повернулся на 90 градусов.

Насчет лайторигин, вот что в коде идет, может так понятнее будет:
C++ Source Code:
1
m_pModelInstance = &m_ModelInstances[RI->currententity->modelhandle];
2
 
3
tr.modelorg = m_pModelInstance->m_protationmatrix.VectorITransform(RI->vieworg);
4
Vector right = m_pModelInstance->m_plightmatrix.VectorIRotate(RI->vright);
5
Vector lightorg = m_pModelInstance->m_protationmatrix.VectorITransform(pl->origin);
6
Vector lightdir = m_pModelInstance->m_plightmatrix.VectorIRotate(pl->frustum.GetPlane(FRUSTUM_FAR)->normal);
7
 
8
matrix4x4 lightView = pl->modelviewMatrix.ConcatTransforms(m_pModelInstance->m_protationmatrix);
9
matrix4x4 projectionView = pl->projectionMatrix.Concat(lightView);
10
projectionView.CopyToArray(gl_lightViewProjMatrix);

И далее:
C++ Source Code:
1
// write constants
2
pglUniformMatrix4fvARB(RI->currentshader->u_LightViewProjectionMatrix, 1, GL_FALSE, &gl_lightViewProjMatrix[0]);
3
float shadowWidth = 0.5f / (float)RENDER_GET_PARM(PARM_TEX_WIDTH, pl->shadowTexture);
4
float shadowHeight = 0.5f / (float)RENDER_GET_PARM(PARM_TEX_HEIGHT, pl->shadowTexture);
5
 
6
// depth scale and bias and shadowmap resolution
7
pglUniform4fARB(RI->currentshader->u_LightDir, lightdir.x, lightdir.y, lightdir.z, pl->fov);
8
pglUniform4fARB(RI->currentshader->u_LightDiffuse, pl->color.r / 255.0f, pl->color.g / 255.0f, pl->color.b / 255.0f, pl->lightFalloff);
9
pglUniform4fARB(RI->currentshader->u_ShadowParams, shadowWidth, shadowHeight, -pl->projectionMatrix[2][2], pl->projectionMatrix[3][2]);
10
pglUniform4fARB(RI->currentshader->u_LightOrigin, lightorg.x, lightorg.y, lightorg.z, (1.0f / pl->radius));
11
pglUniform3fARB(RI->currentshader->u_ViewOrigin, tr.modelorg.x, tr.modelorg.y, tr.modelorg.z);
12
pglUniform3fARB(RI->currentshader->u_ViewRight, right.x, right.y, right.z);
13
pglUniform4fARB(RI->currentshader->u_FogParams, tr.fogColor[0], tr.fogColor[1], tr.fogColor[2], tr.fogDensity);

__________________
Мой мод на Xash


Отправлено ncuxonaT 04-09-2021 в 19:16:

В ксашмоде меши трансформируются через матрицу модели что ли? По-моему, в паранойе это сделано через кости.
Я не вижу в этом коде скейла, он включен в m_protationmatrix?


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

Цитата:
ncuxonaT писал:
он включен в m_protationmatrix?

Да. Вся эта замута для экономии юниформов.
Ксаш мод запускается там, где Параное их уже не хватает.

Добавлено 04-09-2021 в 22:23:

Если вдруг непонятно - вспоминайте. я вас спрашивал тогда.
Можно хранить матрицу кости, это 12 флоатов или 3 vec4.
Можно хранить кватернион + позицию, это 7 флоатов.
Я их пишу в линейный массив из vec4.
Но. Скейл при таком подходе уже не передать. Zhopa!
Но можно сделать следующее - скейл у нас только в руте, значит мы можем передать его вместе с рутовой матрицей, а трансформацию связки кватернион + оригин выполнить прямо в шейдере.
Что я собственно и проделал. Но где-то недоглядел.
В параное этот патч тоже есть, к слову.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ncuxonaT 08-09-2021 в 15:20:

Че-т я подумал, неправильно это. Не надо оригин лайта умножать на скейл модели.


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

Еще обратил внимание на параноевский шейдер

C++ Source Code:
1
#if !defined( LIGHT_PROJ )
2
float dist = length( var_LightVec );
3
float atten = 1.0 - saturate( pow( dist * u_LightOrigin.w, LIGHT_FALLOFF ));
4
if( atten <= 0.0 ) discard; // fast reject
5
#else
6
// directional light has no attenuation
7
float atten = 1.0;

если НЕ light_proj тут идет. В то время, как в ксашмоде
C++ Source Code:
1
#if defined( STUDIO_LIGHT_PROJECTION )
2
L = normalize( u_LightDir.xyz );
3
 
4
// spot attenuation
5
float spotDot = dot( normalize( var_LightVec ), L );
6
float fov = ( u_LightDir.w * FOV_MULT * ( M_PI / 180.0 ));
7
float spotCos = cos( fov + fov );
8
if( spotDot < spotCos ) discard;
9
#elif defined( STUDIO_LIGHT_OMNIDIRECTIONAL )
10
L = normalize( var_LightVec );
11
#endif

Странно все это. Если сделать, как в параное, то освещение всех моделей будет нормальным, только яркость не будет меняться на всем расстоянии фонарика (оно и понятно, аттенюацию же убрал). Как-то по-другому там считается, похоже, я пока не понял как.

__________________
Мой мод на Xash


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

LIGHT_PROJ в паранойе - это солнце, STUDIO_LIGHT_PROJECTION в ксашмоде - это прожектор.
Аттенюация получается неправильной из-за умножения оригина лайта на скейл модели. Надо как-то иначе сделать применение скейла. Убрать его из rotationmatrix, передавать в шейдер юниформом и сначала умножать на него, потом уже на все матрицы. Наверное.


Отправлено Holego|Noobito 14-09-2021 в 12:24:

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

__________________
Здравомысле - удел слабых.


Отправлено Ku2zoff 14-09-2021 в 14:29:

Holego|Noobito у тебя в переменных среды отсутствуют необходимые пути. Собирай не батником, а из самой студии. Ну либо пропиши пути.


Временная зона GMT. Текущее время 08:21. Страницы (56): « Первая ... « 40 41 42 43 [44] 45 46 47 48 » ... Последняя »
Показать все 832 сообщений этой темы на одной странице

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