![]() |
Показать все 54 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- Кастомный VRAD, исправление освещения в HL2: Update (https://hlfx.ru/forum/showthread.php?threadid=5442)
Кастомный VRAD, исправление освещения в HL2: Update
Там очень много убогих случаев когда лампа дневного света на стене якобы светит с разбросом 45-60 градусов, чётким кругом света, и не прямо перед собой а скажем вниз на 45 градусов или даже вертикально вниз.
Ещё хуже когда солнце в помещениях фейкается спотом или даже обычным лайтом, чтобы видимо по-быстрому создать комфортную атмосферу.
Предполагается что лайт, спот и проп вблизи друг друга связаны по смыслу, поэтому создаются списки энтитей которые затем фильтруются так чтобы у пропа был либо просто лайт либо просто спот. Спот потом выравнивается по направлению пропа.
В общем-то работает, по крайней мере явных несуразностей не бросается в глаза. Хотя у меня тоже встречаются люминисцентные лампы на стене которые светят вниз, но это простительно для кода который не ориентируется (пока?) по именам пропов, а применяет один алгоритм на всех. Выкладываю чтобы создать привычку показывать свои работы.
Было
Стало
Афтар маладец за проделаную работу!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Поменял алгоритм, теперь заранее составляется три таблички для пропов изображающих лампы разного типа, и поэтому спот может стать лайтом или двойным спотом с разными углами если рядом с ним располагается лампа накаливания или лампа дневного света соответственно.
Так, а это вообще зачем?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вальвовское освещение выглядит странно.
Да и я думал, вдруг будет какой-то вау-эффект в результате.
Ну и практика кодинга. Ради геймплея это не так интересно, а вот ради графона поприкольнее.
Там же линеар, квадратик и кубик затухание. Может надо было просто их настроить?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Ну ты глянь самую первую картинку: лампа дневного света которая по своей природе должна иметь внешний угол распространения градусов 200-250, изображена спотом у которого внешний конус в 2-3 раза меньше. Как ты такое затуханием исправишь? В тоннелях они натыкали лайтов на ровном месте (толи чтобы темноты не было толи у них якобы кислота светится), в канализации в каждом отверстии наружу - у них поставлен спот светящий вертикально вниз, толи чтобы сэмитировать адаптицию зрения, толи для красоты просто.
Т.е. дизайн помещений и расстановка пропов-лампочек диктовали некие рамки того каким получится освещение на локации, но Валв видимо не хотели от этого зависеть. В большинстве случаев, видимо, локации получались для них слишком тёмными. Но они не стали, там, менять квадратичное затухание на линейное, а просто втыкали спот в каждый угол который казался им слишком тёмным. Ну и в результате получилось такое пресное, унылое освещение.
Ты сам-то будешь это использовать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я делал как раз чтобы обработать стандартные уровни и сделать такой своеобразный мод, больше ни для чего. Кто мапает под сорс, они уже пусть сразу правильно делают.
Сабж
трейс в враде не такой продвинутый как в хл1, возвращает только 0 и 1 поэтому приходится выкручиваться
1 | AngleVectors( QAngle( 0, relocpropang[i].y, 0 ), &relocnormal ); |
2 | VectorMA( relocproporg[i], 50, relocnormal, start ); |
3 | start4.DuplicateVector( start ); |
4 | stop4.DuplicateVector( start + Vector( 0, 0, 4096 ) ); |
5 | // returns 1 if the ray sees the sky |
6 | TestLine_DoesHitSky ( start4, stop4, &fractionVisible ); |
7 |
8 | if( TestSignSIMD( CmpGtSIMD( fractionVisible, Four_Zeros ) ) ) |
9 | { |
10 | // fiv: traced to sky; |
11 | //relocpropang[i].x = -89; // 90 will be confused with fluors! |
12 | printf( "reloc %i pos %.f %.f outside: %.4f\n", i, relocproporg[i].x, relocproporg[i].y, fractionVisible.m128_f32[0] ); |
13 | } |
14 | else |
15 | { |
16 | printf( "reloc %i pos %.f %.f %.f inside: %.4f\n", i, relocproporg[i].x, relocproporg[i].y, relocproporg[i].z, fractionVisible.m128_f32[0] ); |
17 | start4.DuplicateVector( relocproporg[i] ); |
18 | //trace fwd |
19 | float ln=0; |
20 | for( ln=0; ln<999; ln++ ) |
21 | { |
22 | //outputs 1 in fractionVisible if no occlusion |
23 | VectorMA( relocproporg[i], ln, relocnormal, stop ); |
24 | stop4.DuplicateVector( stop ); |
25 | TestLine ( start4, stop4, &fractionVisible ); |
26 | if( !TestSignSIMD( CmpGtSIMD( fractionVisible, Four_Zeros ) ) ) break; |
27 | } |
28 | printf( "reloc %i traced for %.f fwd to %.f %.f %.f\n", i, ln, stop.x, stop.y, stop.z ); |
29 |
30 | // and now trace up |
31 | start += ( stop - start ) / 2; |
32 | start4.DuplicateVector( start ); |
33 | stop=start; |
34 | for( ln=0; ln<999; ln++ ) |
35 | { |
36 | //outputs 1 in fractionVisible if no occlusion |
37 | stop.z += ln; |
38 | stop4.DuplicateVector( stop ); |
39 | TestLine ( start4, stop4, &fractionVisible ); |
40 | //printf( "reloc %i traced for %.f up to %.f %.f %.f\n", i, ln, stop.x, stop.y, stop.z ); |
41 | if( !TestSignSIMD( CmpGtSIMD( fractionVisible, Four_Zeros ) ) ) break; |
42 | } |
43 | printf( "reloc %i traced for %.f up to %.f %.f %.f\n", i, ln, stop.x, stop.y, stop.z ); |
44 | relocproporg[i] = stop-Vector( 0, 0, 10 ); |
45 |
46 | //printf( "reloc %i pos %.f %.f fwd wall: %.4f\n", i, relocproporg[i].x, relocproporg[i].y, fractionVisible.m128_f32[0] ); |
47 |
48 | //relocpropang[i].x = -89; // 90 will be confused with fluors! |
49 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, так ";;" это так и пишется, хех. Прикол в том что можно написать хоть (i=0;i++) и оно скомпилится без ворнингов, вот только работать не будет.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX воттакое вот
for( ln=0; ln++; ) |
Везде.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Perfection
Стоило занулить дикие вальвовские значения для константной аттенюации и картинка сразу стала нормальной.
Paskuda! Целый вечер и утро мучался с зависанием в начале FinalLightFace. Погуглил, убрал свои NULL где мог, не помогло. Дебажу-указывает куда-то на распределитель тредов, а я туда вообще не лез. Потом заметил: у меня стоит галочка на Direct Lightmap, т.е. директ и индирект в разные слои. Это она была виновата.
В мультипоточном коде в первую очередь надо проверять работу в одном потоке, особенно если не понимаешь что делаешь. -threads 1 в батнике.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я делал thread 1, всё равно висло.
больше всего времени убито на то чтобы задетектить группы env_fire и каждый из них подсветить несколькими лайтами
Добавлено 23-11-2020 в 00:36:
По большому счёту различия небольшие: цвет солнца более холодный, лайты стали темнее за счёт того что затухание всегда квадратичное, (финалку я отрендерю вообще с симуляцией текслайтов). Солнце по возможности светит из env_sun, лайты-из пропов и костров, широкие лампы изображаются цепочкой лайтов.
Мне интересно, как можно из врада прочитать битмапу скайбокса чтобы выставить соответствующие значения цвета для солнца и амбиента. Но я не знаю на какой кобыле к этой проблеме подъехать: если подключаешь материалсистем к враду то он просит 100500 хидеров и всё равно что-то не находит.
Но самой безумной идеей у меня было бы спавнить вокруг карты по лайту на каждый пиксель скайбокса))
Сто раз говорил, не склеивайте картинки для сравнения в одну.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
там ракурс очень разный, все равно перекликивать будешь?
можно написать плагин который будет расклеивать эти картинки обратно)
1. компилишь карту старым радом
2. выбираешь ракурс
3. делаешь сейв
4. делаешь скриншот
5. компилишь карту новым радом
6. грузишь сейв
7. делаешь скриншот
Правда сложно?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша щёлкай
похоже рад не находит модельки статиков
Слишком свежий рар. Я его принципиально не ставлю, он берёт за моду имена автобэкапов делать русским языком. Кто бы его просил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize твой рад тот, где лампы дневного света стену под собой освещают?
ncuxonaT угу. такой цели не было, просто судя по выступающим колбам, у таких ламп будет разброс больше 180 градусов. там трейсер какой-то неточный чтоли.
Добавлено 26-11-2020 в 02:23:
Дядя Миша
Дядя Миша
Crystallize у тебя какие-то дикие пересветы. Какая формула квадратичного затухания? 1.0/r^2 или 1.0/max(1.0, r^2)?
ncuxonaT я формулу не трогал. я даже снижаю яркость чтобы скомпенсировать увеличение угла разброса.
Ну вот теперь я ясно вижу, что ты испортил рад
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну будьте ж людьми
лампочка ильича которая в оригинале каким-то чудом светит как прожектор-это лютая дичь, хотя игра света и тени и выглядит симпатично.
Добавлено 26-11-2020 в 08:37:
Crystallize выключи рейтрейсер вообще и увидишь, что всё останется по прежнему.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А как ты ковыряешь сорцы если даже простых вещей не знаешь?
В функции TestLine
1 | // g_RtEnv.Trace4Rays(myrays, Four_Zeros, len, &rt_result, TRACE_ID_STATICPROP | static_prop_index_to_ignore, g_bTextureShadows ? &coverageCallback : 0 ); |
2 |
3 | // Assume we can see the targets unless we get hits |
4 | float visibility[4]; |
5 | for ( int i = 0; i < 4; i++ ) |
6 | { |
7 | visibility[i] = 1.0f; |
8 | if ( ( rt_result.HitIds[i] != -1 ) && |
9 | ( rt_result.HitDistance.m128_f32[i] < len.m128_f32[i] ) ) |
10 | { |
11 | // visibility[i] = 0.0f; |
12 | } |
13 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
немного переделал: быдло
стадло
Лучший скрин, имхо - https://hlfx.ru/forum/showthread.ph...8242#post198242
На последнем скрине потолок засвечен намного сильнее чем стена под лампой.
__________________
igroprom.d3.ru
Похоже функция FormFactorPolyToDiff виновата в том что некоторые длинные и тонкие мировые фейсы остаются темными.
Не думаю. Я этот форм-фактор использую в NT и у меня ничего не остаётся ни тонким ни тёмным.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша там идет проверка на площадь патча, может в хл2 она не всегда корректно считается?
Повод завести гитхаб
https://github.com/crystallize1/Bri...eVRAD-OrangeBox
Временная зона GMT. Текущее время 20:53. | Показать все 54 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024