Нет, лампочки все статичные.
Для полного счастья осталось только хитбоксы моделей загрузить как капсулы и будут тени от персов. Но это всё я уже оставлю для XashNT.
Здесь - достаточно.
К вопросу зачем это всё нужно, если это неосновная ветка и использоваться не будет. В основном для того чтобы вы его потестировали, привыкли и научились основным методам работы с таким освещением.
Добавлено 28-05-2019 в 16:51:
Ну чтоже. Я почти сделал всё что наметил, кое-что отменил, отложил на будущее. Скоро будет всеобщее бета-тестирование.
Добавлено 28-05-2019 в 20:03:
Настала пора закешировать коллизию и сгенерированный TBN. Параноя адски долго грузит уровни как раз по этой причине. Несмотря на все оптимизации рассчёты коллизии и тбн дело небыстрое. Надо их сохранить на диск.
Почему бы, кстати?
Такие вещи обычно себе позволяют производители техники: у одних хороший объектив, у других матрица, третьи цвета нормально передают, у четвертых аккумуляторы живучие, пятые видео классно пишут, ну а чтобы всё сразу вместе, это не.
С точки зрения экономической потребителеориентированности это вполне понятно...
Но в условно бесплатной платформе зачем подобная диверсификация?!!
Ксаш3д, КсашНТ, Ксаш ХТ, теперь вот ещё параноя эта...
Сделайте один хороший движок, и пусть люди пользуются полным набором ништяков, зачем так-то?
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Для того чтобы сохранить коллизию в кэш, нужно очевидно построить её в локальном пространстве. Нет,ну в глобальном тоже можно конечно, но тогда на каждую модель на карте придется завести свою собственную копию и хранить эту копию применительно к карте. Я поначалу решил не усложнять и так сделал. Тут же выяснилось, что сдампленная коллизия для той же спонзы занимает почти 50 мегабайт. Я прикинул, что для всей паранои только кэш коллизии займет порядка гигабайта, т.е. сопоставимо с самой игрой и отказался от этой стрёмной затеи. Очевидно надо сохранять коллизию для нулевой позиции\углов и с еденичным скейлом, а трансформировать саму трассу, ну как это вообщем-то делается и для бсп. И тут нас подстерегает очевидная проблема - трансформировать начало и конец трассы проблемы не представляет. А вот как трансформировать ббокс в локальное пространство модели? Точнее говоря, трансформация ббокса тоже не представляет какой-то сложности, но после этой трансформации, если угол не был равен 90, выровненный по осям AABB, естественно увеличится в размерах. Меня такое положение дел не устраивало. Альтернатива - представить наш ббокс игрока в виде 8 точек, но это ведёт к усложнению трасы, тогда нам придётся проверять еще и рёбра. Фактически мы уже имеем дело с частным случаем трассы из дуум3, когда один объект трейсится другим, пусть даже в качестве второго всегда выступает ббокс. Т.е. мне пришлось бы переписывать всю трассу и меня этот вариант не устроил тоже. Тогда я подумал механизм акселерации в качестве 8 оффсетов для сигнбитов плоскости - это ведь фактически и есть наши 8 точек ббокса и я могу его развернуть в эти точки, а дальше использовать их. Логично жеж? Но я не учёл один важный момент. После того как я разверну ббокс, точки поменяют свою полярность, а стало быть изменится и порядок их расположения для выбранных сигнбитов. Как же отсортировать их правильно? На первый взгляд задача решения не имеет. Но мне пришла в голову оригинальная мысль. Для исходного ббокса мы просто меняем mins-maxs местами и набираем наши 8 оффсетов. Стало быть, мы можем инвертировать нашу трансформированную точку ббокса и скормить её функции SignbitsForNormal. Может показаться что это полная бредятина, функция ведь для нормалей, а мы ей даём на вход вертекс. Однако это будет работать и вот почему - во первых наш ббокс без смещения, он локальный даже после поворота. Во вторых он симметричный и отцентрированный. При соблюдении двух этих условий получается что каждая из 8 точек даёт уникальную комбинацию signbits и наши оффсеты сортируются именно в том порядке, в котором и требует наш код коллизии.
Приведу сам код коллизии, чтобы было понятнее о чём речь
C++ Source Code:
1
// adjust the plane distance apropriately for mins/maxs
Дядя Миша
Чисто доя справки: коллизия для моделей на карте рассчитывается по хитбоксам или по вертексам? Дело в том, что я в силу специфики своих изысканий повидал достаточно моделей, тех жп, к примеру, деревьев, где на всю модель один прямоугольный хитбокс. И в случае рассчета коллизии по хитбоксам, игрок к стволу такого дерева даже на пару метров не приблизится, а остановится "об воздух". Ну и прожектайл или пуля, соответственно, тоже.
А если же коллизия по вертексам, то нас подстерегает уже другая проблема. Те же деревья, к примеру. Где со стволом коллизия должна быть, а вот через ветки - нет. Как же оно все работает?
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Ghoul [BB] писал: Чисто доя справки: коллизия для моделей на карте рассчитывается по хитбоксам или по вертексам?
по вертексам, точная коллизия. Потом по этим моделькам можно ходить как по брашам.
Цитата:
Ghoul [BB] писал: Где со стволом коллизия должна быть, а вот через ветки - нет
а там флажок, чтобы игрок не коллидил с ветками, это настраивается.
Добавлено 30-05-2019 в 20:38:
одной рукой рулю, а другой слёзы счастья вытираю. И смех и грех вообщем. Замутил кэширование коллизии и обратил внимание на тот факт, что быстрее - не стало. Ну то есть как. Стало, но как-то незначительно.
Я ожидал что скорость загрузки увеличится вдвое-втрое, а она снизилась с 14 секунд до 9. Несеръезно. Я подумал, может быть это загрузка DDS так много времени съедает, начал профилировать - ничего подобного. Профайлер показывает, что основное время уходит на загрузку текстур из вада. Тут уж я окончательно выпал в осадок. Ну как такое возможно? И выясняется, что когда я подключил emboss-маппинг ейный фильтр применялся к текстурам абсолютно всегда, даже когда gl_emboss_scale был равен нулю. Фильтр с нулевым фактором отжирал время и не давал видимого результата. Причём заметить это было крайне непросто, ну вот скажем при загрузке паранои на одну текстуру уходило 0.07 секунды. И вот в карте 90 текстур достаточно выского разрешения, 512х512, и вот у нас уже почти 6-7 секунд просраны впустую. А всего-то надо было сделать проверку на нулевой фактор, про которую я по запаре совершенно забыл
теперь спонза грузится 2 секунды. Но можно еще быстрее.
Психопату интересно. Автор молодец за проделанную работу! BFN хорошо!
Для отложки тени только рейтрейсовые, шадовмап не будет?
Я не особо в курсе, как там работает колоизация, но разве нельзя отделить ббоксы от вертексов? И кэш вершин хранить, как рассказывалось выше, а ббоксы хранить в глобальном пространстве вместе с картой, либо рассчитывать при загрузке? Хотя если приведенный метод успешно работает, то вопросов нет.
ncuxonaT писал: Для отложки тени только рейтрейсовые, шадовмап не будет?
нет, ну почему жы. Для классических динамических лайтов с линейным радиусом затухания используются шмапы. Для мировых источников пока отменил, потом когда-нибудь сделаю. Для тестов.
Цитата:
ncuxonaT писал: Я не особо в курсе, как там работает колоизация, но разве нельзя отделить ббоксы от вертексов?
Ай ладно, я ж говорю, даже Ксер не вдуплил
Добавлено 30-05-2019 в 23:01:
ЗЫ. я там кстати еще вариант с капсулой сделал, но игрок себя ведёт как чёрт - везде без мыла пролезает, мне такое не нравится.
Ну чтож, коллизия и TBN успешно сохранены в кэш. Скорость загрузки выросла раз в пять точно. С 10-15 секунд, до 1-2. Теперь у меня остались только декали. Эти декали меня преследуют с 16-го года, я задумал сделать поддержку декалей с альфа-каналом и всё до сих пор никак не соберусь.
Точнее говоря, их же освещать надо. Ну и код декалей на брашах надо отревизить, оно подвисло в каком-то полурабочем состоянии. Впрочем это не займет много времени, полагаю, т.к. б0льшая часть работы уже проделана. Когда декали будут готовы (1-2 дня), начнётся, товарищи самое интересное. Я начну отладку всего кода на прохождении паранои. По итогам этого тестирования и исправления ошибок, я наконец-то выложу первую публичную альфа-версию паранои 1.51, которую я вам обещаю с 2016-го года
Ну обещанного три года ждут, так что тут всё совпадает. Сколько времени займёт само тестирование я точно сказать не могу. Может и полдня, а может и на неделю растянется. Ну вроде как серъезных ошибок быть не должно.