Очевидно проблема в том, что надувание геометрии - нетривиальная задача, нельзя её просто домножить на размер хулла. Если делать это втупую, то вот как раз такие загадочные уступы и полезут в неаксиальных местах. Это никоим образом не является проблемой хуллов, просто неграмотный подход к их созданию.
Я так понимаю надувается даже не конечный хулл карты получаемый после всех разбиений и отсечений невидимых граней, а именно сырые браши которые маппер сделал в карте? Иначе как объяснить что в пресловутом туннеле https://i.redd.it/0w89ko0d5b501.png хулл выглядит как будто его дополнительно растянули, и даже видно его задние грани которые смотрят в пустоту? Т.е. если бы этот поворот был сделан не пересечением пары длинных тонких брашей, а одним большим, скошенным брашем, то проблемы бы не возникло? Если это так, то должно быть в учебниках.
Проблема возникает именно от некорректного надувания. Аналог задачи - надувание Glow Shell вокруг модельки, чтобы не было швов и разрывов. Это ведь тоже не так просто сделать. Первая логичная мысль, приходящая в голову - расширить браш по направлению нормали в каждую сторону. Но это работает только для конвексной еденичной модели. В идеальном случае - когда вся карта из аксиальных брашей. Китаец по этому поводу даже камент оставил
// old code multiplied offset by normal -- this led to post-csg "sticky" walls where a
// slope met an axial plane from the next brush since the offset from the slope would be less
// than the full offset for the axial plane -- the discontinuity also contributes to increased
// clipnodes. If the normal is zero along an axis, shifting the origin in that direction won't
// change the plane number, so I don't explicitly test that case. The old method is still used if
// preciseclip is turned off to allow backward compatability -- some of the improperly beveled edges
// grow using the new origins, and might cause additional problems.
Сам китаец не доверял простому увеличению и использовал трёхпроходный метод, который ближе к оригинальному коду Кармака, нежели Вальвовскому.
Вальва там чота выкинула в конце.
Post automatically merged:
Я бы рассказал подробнее, но я не люблю копаться в задачках, которые кто-то уже решил до меня на том уровне, который меня устраивает.
Имея код из tyrquake, возможно ли сделать процесс обратный "надуванию"? т.е. чтобы клипы были размером с реальные браши? а то у многих mindfuck от того что они надутые
в том то и дело что самые интересные хуллы как раз те что надутые но анализировать их было бы легче если бы они были уменьшены на hull_size, я пробывал сам уменьшать но у меня получилась каша из полигонов
Чем лучше поиск пересечения точки и раздутой геометрии карты по сравнению с пересечением сферы/капсулы и обычной геометрии? Сильно упрощаются вычисления? Стоит ли оно того?
Ну исходные браши используются дважды - для точечного хулла (без раздувания) и для колижен хуллов (с раздуванием). Собственно, если исходные брашы не раздувать, то и получится точечный хулл. То есть твое предложение что-то вроде "а если колесо надуть, оно будет надутым".
но анализировать их было бы легче если бы они были уменьшены на hull_size
Если их попытаться "сдуть", то в самом лучшем случае они перестанут отражать реальное положение дел, а в худшем - та самая каша из полигонов.
Post automatically merged:
2 ncuxonaT: в 95-м году было актуально. Но вообще по клипхуллам очень надёжная и быстрая коллизия получается, которая не зависит от капризов таймера и плавающей точки. И для меня это главная ценность.
Post automatically merged:
Как бы объяснить. Для клипхулла вся трасса сводится к поиску положения точки в бинарном дереве. Для произвольного хулла это только половина дела - мы выходим в лиф, в котором нам надо еще протрейсить реальные браши. При том что порядок сторон трейса фактически не определён, из-за чего игрок потенциально прилипает к стенкам. В самой Quake2 это разрулили введением overbounce выше еденицы. И в ку3 точно такое же дерьмо. Убери этот овербоунс и игрок начнёт прилипать к стенкам.
Нет. Для коллизий с моделями я использую старую идею Кармака о том, что каждый полигончик можно обвернуть в шесть плоскостей. Он еще в ку3 так патчи колоизировал.