crypt of decay - vavoom [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

vavoom [Sep. 18th, 2018|12:41 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
допилил динамическое освещение в регуряр рендере: теперь нормально рэйкастит, не просвечивает сквозь стены секретов. ну, и если фаербол пизданулся в дверь с одной стороны, другая сторона двери не освещается.

нашёл мегабаг в компиляторе 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), где раньше была минута — теперь меньше секунды.
Linkmeow!