Дядя Миша писал: 1. Можно, как я уже сказал найти пиковое значение света для всех страниц атласа, сохранить его, ну например в ворлдспавн, предварительно умножив на него все значения света. Это в некотором смысле даст такой же эффект, как и BestFitNormals - сдвигаем значения диапазона, оставляя его границы нетронутыми. А потом просто умножить в шейдере каждый пиксель лайтмапы на это значение и получим почти HDR.
И получится адовый бандинг. Будет пиковое значение, например, 10 - вместо 256 градаций получим 25.
Цитата:
Дядя Миша писал: 2. Сохранить лайтмапы в RGBe как в сорсе. Четвертый байт отводится под экспоненту. Минус в том, что скорее всего этот формат не имеет никакой аппаратной поддержки, его не сожмёшь в DXT и он занимает больше места, а я бы может четвертый байт хотел под тени заюзать.
Можно хранить как RGBA и сжимать в DXT5. А вообще есть всякие непривычные форматы типа GL_RGB10_A2, GL_RGB9_E5 и GL_R11F_G11F_B10F. Сжать их не выйдет, конечно.
За это сообщение ncuxonaT получил девойс по собственному желанию
Лайтмапа считается в вещественных числах, а записывается в картинку 24 бита, очевидно, каждый канал может хранить максимум 0-255. А во флоате там могут быть любые значения, источники света-то суммируются.
А чому сразу не считать лайтмапу в нужных пределах?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну зачем рендерить с большим цветовым диапазоном, чтобы потом его обрезать? Почему нельзя отрендерить сразу в нужном качестве?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Какой еще световой диапазон?
Ты на карту поставил лампочку и задал ей яркость 300. Очевидно 300 уже не влезает в границы байта. Но за счёт формулы затухания до сурфейса доходят меньшие значения. Но не от одной лампочки, а от разных. Они складываются. Где-то обязательно будет больше 255. Ты никак на этот процесс не повлияешь. Можно привязать эти настройки к физически корректным формулам, но проблема никуда не исчезнет.
Дядя Миша
Почему тогда в других рейтрейсерах при запекании в лайтмапу этой проблемы нет?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ncuxonaT писал: Я же говорю про нормализованный диапазон 0-1. Хочешь в целых числах - пожалуйста. Если пиковое значение 2550, на лайтмапе будет адовый бандинг.
Ты слушаешь только себя. Отучайся. Разжую подробно, еще раз.
1. Анализиурем все люксели всех страниц атласа для конкретной карты.
Находим пиковое значение. Если пик ниже 255, ставим множитель в 1.0.
2. делим все люксели на наш пик, если он более 255. Здесь приходится полагаться на практику, крайний пик навряд ли превысит 1.2 - 1.5. Просто из дизайнерского опыта, никто не будет ставить рядом сотни лампочек.
3. Здесь есть потенциальная проблема, что некоторые слишком тёмные люксели могут потенциально стать ниже 1 1 1 и соответственно превратиться в 0 0 0. Можно их принудительно ограничить на 1 1 1, хотя это и не совсем корректно.
4. При рендеринге умножаем лайтмапу обратно на наш множитель. Фокус тут в том, что дальше мы умножаем её на диффузку, поэтому итоговое значение не превысит 0-255, даже при рендеринге в RGBA8.
В чём смысл этой затеи - более эффективное использование диапазона RGB24. Я ж почему и сказал, что это чем-то похоже на BFN, там ведь тоже весь трюк сводится примерно к тому же самому.
Цитата:
ncuxonaT писал: Какое разрешение лайтмапы?
386х386.
Цитата:
ncuxonaT писал: Радиосити нет, только небо?
нету, разве я писал, что прикрутил радиосити?
Цитата:
ncuxonaT писал: Сколько лучей на небо?
148 тысяч прямых и наверное около миллиона вторичных пополусфере, но это неточно, надо счётчик прикрутить.
Дядя Миша писал: Здесь приходится полагаться на практику, крайний пик навряд ли превысит 1.2 - 1.5.
Это очень странное допущение. Например, рядом с ярким источником пик может быть и 10, и 20.
Цитата:
Дядя Миша писал: 3. Здесь есть потенциальная проблема, что некоторые слишком тёмные люксели могут потенциально стать ниже 1 1 1 и соответственно превратиться в 0 0 0.
Потенциальная проблема в том, что диапазон, который сейчас записывается в 0-255, будет ужат, например, в 0-100, а потом разжат обратно, и вместо плавного перехода вылезут ступеньки.
Цитата:
Дядя Миша писал: 4. При рендеринге умножаем лайтмапу обратно на наш множитель. Фокус тут в том, что дальше мы умножаем её на диффузку, поэтому итоговое значение не превысит 0-255, даже при рендеринге в RGBA8.
Точно имел в виду то, что написал? Лайтмапа (200 200 200) * множитель 2 * диффузка (200 200 200) = (314 314 314)
Цитата:
Дядя Миша писал: Я ж почему и сказал, что это чем-то похоже на BFN, там ведь тоже весь трюк сводится примерно к тому же самому.
BFN работает только потому что нормали - единичные вектора.
Цитата:
Дядя Миша писал: 148 тысяч прямых и наверное около миллиона вторичных пополусфере
ncuxonaT писал: диапазон, который сейчас записывается в 0-255, будет ужат, например, в 0-100
Ты не читаешь, что я пишу. Ты слушаешь только себя. Вот откуда ты взял, что я собираюсь ужимать диапазон до 0-100? Бесполезный разговор, я не буду больше ничего объяснять.
Откуда ты эти числа выковырял? В особенности множитель.
Цитата:
ncuxonaT писал: BFN работает только потому что нормали - единичные вектора.
не забудь рассказать это Крайтеку, они оценят.
Цитата:
ncuxonaT писал: А что такое вторичные по полусфере?
Опять придуряешься? Индирект от солнца собрать.
148 тысяч трасс, это кстати немного. Рейтрейсер на них тратит 0.3 секунды. Дерево дольше строится.
Добавлено 09-07-2020 в 22:20:
Вот статистика по рейтрейсеру (время его работы включает так же и сам процесс освещения, но думаю этим можно прнебречь, т.к. основное время уходит именно на трассировку)
Цитата:
137502 total traces
EmitDirectLight: time: 0.304986 secs
Это чисто прямой свет. 1 люксель = 1 трасса. 137 тысяч лучей
Цитата:
19250687 total traces
EmitDirectLight: time: 49.967801 secs
Включил индирект, выпуск лучей по полусфере. 19 миллионов лучей
Цитата:
49861097 total traces
EmitDirectLight: time: 96.683332 secs
Индирект + sun spread. 49 миллионов лучей.
Все замеры проводились в однопоточном режиме. Рейтрейсер, напомню, вальвовский, переделанный обратно с SSE2 на FPU. Я потестил оригинал и скорость его работы была в пределах халфовского BSP-дерева почему-то. Т.е. достойно, но ожидалось явно большее. Тогда я его переписал обратно на FPU, исправил несколько ошибок и делений на ноль (вроде как SSE2 к подобным вещам относится индиффиррентно) и ВНЕЗАПНО получил прирост скорости более чем в 10 раз.
Добавлено 09-07-2020 в 22:25:
Кстати обратите внимание. Наш Психопат уже тогда спрашивал "что значит по полусфере". То есть он просто издевается или нарочно наши слова к сведению не принимает. Слушает только себя, как я и говорил. Нам такие товарищи точно не нужны. Пусть отдохнёт в бане некоторое время.
Добавлено 09-07-2020 в 23:03:
Смотрю вот в исходники q3map2 фейк на фейке. Все эти девиансы, джиттеры и прочее, в конечном итоге сводятся к тому, чтобы нагенерить параметрических лампочек. Но есть один важный аспект - когда я буду дублировать этот лайтмаппер на GPU в реалтайме, работать с такими фейковыми лампочками будет куда быстрее и удобнее, нежели с честными формулами. Плюс оно еще и со всеми кваками совместимо по получившемуся освещению. Попробую солнышек нагенерить, дурацкое дело нехитрое.
Добавлено 10-07-2020 в 00:14:
То что слева - интерпретировало deviance как sunspred и честно выпускало лучи по полусфере. А skyLight в свою очередь, отправился в diffuse_light. 49 миллионов трасс, считалось 2 минуты 30 секунд в одном потоке.
То что справа - методы из ку3\q3map2, через слэш, потому что первым это всё же придумал Кармак, а потом эту идею развили и углубили. 18 фековых солнц. Два с половиной миллиона трасс, считалось 5 секунд в одном потоке.
Мораль не совсем очевидна. Т.е. параметрические лампочки вместо честных формул это хорошо (по крайней мере в контексте прицела на GPU) а параметрические солнца вместо трейсов до скайдома это плохо?
Цитата:
Дядя Миша писал: То что слева - интерпретировало deviance как sunspred и честно выпускало лучи по полусфере. А skyLight в свою очередь, отправился в diffuse_light. 49 миллионов трасс, считалось 2 минуты 30 секунд в одном потоке.
То что справа - методы из ку3\q3map2, через слэш, потому что первым это всё же придумал Кармак, а потом эту идею развили и углубили. 18 фековых солнц. Два с половиной миллиона трасс, считалось 5 секунд в одном потоке.
Я сначала смотрел на правую картинку как на более совершенную потому что там тень выделяет кривизну под холмиком, а теперь уже и не знаю.
Ни на каком, там либо все каналы одинаковые, либо есть только один, поэтому эффект не проявляется.
Добавлено 10-07-2020 в 10:04:
Цитата:
Дядя Миша писал: Кстати обратите внимание. Наш Психопат уже тогда спрашивал "что значит по полусфере". То есть он просто издевается или нарочно наши слова к сведению не принимает.
Да это смахивает на культуру какого-нибудь Хабра: сразу начинать задавать кучу вопросов докладчику, просто по привычке.