vavoom |
[Sep. 18th, 2018|12:41 pm] |
допилил динамическое освещение в регуряр рендере: теперь нормально рэйкастит, не просвечивает сквозь стены секретов. ну, и если фаербол пизданулся в дверь с одной стороны, другая сторона двери не освещается.
нашёл мегабаг в компиляторе vavoom c (который сам и вхерачил): для `ref`-аргументов, которые структуры, проверка типов проверяла ровно нихуя. поскольку я некоторый апи в vc перевёл с указателей на ref, то было пропущено несколько мест, где передавалась полная поебень. из серии: «да как оно работало вообще?!»
добавил очень грубый просчёт pvs при загрузке уровня. оно чуть-чуть помогает выкидывать ненужный динамический свет, и я планирую использовать посчитаный pvs вместо грубого reject. считает в несколько потоков, но всё равно медленно. для больших уровней типа supplydp или DooM:One должно дать вполне ощутимый выигрыш.
поскольку pvs считает долго, да и ноды я предпочитаю ребилдить при загрузке уровня заново, то сделал кэширование посчитаных данных. в первый раз долго и больно, потом будет брать из кэша. квиклоад теперь действительно квик.
поймал странный баг в glBSP: он зачем-то иногда создаёт сегменты для второй несуществующей стороны одностороннего лайндефа. вутафук? выкину его вообще, и заменю на ajbsp. я и здумовский взял бы, но он настолько обмазан всяким говнищем типа здумовских типов данных, что я ебанусь его приводить в нормальный вид. даже standalone версия уёбищна (как и всё, что родом из здума, впрочем).
надо будет, кстати, попробовать запилить ajbsp в несколько потоков: теоретически это вполне несложно, и должно дать профитов. хотя нодбилдинг и так вполне шустрый, вкупе с новым кэшэм можно один раз и подождать.
да, я в курсе про gl nodes, и про zdoom gl nodes, которые сейчас почти все прикладывают к уровням уже посчитаные. но то ли я их гружу как-то неправильно, то ли забыл что-то где-то в постобработке, но некоторые уровни с ними рендерятся неверно. поэтому надёжней тупо ребилдить.
а. и ещё кусок кода, который препроцессит уровень для более шустрого раскидывания декалей, имел сложность в районе O(n^3). ебанись, местами работало на порядок дольше, чем нодбилдер. для больших уровней могло трудиться даже больше минуты. охуел, переписал на O(n), где раньше была минута — теперь меньше секунды. |
|
|