crypt of decay - October 1st, 2018 [entries|archive|friends|userinfo]
ketmar

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

October 1st, 2018

vavoom, рендер [Oct. 1st, 2018|08:31 am]
там, короче, плохо абсолютно всё. кроме того, конечно, что хорошо — а хорошо там почти всё.

а если серьёзно, то он был написан во времена одноядерных процессоров и OpenGL 1. поэтому на карте типа planisphere2, если смотреть вдоль улицы, то ~30 миллисекунд уходит на апдейт секторов (текстуры, высоты, всё вот это), а из оставшегося времени (осталось ~100 мсек — да, вот такой вот FPS) — две трети на бесполезную выборку примерно сорока тысяч сурфэйсов, и треть на то, чтобы затоссить их в GPU. это около ста тысяч вертексов всего.

естественно, по чистой логике — современный GPU должен всё это отрендерить быстрее чем фурри ебутся. но… OpenGL 1. он там был до тех пор, пока я не форкнул. а в то время даже display lists были медленные — и их в рендере нет.

в общем, оно ходит по BSP, чтобы собрать мешок сурфэйсов для рендера, потом снова проходит по этому огромному списку чтобы отрендерить (не забывая нежно засылать каждый ценный вертекс в GPU заново). я сильно подозреваю, что на современных GPU намного быстрее было бы даже если бы рендер забил на это всё, просто захерачил в GPU каждый сектор, а потом просто рисовал уровень посекторно одной командой. на этом всём ужосе я выиграл пару FPS просто девиртуализировав вызов `SetTexture()` — жуть.

не поймите меня неверно: рендер хороший. он делает вполне неплохой beam clipping, и нормально справляется с ~3000-7000 сурфэйсов, чего вполне достаточно для большинства нормальных уровней. на то время (>10 лет назад) этого было достаточно, да и других методов особо не существовало (consumer GPUs и сейчас сосают, а тогда вообще турбопылесосили). при этом там даже потенциально есть раздельный рендер пола/потолка и стен (на горизонтальных поверхностях текстуры меняются реже, например).

в общем, починить это невозможно, это надо переписывать с учётом современных реалий. во-первых, агрессивно кэшировать данные секторов на GPU. во-вторых, перепахать весь код, чтобы сектора, требующие обновлений, сразу собирались в отдельный список, а не сканить их по BSP на каждом кадре (да, апдейтер делает BSP scan, обновляя только потенциально видимые сектора — на то время, опять же, это было удобней и дешевле). а в третьих, я вообще не уверен, что имеет смысл заморачиваться с BSP sorting. есть подозрение, что простой рейкастер по блокмапу и лучше параллелится, и проще писать.

ну, то есть, тупо разбить view frustum на части, запустить в каждой по потоку с trace line (точнее, trace beam), отмечать каждый субсектор, попадающий в cell, как «рендерировай», а заодно использовать его для генерации cell coverage. всё равно преимущества zero overdraw от BSP не используются.

если кто не понял, почему planisphere2 так плохо: там у домов нет top texture. а клиппер умеет отмечать только полностью перекрытые вертикальные регионы. в итоге взгляд вдоль улицы рендерит абсолютно все дома, попавшие в FoV — хотя большинство из них и закрыты другими. даже если сделать вертикальное отсечение — это поможет мало, потому что карта сама по себе двухмерная, и BSP тоже. поэтому время на скан дерева (которое две трети кадра отъедает, напомню) всё равно никуда не денется. ну, станет вместо восьми FPS каких-нибудь десять-двенадцать. маргинальное улучшение — и куча бесполезного кода.

можно, конечно, читернуть, и отпрепроцессить карту, прибив небо над высокими домами в top texture, гвоздиками: всё равно при нормальной игре туда залезть нельзя. поможет, правда, несильно, и только для карт этого специального вида.

в общем, рендер надо делать заново, весь. к сожалению, у меня на это нет сил. разве что когда-нибудь марсианцы пошлют денег на нормальное питание, и на таблетки от головной боли — чтобы голова болела пореже, и код можно было делать почаще.

и про kdizd )
Link10 meows|meow!

очередной дебил [Oct. 1st, 2018|03:03 pm]
суёт пальцы в розетку. потому что купил себе технику с 5.1 саундкартой, а к ней две колонки-перделки. настроить же даунмикс в стерео — неа, никак. поэтому «обычные» эффекты и разговор он нихуя не слышит, и добавляет громкости. после чего получает по ушам «объёмным» эффектом, который звучит громко по всем каналам. но виноват, конечно, не дегенерат, который не желает посмотреть в настройки, а авторы звуков и софта, резонно предполагающие, что если у человека поставлен звук 5.1 — то он и хочет 5.1, а не стерео.

p.s.: больше тысячи лайков к этому говну говорит нам о том, что фильм «идиократия» — дохуя оптимистический.
Link13 meows|meow!

воплощают Розова в жизнь [Oct. 1st, 2018|11:06 pm]
гыг. я, конечно, не удивлён — потому что Розов в плане оффи-копошений никакой не фантаст, а бытописатель. но отчего-то всё равно забавно.
Link1 meow|meow!

navigation
[ viewing | October 1st, 2018 ]
[ go | Previous Day|Next Day ]