![]() |
Страницы (23): « Первая ... « 14 15 16 17 [18] 19 20 21 22 » ... Последняя » Показать все 334 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Paranoia 2:Savior (https://hlfx.ru/forum/forumdisplay.php?forumid=38)
-- Блог разработчика (https://hlfx.ru/forum/showthread.php?threadid=5236)
Дядя Миша то есть просто проекция на одну из координатных плоскостей в зависимости от нормали?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Психопат всё интерисовался насчёт консвервативной растеризации, отвечаю как я разрешил эту задачку. Правда тут надо учесть что для классического лайтбейкера некоторые вещи неактуальны, но всё же.
Как я уже и говорил, лайтмапа у нас в любом случае квад или прямоугольник, потому что картинка. Размеры вычисляются вписанием треугольника в ббокс. В идеальном случае (брашы) у нас квадратный полигон соответствует квадратной лайтмапе. Но в случае моделей естественно так не получается. Зато каждому трианглу всегда соответствует обратный и мы в принципе можем посчитать лайтмапу для их суммы, но в моём случае это нереализуемо, поскольку лайтмапа хранится не в атласе, а в виде raw-массива. То есть с избыточностью данных придется смириться. Вторая проблема очевидно - для пары трианглов образующих квад с высокой долей вероятности будет выделена идентичная по размерам лайтмапа и свет придется посчитать для каждой. Что автоматически означает двойную бессмысленную работу. Наиболее характерный пример - тот самый вагончик. Если бы я уменьшил лайтмапу в движке до 256х256, то вы бы увидели в атласе (r_showlightmaps), что вот та тень с окошками на полу присутствует в двух экземплярах, для одного и второго триангла пола соответственно. Оно конечно и на большой лайтмапе видно, но там глаза сломаешь. Это конечно не дело. Код подготовки лайтмапы к рассчёту имеет встроенные средства для отсечения лишних точек - массив occluded. То есть неважно по какой причине точка стала невалидной, нам важно что для нее свет не будет считаться. В самой халфе идёт проверка на попадение люкселя в солидный лиф, но как легко догадаться на карте из одних моделей это бессмыленное условие. У моделей нет никаких лифов и вообще нет дерева. Проще всего проверить границы треугольника построением барицентрических координат и проверкой на выход из их границ. Собственно это я и сделал. Второй положительный момент - барицентрические значения можно использовать для лерпинга нормалей и получения сглаженной фонг-нормали. При таком подходе скорость работы вырастает вдвое, однако, поскольку мы отсекаем пиксели по краям треугольника, легко догадаться что эти самые края обведутся чёрной каёмкой. Причём чем меньше разрешение лайтмапы - тем больше эта каёмка. Для борьбы с этим тоже есть два метода. Во первых старый вариант из кутри - найти у occluded-пикселей 9 соседей и взять с них значения по average. Размер фильтра невелик, поэтому оно почти всегда даёт идеальные результаты. Но легкая "тень" от шва всё равно еще может присутствовать. Второе решение - эмпирическое ввести вокруг трианглао охранный бордюр. Барицентрика имеет в виду границы менее ноля и более еденицы. Вот к ним и надо прибавить наш борюдр. Обычно это значения от 0.1 до 0.5. Чем выше значение - тем меньше вероятность артфектов и тем меньше выигрыш по скорости, потому что мы опять начинаем считать потенциально невидимые люксели.
Впрочем даже со значением бордюра 0.5 у нас двухкратный прирост по скорости (а со значением 0.0 - трёхкратный). Если надо, я может потом скриншотами проиллюстрирую.
Так же выяснилось что китайский блур для трианглов абсолютно не годится, он провоцирует на них швы. Его конечно можно заменить на обычный box 4x4, но вы же понимаете, что это придется лайтмапу увеличить вдвое, а значит и время работы возрастёт во столько же. Блур китайский тем и хорош, что там нет линейного увеличения размера от фактора.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтожы, внёс все необходимые исправления, подключил радиосити для моделей, поставил на компиляцию. Затрудняюсь сказать сколько это займет времени. Но несжатая лайтмапа по прикидкам весит около ста мегабайт. От такие пирожки. З котятамi.
__________________
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'
Дядя Миша я сначала тоже так делал, чтобы значение "occluded" пикселей бралось из соседних, но это не работает, если соседних нет. Какой-нибудь тонкий треугольник вообще не имеет нормальных пикселей, все "occluded", и пока, освещение брать неоткуда.
Вариант с барицентрическими координатами непредсказуемый. Непонятно, с каким коэффициентом их надо пячить, чтобы гарантировано покрыть граничные пиксели.
Сейчас сделал второй вариант отсюда, на первых тестах результат хороший.
Пячу каждое ребро на полудиагональ пикселя (на всякий случай чуть больше), направление которой лежит в том же квадранте, что и нормаль этого ребра. И клипаю прямоугольником.
__________________
__________________
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'
__________________
XaeroX эммм, но про брашы речь не шла. Но если ты трианглы смержишь в квады, то лайтмапа ляжет на них лутьше.
__________________
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'
Временная зона GMT. Текущее время 07:25. | Страницы (23): « Первая ... « 14 15 16 17 [18] 19 20 21 22 » ... Последняя » Показать все 334 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024