newbspguy icon indicating copy to clipboard operation
newbspguy copied to clipboard

Transformation issues

Open Qwertyus3D opened this issue 2 years ago • 41 comments

По части трансформации выявился очередной ряд проблем. Я так понимаю, 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, находящийся в конце площадки напротив танка вверху. При тестировании объекта на работоспособность после трансформации получил вылет игры с ошибкой FatSD Карта крашнулась через некоторое время после того, как танк пострелял по трансформированному брашу, за которым я находился. На предыдущей версии такого не произошло.

Далее, с билда 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, ни двигать грани браша. Честно говоря, реально задолбался искать всё это...

Qwertyus3D avatar Dec 12 '22 09:12 Qwertyus3D

спасибо за багрепорт, хоть кто-то пытается пользоваться этой программой :), надо будет вместо добавления функционала заняться всеми этими проблемам

UnrealKaraulov avatar Dec 12 '22 14:12 UnrealKaraulov

Следующий билд New feature : transform model instead of verts (Transform Widget), который я случайным образом тестировал на карте c3a1a, уже выявляет начало проблем. Я трансформировал модель *31, func_door, находящийся в конце площадки напротив танка вверху. При тестировании объекта на работоспособность после трансформации получил вылет игры с ошибкой

А это могло случится если дверь просто бесконечно чего-то касалась? срабатывало действие столкновение, и отправлялось клиенту бесконечно и вызывало перегрузку канала?

UnrealKaraulov avatar Dec 14 '22 06:12 UnrealKaraulov

Ну, в теории, наверное, возможно. Я не шарю в тонкостях работы сетевого протокола ХЛ :) . Можно потестить.

Qwertyus3D avatar Dec 14 '22 16:12 Qwertyus3D

как в последнем билде с Transformation? я ещё не доконца исправил, но вроде как размер можно поменять, но потом если выбрать другой объект, то опять ломаются ) завтра буду решать проблему

закончу с багами и тогда займусь уже дополнениями, думаю могу попытаться добавить рендер декалей и может быть спрайтов,а вот рендер моделек MDL врядли сам сделаю, еще виджет текстур планирую добавить.(ну там внутренние и Вад текстуры предпросмотр и поиск)

UnrealKaraulov avatar Dec 14 '22 18:12 UnrealKaraulov

@Qwertyus3D ну что теперь все работает как раньше в Transformation?

редактируются вершины и т.п ?

UnrealKaraulov avatar Dec 15 '22 09:12 UnrealKaraulov

Во-первых,

  • Проблем с тормозами вроде больше нет. Даже лучше стало, чем в старых билдах.
  • Браши создаются без вылетов.
  • НО всё ещё падает нативный импорт БСП.

Кубик отекстурен немного не так.

Было: Ось со стороны 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 трансформированной модели вообще жёстко глючит и растягивает её в непонятно что.

Qwertyus3D avatar Dec 15 '22 15:12 Qwertyus3D

Манипулирование вершинами (вытягивание за углы, белые точки) не работает, но оно не работало и раньше.

Я так понял можно двигать, только выделить несколько, это выдает ошибка solid и откатывает изменения обратно. Пишет у грани нет двух фейсов или как-то так, фиг поймешь :)

UnrealKaraulov avatar Dec 15 '22 17:12 UnrealKaraulov

Ну, короче, двигать можно, только когда 2 или 4 угла выделены. А вбок не двигается, т. к. это ломает боковые грани.

Qwertyus3D avatar Dec 15 '22 17:12 Qwertyus3D

Тогда проблема остаётся только с тем, что иногда "органы управления" отключаются совсем, или сбиваются и сдвигаются в сторону от рёбер.

Qwertyus3D avatar Dec 15 '22 17:12 Qwertyus3D

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

Qwertyus3D avatar Dec 15 '22 17:12 Qwertyus3D

deform Такое вот.

Qwertyus3D avatar Dec 15 '22 18:12 Qwertyus3D

Я смотрю, у меня попропадали ещё настройки инверсии питча для энтить. Пока тут крутил версии туда-сюда, видимо, настройки потёрлись из конфига. А в меню настроить нужные энтити нельзя, и я уже забыл, как их надо прописывать в конфиг.

Нашёл в единственном из старых конфигов настройки.

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 avatar Dec 16 '22 21:12 Qwertyus3D

@Qwertyus3D спасибо за инфу посмотрю

UnrealKaraulov avatar Dec 17 '22 05:12 UnrealKaraulov

Сегодня днём постараюсь разобраться с последними багами, потом займусь улучшениями

UnrealKaraulov avatar Dec 18 '22 01:12 UnrealKaraulov

@Qwertyus3D исправил в последнем билде сохранение этих настроек (точнее загрузка, кудато пропала)

UnrealKaraulov avatar Dec 18 '22 09:12 UnrealKaraulov

@Qwertyus3D почти полностью исправил логику работу перемещений вершин.

Осталась одна проблема, если после перемещения, модель считается сломанной - происходит рассинхрон вершин и модели. Похоже проблема где-то очень близко, но я что-то найти не могу :)

UnrealKaraulov avatar Dec 18 '22 09:12 UnrealKaraulov

Питч исправился, но настройки пришлось вручную добавить. И всё ещё крашится импорт...

Qwertyus3D avatar Dec 18 '22 09:12 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 avatar Dec 18 '22 11:12 Qwertyus3D

@Qwertyus3D исправил импорт , и в последнем патче исправил этот краш

UnrealKaraulov avatar Dec 18 '22 11:12 UnrealKaraulov

Вызвано исключение: нарушение доступа для чтения. std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits,std::allocator >,FgdClass * __ptr64,std::less<std::basic_string<char,std::char_traits,std::allocator > >,std::allocator<std::pair<std::basic_string<char,std::char_traits,std::allocator > const ,FgdClass * __ptr64> >,0> >::_Get_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>>::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 avatar Dec 18 '22 11:12 Qwertyus3D

@Qwertyus3D понял кажется где ошибка, когда fgd вообще не загружены и открыто окно, сейчас исправил думаю 100% :)

UnrealKaraulov avatar Dec 18 '22 11:12 UnrealKaraulov

Сейчас заработало.

Другой вопрос теперь. В последних билдах повсеместно отображается подпись INVALID SOLID. На точечных энтитях, на ворлдспавне, на некоторых сложных брашевых энтитях. Я так понял, просто на всём, что не поддаётся трансформации.

И кубик бы допилить https://github.com/UnrealKaraulov/newbspguy/issues/49#issuecomment-1353303487

Qwertyus3D avatar Dec 18 '22 12:12 Qwertyus3D

Вообще, круто, на самом деле. Наконец-то появился билд, который можно использовать в работе без каких-либо костылей и откатов к старым версиям, поздравляю! С этого момента можно вести новый отсчёт. Чуток осталось допилить только текущие нововведения.

Qwertyus3D avatar Dec 18 '22 12:12 Qwertyus3D

Пока не закрываю, вижу проявляются странные баги все еще, если неправильная модель после трансформации, иногда возвращается не к предыдущему виду, а к самому исходному и слетает управление вершинами (точнее рассинхрон какой-то, причем сохраняется в карте даже после рестарта)

UnrealKaraulov avatar Dec 18 '22 15:12 UnrealKaraulov

С точки зрения пользователя, я бы не показывал INVALID SOLID на тех объектах, с которыми всё в порядке. И вообще, двигать-то теперь практически всё можно, получается, нельзя только трансформировать (масштабировать, что тоже частный случай трансформации). Поэтому, может, INVALID SOLID оставить для действительно неправильных объектов, чтобы было ясно, что с объектом что-то не то. А для остальных показывать CAN'T TRANSFORM (или CAN'T SCALE), в тех случаях, когда выбран соответствующий режим. А когда просто крестовина перемещения, то можно не выводить сообщение.

Qwertyus3D avatar Dec 18 '22 16:12 Qwertyus3D

@Qwertyus3D ну INVALID я убрал не должно уже быть

UnrealKaraulov avatar Dec 19 '22 12:12 UnrealKaraulov

invsol Любой составной объект считается INVALID SOLID.

Qwertyus3D avatar Dec 19 '22 13:12 Qwertyus3D

Ну, пока что без изменений, даже куст, сделанный из двух скрещённых брашей, по-прежнему INVALID SOLID.

Qwertyus3D avatar Dec 03 '23 23:12 Qwertyus3D

Вопрос был в том, чтобы давать вместо INVALID SOLID сообщение о том, что с объектом нельзя сделать. Например, CAN'T TRANSFORM (если объект выделен и выбран режим трансформации). А INVALID SOLID выводить в том случае, когда объект деформирован и может вызвать проблемы при сохранении карты. Ну или ещё что-то не то с ним. Допустим, в процессе трансформации внутренние грани наружу вывернулись, изогнулись. В общем, какая-то шляпа, которая при обращении к данной энтите может привести к ошибкам в игре. Если, конечно, возможно это задиагностировать.

Qwertyus3D avatar Dec 04 '23 00:12 Qwertyus3D

По части трансформации, кстати, есть проблема с неотекстуренными браш-моделями. Можно посмотреть, к примеру, на картах Enriched, где всякие триггеры и т. д. в целях оптимизации неотекстурены. А вообще, такая оптимизация типична для карт, созданных в Джеке, насколько я понял. В общем, допустим, у нас есть trigger_once такой, в виде прозрачного куба. И обычно, чтобы трансформировать модель, мы должны сделать Duplicate BSP model. Тогда у неё появляются курсоры для вытягивания. Но в случае с неотекстуренными моделями баг в том, что курсор трансформации на них не появляется, совсем.

Qwertyus3D avatar Dec 04 '23 00:12 Qwertyus3D