UnrealKaraulov / newbspguy

Goldsrc map viewer/editor without decompiling. Also can view .MDL models.
The Unlicense
69 stars 14 forks source link

Broken Pitch rendering #36

Closed Qwertyus3D closed 2 years ago

Qwertyus3D commented 2 years ago

Программа некорректно отрисовывает angles. А именно, поворот по Pitch не учитывает значения Yaw. Независимо от поворота по Yaw Pitch всегда наклоняет энтить в одном направлении. Т. е., например, при Yaw 90 поворот по Pitch визуально суммируется со значением Roll (т. е. как бы тоже крутит по оси Roll). При Yaw 180 поворот по Pitch наклоняет объект в противоположном направлении относительно правильного. При Yaw 270 значение Pitch визуально вычитается из значения Roll (т. е. как бы крутит по той же оси, но в противоположном направлении). Т. е. только когда Yaw = 0, тогда поворот по Pitch корректный.

Qwertyus3D commented 2 years ago

func_door не поддерживает angles

Формально - нет, а на деле - да. func_door и func_button - это практически одинаковые энтити. В них angles поддерживается, но задаёт не расположение энтити, а направление смещения после активации.

Qwertyus3D commented 2 years ago

как на счет infoplayer

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

Qwertyus3D commented 2 years ago

Ну, в общем, я пробежался по разным типам энтить. Брашевые, которые поддерживают angles (и infoplayer), соответствуют в редакторе и игре. Студиомодели - инвертированы. Остальные энтити можно оставить, как есть, т. к., если честно, у многих их них angles даже если прописаны в FGD, то по факту не делают ничего, либо работает только Yaw, и всё. Либо сложно проверять (да и большой потребности трогать их вроде нет). Допустим, освещение же не поменяется на карте, если энтить отредактировать. Поэтому предлагаю инверсию сделать для тех энтить, которые относятся к студиомоделям. Т. е. monster, weapon, ammo, item, xen, weaponbox, worlditems, cycler.

Qwertyus3D commented 2 years ago

Небольшая ошибочка, weapon_ поддерживает только Yaw (т. е. angle, а не angles).

UnrealKaraulov commented 2 years ago

@Qwertyus3D мне кажется если в fgd прописано studio, это не значит что в игре тоже будет так.

Может я сделаю список для этой цели в настройках и заполню его каким-то стандартным значением?

Qwertyus3D commented 2 years ago

Может я сделаю список для этой цели в настройках и заполню его каким-то стандартным значением?

Я это и предлагал выше

Есть предложение добавить опцию инверсии Pitch, подобно опциям оптимизации.

Только было бы неплохо фильтр по маске сделать. С поддержкой *. Допустим, monster_* - любой монстр, или *item* - любой итем или worlditems, а weaponbox - просто конкретная энтить.

мне кажется если в fgd прописано studio, это не значит что в игре тоже будет так.

studio в FGD обычно используется для замены простого цветного бокса моделью в тех редакторах, которые это поддерживают. Либо для указания спавна определённой модели через энтить. Т . е. никак не означает, что речь должна идти об инверсии Pitch для данной энтити.

Qwertyus3D commented 2 years ago

Либо можно окончание на "_" трактовать, как маску фильтра, если со звёздочкой проблемы. Тогда список должен быть:

ammo_
cycler
cycler_
item_
monster_
weaponbox
worlditems
xen_
UnrealKaraulov commented 2 years ago

@Qwertyus3D дай прояснить

Во всех моделях идет ROLL YAW PITCH, а в указанных PITCH YAW ROLL ?

Или у всех моделях " ROLL YAW PITCH " а у указанных " -ROLL YAW PITCH "

Qwertyus3D commented 2 years ago

Во всех моделях идет PITCH YAW ROLL, а в указанных -PITCH YAW ROLL :D

UnrealKaraulov commented 2 years ago

@Qwertyus3D

image

https://user-images.githubusercontent.com/88730285/204123951-b7ab21e7-1b57-4e08-b83d-83b8afaa8c80.mp4

https://user-images.githubusercontent.com/88730285/204123952-943e9c53-d451-48f8-926f-24c50788865b.mp4

https://user-images.githubusercontent.com/88730285/204123953-491bc460-6137-454f-86fd-1cef906b5c86.mp4

Вот как углы работают для брашевой модели, именно так отображается в игре. Кто-то кого-то обманывает :(

UnrealKaraulov commented 2 years ago

@Qwertyus3D ааа, или это обман зрения из-за того что стрелка расположена не по той оси? :)

Qwertyus3D commented 2 years ago

Именно!

UnrealKaraulov commented 2 years ago

@Qwertyus3D да все кажется дошло, а то я все по ней смотрел)

UnrealKaraulov commented 2 years ago

@Qwertyus3D https://github.com/UnrealKaraulov/newbspguy/commit/de3df90ebe43d602301713aa30172f70235b7c9c

пока еще настройку списка не добавил, проверить буде работать или нет

Qwertyus3D commented 2 years ago

Бинарник не скомпилился...

Qwertyus3D commented 2 years ago

C env_sprite вообще засада, т. к. там спрайты в нём по-разному ведут себя в зависимости от рендермода и типа спрайта. Но для спрайтов, чётко ориентированных в пространстве, тоже актуальна инверсия по Pitch. Но в других случаях поворот может не происходить, либо углы, указанные в трёх значениях, могут суммироваться друг с другом, а вращение будет строго вокруг одной оси. Вот тут подробнее разбирается: https://the303.org/tutorials/gold_sprite.htm Но всю схему будет сложно реализовать в редакторе :D

Qwertyus3D commented 2 years ago

Через env_sprite тоже можно вставлять модели, но:

  1. Pitch инвертирован, если менять его в отдельности.
  2. Pitch, Yaw и Roll крутят модель, взаимодействуя друг с другом, причём алгоритм вообще какой-то заумный. Например, чтобы модель повернулась к тебе спиной, нужно не значение 0 180 0 задать, а 180 0 180.
Qwertyus3D commented 2 years ago

Хотя, кстати, редактор воспроизводит для env_sprite именно указанное поведение, только Pitch не инвертирован.

UnrealKaraulov commented 2 years ago

Хотя, кстати, редактор воспроизводит для env_sprite именно указанное поведение, только Pitch не инвертирован.

так я делал поддержку там все просто было, может быть только pitch забыл инвертировать

UnrealKaraulov commented 2 years ago

https://github.com/UnrealKaraulov/newbspguy/actions/runs/3558434229

UnrealKaraulov commented 2 years ago

работает?

Qwertyus3D commented 2 years ago

Теперь что-то не то с поворотом модели. Yaw неправильно модель вращает. Нужно смотреть на направляющую, которая из энтити выходит. Она теперь вообще себя ведёт неадекватно.

Qwertyus3D commented 2 years ago

Убрал из настроек негативный питч, Yaw всё равно модель как-то некорректно разворачивает.

Было: barold

Стало: barnew

Qwertyus3D commented 2 years ago

Было: sciold Здесь неправильно только, что направляющая смотрит вверх, должна смотреть вниз.

Стало: scinew

Qwertyus3D commented 2 years ago

Fix pitch list bug Судя по всему, заработало 👍

UnrealKaraulov commented 2 years ago

@Qwertyus3D отлично :)

тогда закрываю)))