newbspguy
newbspguy copied to clipboard
Transformation issues
По части трансформации выявился очередной ряд проблем. Я так понимаю, Return back bsptypes and some fixes (remove compiler warns, etc) - это последний билд, на котором трансформация работает так, как это было изначально, в оригинале. Не сказать, что работает на 100%, т. к. менять форму браша можно, лишь двигая рёбра за середину. Вершины вытягивать не получается, эти изменения не сохраняются в модели. А периодически после ряда действий манипуляция перестаёт работать вообще, т. к. пропадают сами точки, за которые можно двигать грани. Но, по крайней мере, есть трансформация граней браша и рабочий Scale.
Следующий билд New feature : transform model instead of verts (Transform Widget), который я случайным образом тестировал на карте c3a1a, уже выявляет начало проблем. Я трансформировал модель *31, func_door, находящийся в конце площадки напротив танка вверху. При тестировании объекта на работоспособность после трансформации получил вылет игры с ошибкой
Карта крашнулась через некоторое время после того, как танк пострелял по трансформированному брашу, за которым я находился. На предыдущей версии такого не произошло.
Далее, с билда New transform logic! Now do backup every drag! нельзя видеть результат трансформации и перемещения вживую, что не только неудобно, но и позволяет, не видя, что именно ты делаешь, выворачивать браш наизнанку. После чего в игре он теряет функциональность. Как бы не баг, но проблема присутствует.
С билда Now can open multiple maps начинаются вылеты при попытке Duplicate BSP model, которые исправлены в билде fix duplicate model crash, НО Scale в этом билде уже не работает, крестовина есть, но стороны не двигаются.
И наконец, с Update BspRenderer.h и в текущих билдах трансформация уже не работает совсем, нельзя ни менять Scale, ни двигать грани браша. Честно говоря, реально задолбался искать всё это...
спасибо за багрепорт, хоть кто-то пытается пользоваться этой программой :), надо будет вместо добавления функционала заняться всеми этими проблемам
Следующий билд New feature : transform model instead of verts (Transform Widget), который я случайным образом тестировал на карте c3a1a, уже выявляет начало проблем. Я трансформировал модель *31, func_door, находящийся в конце площадки напротив танка вверху. При тестировании объекта на работоспособность после трансформации получил вылет игры с ошибкой
А это могло случится если дверь просто бесконечно чего-то касалась? срабатывало действие столкновение, и отправлялось клиенту бесконечно и вызывало перегрузку канала?
Ну, в теории, наверное, возможно. Я не шарю в тонкостях работы сетевого протокола ХЛ :) . Можно потестить.
как в последнем билде с Transformation? я ещё не доконца исправил, но вроде как размер можно поменять, но потом если выбрать другой объект, то опять ломаются ) завтра буду решать проблему
закончу с багами и тогда займусь уже дополнениями, думаю могу попытаться добавить рендер декалей и может быть спрайтов,а вот рендер моделек MDL врядли сам сделаю, еще виджет текстур планирую добавить.(ну там внутренние и Вад текстуры предпросмотр и поиск)
@Qwertyus3D ну что теперь все работает как раньше в Transformation?
редактируются вершины и т.п ?
Во-первых,
- Проблем с тормозами вроде больше нет. Даже лучше стало, чем в старых билдах.
- Браши создаются без вылетов.
- НО всё ещё падает нативный импорт БСП.
Кубик отекстурен немного не так.
Было: Ось со стороны X+ (сиреневая направляющая, лево): -0 / 0. X- (право): -180 / 0. Y+ (синяя направляющая, спереди): 0 / 0. Y-: (сзади) -180 / 0. Z+ (зелёная направляющая, верх): -0 / 0. Z- (низ): -0 / 180.
Я предлагал: Ось со стороны X+ (сиреневая направляющая, лево): -0 / 180. X- (право): 180 / 180. Y+ (синяя направляющая, спереди): 180 / 180. Y-: (сзади) 0 / -180. Z+ (зелёная направляющая, верх): 180 / -0. Z- (низ): 180 / 180.
Получилось: Ось со стороны X+ (сиреневая направляющая, лево): -180 / 180 (текстура зеркально отражена). X- (право): -0 / 180 (текстура зеркально отражена). Y+ (синяя направляющая, спереди): 180 / 180 (совпало). Y-: (сзади) -0 / 180 (отличаются + и - , но текстура легла правильно). Z+ (зелёная направляющая, верх): -0 / 0 (текстура зеркально отражена). Z- (низ): -0 / 180 (текстура зеркально отражена и перевёрнута).
По части трансформации. Scale работает, претензий вроде нет. Манипулирование вершинами (вытягивание за углы, белые точки) не работает, но оно не работало и раньше. Манипулирование рёбрами (т. е. перемещение грани за середину, оранжевые точки) работает, но частично / с глюками.
- Любую грань можно двигать на себя / от себя, либо вверх / вниз. Вбок грани двигать нельзя. Точнее, грань вбок двигается, но не фиксируется в изменённом положении.
- Если пытаешься сделать одно перемещение грани за другим, то в какой-то момент браш перестаёт поддаваться изменениям. Двигать можно, но изменения не сохраняются. При этом иногда точки, за которые двигается грань, иногда "зависают" в том положении, куда ты их сдвинул, но сама грань возвращается назад. И далее уже идёт рассинхрон. За точки можно двигать, но они находятся в стороне от грани.
- Также после этого браш вообще может перестать выделяться, т. е. точки манипуляции не появляются.
- Также после этого крестовина перемещения браша смещается куда-то далеко в сторону.
- А Scale трансформированной модели вообще жёстко глючит и растягивает её в непонятно что.
Манипулирование вершинами (вытягивание за углы, белые точки) не работает, но оно не работало и раньше.
Я так понял можно двигать, только выделить несколько, это выдает ошибка solid и откатывает изменения обратно. Пишет у грани нет двух фейсов или как-то так, фиг поймешь :)
Ну, короче, двигать можно, только когда 2 или 4 угла выделены. А вбок не двигается, т. к. это ломает боковые грани.
Тогда проблема остаётся только с тем, что иногда "органы управления" отключаются совсем, или сбиваются и сдвигаются в сторону от рёбер.
Я сейчас посмотрел, похоже, что в результате манипуляций мне удалось-таки сделать браш с изогнутыми гранями. Наверное, поэтому его потом жёстко плющит, когда ещё и Scale пытаюсь на нём сделать. И крестовина перемещения у него сдвинута.
Такое вот.
Я смотрю, у меня попропадали ещё настройки инверсии питча для энтить. Пока тут крутил версии туда-сюда, видимо, настройки потёрлись из конфига. А в меню настроить нужные энтити нельзя, и я уже забыл, как их надо прописывать в конфиг.
Нашёл в единственном из старых конфигов настройки.
negative_pitch_ents=ammo_
negative_pitch_ents=cycler
negative_pitch_ents=item_
negative_pitch_ents=monster_
negative_pitch_ents=weaponbox
negative_pitch_ents=worlditems
negative_pitch_ents=xen_
Только похоже, они больше не учитываются редактором... Он их просто затирает, как ненужные.
@Qwertyus3D спасибо за инфу посмотрю
Сегодня днём постараюсь разобраться с последними багами, потом займусь улучшениями
@Qwertyus3D исправил в последнем билде сохранение этих настроек (точнее загрузка, кудато пропала)
@Qwertyus3D почти полностью исправил логику работу перемещений вершин.
Осталась одна проблема, если после перемещения, модель считается сломанной - происходит рассинхрон вершин и модели. Похоже проблема где-то очень близко, но я что-то найти не могу :)
Питч исправился, но настройки пришлось вручную добавить. И всё ещё крашится импорт...
Последний билд крашится Вызвано исключение: нарушение доступа для чтения. _Scary было 0x70.
> bspguy.exe!std::_Tree<std::_Tmap_traits<std::string,FgdClass *,std::less<std::string>,std::allocator<std::pair<std::string const ,FgdClass *>>,0>>::_Find_lower_bound<std::string>(const std::string & _Keyval) Строка 1611 C++
bspguy.exe!std::_Tree<std::_Tmap_traits<std::string,FgdClass *,std::less<std::string>,std::allocator<std::pair<std::string const ,FgdClass *>>,0>>::_Find<std::string>(const std::string & _Keyval) Строка 1368 C++
bspguy.exe!std::_Tree<std::_Tmap_traits<std::string,FgdClass *,std::less<std::string>,std::allocator<std::pair<std::string const ,FgdClass *>>,0>>::find(const std::string & _Keyval) Строка 1377 C++
bspguy.exe!Fgd::getFgdClass(const std::string & cname) Строка 33 C++
bspguy.exe!Gui::drawEntityReport() Строка 5428 C++
bspguy.exe!Gui::draw() Строка 167 C++
bspguy.exe!Renderer::renderLoop() Строка 1134 C++
bspguy.exe!start_viewer(const char * map) Строка 129 C++
bspguy.exe!main(int argc, char * * argv) Строка 951 C++
[Внешний код]
@Qwertyus3D исправил импорт , и в последнем патче исправил этот краш
Вызвано исключение: нарушение доступа для чтения.
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits
> bspguy.exe!std::_Tree<std::_Tmap_traits<std::string,FgdClass *,std::less<std::string>,std::allocator<std::pair<std::string const ,FgdClass *>>,0>>::size() Строка 1193 C++
bspguy.exe!Fgd::getFgdClass(const std::string & cname) Строка 33 C++
bspguy.exe!Gui::drawEntityReport() Строка 5427 C++
bspguy.exe!Gui::draw() Строка 167 C++
bspguy.exe!Renderer::renderLoop() Строка 1134 C++
bspguy.exe!start_viewer(const char * map) Строка 129 C++
bspguy.exe!main(int argc, char * * argv) Строка 951 C++
[Внешний код]
@Qwertyus3D понял кажется где ошибка, когда fgd вообще не загружены и открыто окно, сейчас исправил думаю 100% :)
Сейчас заработало.
Другой вопрос теперь. В последних билдах повсеместно отображается подпись INVALID SOLID. На точечных энтитях, на ворлдспавне, на некоторых сложных брашевых энтитях. Я так понял, просто на всём, что не поддаётся трансформации.
И кубик бы допилить https://github.com/UnrealKaraulov/newbspguy/issues/49#issuecomment-1353303487
Вообще, круто, на самом деле. Наконец-то появился билд, который можно использовать в работе без каких-либо костылей и откатов к старым версиям, поздравляю! С этого момента можно вести новый отсчёт. Чуток осталось допилить только текущие нововведения.
Пока не закрываю, вижу проявляются странные баги все еще, если неправильная модель после трансформации, иногда возвращается не к предыдущему виду, а к самому исходному и слетает управление вершинами (точнее рассинхрон какой-то, причем сохраняется в карте даже после рестарта)
С точки зрения пользователя, я бы не показывал INVALID SOLID на тех объектах, с которыми всё в порядке. И вообще, двигать-то теперь практически всё можно, получается, нельзя только трансформировать (масштабировать, что тоже частный случай трансформации). Поэтому, может, INVALID SOLID оставить для действительно неправильных объектов, чтобы было ясно, что с объектом что-то не то. А для остальных показывать CAN'T TRANSFORM (или CAN'T SCALE), в тех случаях, когда выбран соответствующий режим. А когда просто крестовина перемещения, то можно не выводить сообщение.
@Qwertyus3D ну INVALID я убрал не должно уже быть
Любой составной объект считается INVALID SOLID.
Ну, пока что без изменений, даже куст, сделанный из двух скрещённых брашей, по-прежнему INVALID SOLID.
Вопрос был в том, чтобы давать вместо INVALID SOLID сообщение о том, что с объектом нельзя сделать. Например, CAN'T TRANSFORM (если объект выделен и выбран режим трансформации). А INVALID SOLID выводить в том случае, когда объект деформирован и может вызвать проблемы при сохранении карты. Ну или ещё что-то не то с ним. Допустим, в процессе трансформации внутренние грани наружу вывернулись, изогнулись. В общем, какая-то шляпа, которая при обращении к данной энтите может привести к ошибкам в игре. Если, конечно, возможно это задиагностировать.
По части трансформации, кстати, есть проблема с неотекстуренными браш-моделями. Можно посмотреть, к примеру, на картах Enriched, где всякие триггеры и т. д. в целях оптимизации неотекстурены. А вообще, такая оптимизация типична для карт, созданных в Джеке, насколько я понял. В общем, допустим, у нас есть trigger_once такой, в виде прозрачного куба. И обычно, чтобы трансформировать модель, мы должны сделать Duplicate BSP model. Тогда у неё появляются курсоры для вытягивания. Но в случае с неотекстуренными моделями баг в том, что курсор трансформации на них не появляется, совсем.