UnrealKaraulov / newbspguy

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

Brush model import: lightmaps and texinfos broken #74

Closed Outerbeast closed 8 months ago

Outerbeast commented 10 months ago

When importing BSP model the lightmaps on the imported model are broken

Qwertyus3D commented 10 months ago

It may depend on version of BSP format you are choosing to export. Also maybe on exporting with WAD or embedded textures.

Qwertyus3D commented 10 months ago

I just tested this and yes, there is a problem with lightmaps. They're getting broken not only when you import a model, but also even if you duplicate a model. I also can't get ligthmap import feature to work, it doesn't import the earlier saved file.

The models are exported properly, they have lightmaps, as intended, so the problem is not there.

As I found, the last time lightmaps got properly fixed in this build: https://github.com/UnrealKaraulov/newbspguy/actions/runs/3786416995 But few builds later they got broken again.

Looks like significant problem fo re-fix.

Qwertyus3D commented 10 months ago

https://github.com/UnrealKaraulov/newbspguy/releases/tag/NightBuild_2022.12.27_09-14 This works properly for importing objects (but has other problems).

https://github.com/UnrealKaraulov/newbspguy/releases/tag/NightBuild_2022.12.27_09-37 And this is probably the last build which saves a map properly with properly restored lightmaps. Next build corrupts the BSP on saving, others do not restore lightmaps.

UnrealKaraulov commented 10 months ago

@Outerbeast I think model exporting works properly. Lightmap, collision (hulls) and textures saved correctly in latest version. It can be used in AMXX plugins (instead of .MDL) or directly in map using unbreakable func_breakabl flag and gibs model as precache option.

But yes, when do import model to bsp structure, it cause something in code to undefined behavior. Need some time to found and fix it.

UnrealKaraulov commented 10 months ago

@Qwertyus3D я проверил сейчас, сохранение модели, импорт/экспорт карты освещения работает без проблем, vis тоже целый, достаточно запустить VIS дебаггер в Debug окне, если VIS читается плохо, вместо отображения синих фейсов будет рандомно красным заполнятся некоторая часть или отдельные фейсы, но этого не происходит, и при экспорте BSP модели сейчас все корректно записывается. Карта освещения в Light Map Editor выглядит адекватно после экспорта.

Есть проблема только с импортом BSP модели, почему-то текстура рандомная берется из карты, хотя нужная добавляется в карту(вроде как), и полностью сломана карта освещений при импорте, набор байт. (Возможно при импорте думает что карта QUAKE, и пытается брать карту освещение из Quake Palette). Буду изучать проблему :)

Qwertyus3D commented 9 months ago

@UnrealKaraulov Есть дополнительный вопрос по лайтмапам. На данный момент, если двигаешь развёртку текстуры, то и лайтмапа двигается. Так что, исправляя маппинг текстуры, ломаешь освещение на объектах. Иногда заметно, иногда нет. Это баг? Или нет, но можно сделать так, чтобы лайтмапа не смещалась?

UnrealKaraulov commented 9 months ago

@Qwertyus3D а вот этого даже не знаю надо будет как-то затестить что в игре покажет

Qwertyus3D commented 9 months ago

На данный момент лайтмапа как-то иначе смещается в игре, нежели в редакторе. После изменения развёртки текстуры её освещение в редакторе может никак не поменяться, а в игре будет чёрное пятно где-нибудь в углу. Или тень сместится.

Qwertyus3D commented 9 months ago

Основная проблема, думаю, в том, что лайтмапа смещается вместе с текстурой. Желательно, чтобы такой привязки не было, ну или редактор должен корректировать положение лайтмапы после редактирования текстуры. Напомню, что также есть проблема с тем, что после перемещения браш-моделей их освещение тоже ломается. Возможно, нужно для начала пофиксить текущий баг с освещением, а потом смотреть, что ещё потребуется изменить.

UnrealKaraulov commented 9 months ago

возможно косяк в рендере т.к я не трогал шейдеры отрисовки лайтмапов

UnrealKaraulov commented 9 months ago

Основная проблема, думаю, в том, что лайтмапа смещается вместе с текстурой. Желательно, чтобы такой привязки не было, ну или редактор должен корректировать положение лайтмапы после редактирования текстуры. Напомню, что также есть проблема с тем, что после перемещения браш-моделей их освещение тоже ломается. Возможно, нужно для начала пофиксить текущий баг с освещением, а потом смотреть, что ещё потребуется изменить.

А это проблема видно с оригинал bspguy, lightmap походу не расстягиваются после изменений размеров текстур))))) А изменений не видно сразу т.к текстуру не обновляет инструмент FACE.

очень странно что нет изменений размера автоматического после изменения текстуры. буду фиксить.

Qwertyus3D commented 9 months ago

@UnrealKaraulov Да, я когда переводил, то как раз и увидел подсказки по манипуляции лайтмапой, что мол, в одном из случаев лайтмапа ломается "иногда", а в другом - "всегда" :)

UnrealKaraulov commented 9 months ago

@Qwertyus3D реально карту освещения не меняет размер самостоятельно, ну это сделать не проблема думаю. Но если я сделаю по простому, то пару раз изменить туда-сюда, и лайтмапы с фейса вообще перестанут быть похожими на оригинал) но пока хоть так сделаю

Qwertyus3D commented 9 months ago

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

Qwertyus3D commented 9 months ago

Причём, что интересно, сейчас проверил, я примерно помню, какую модель в карту импортировал, т. к. специально обтягивал её этой текстурой, {blue. И вот получается, что в модели вшитой текстуры нет, а BSP-guy, получается, самовольно её вшил в карту при импорте, да ещё и с ошибкой :( Впрочем, ошибка могла случиться со старой версией программы, т. к. специально не получилось повторить эту проблему. Ну или какие-то условия необходимы, буду следить теперь.

UnrealKaraulov commented 9 months ago

@Qwertyus3D скорее всего переполнение буфера текстур косячит проверка, потому что на стандарт картах тоже выдает.

Ну проверка чет типа такого

int texOffset = ((int*)textures)[i + 1];
if (texOffset >= 0)
{
    int texlen = getBspTextureSize(i);
    int dataOffset = (textureCount + 1) * sizeof(int);
        if (tex->nOffsets[0] > 0 && dataOffset + texOffset + texlen > bsp_header.lump[LUMP_TEXTURES].nLength)
        {
            print Текстур большой!;
        }
}

возможно что-то из переменных лишнее из-за чего проверка не работает

UnrealKaraulov commented 9 months ago

@Qwertyus3D я посмотрел сегодня как карта освещения сохраняется, в общем код очень странный и мне не понятный по этому я его решил упростить, или же усложнить хз) но мне будет спокойней после этого 🗡️

Например при перемещении модели, изменялись оффсеты карты освещения только для измененных в модели фейсов, но если после этой модели еще идут фейсы, то они как бы по идее не будут обновлены, по этому решил обновлять все вне зависимости от этого.

Щас тестирую поможет ли это.

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

UnrealKaraulov commented 9 months ago

Не понимаю че там делает qrad_get_lightmap_flags, после изменения размера карта освещения съезжает из-за использования этих флагов, если ее просто изменять как изображение, то по идее съезжать ниче не должно.

Qwertyus3D commented 9 months ago

Ну, я могу только догадываться, что это какое-то наследие Кваки...

Qwertyus3D commented 9 months ago

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

Qwertyus3D commented 9 months ago

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

Это хуже чем было?

Это лучше, теперь вид в редакторе совпадает с игрой. А раньше не совпадало.

Qwertyus3D commented 9 months ago

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

Qwertyus3D commented 9 months ago

У меня стал крашиться редактор при попытке сдвига текстуры. Немножко пододвигаю - норм, двигаю дальше - вылет. Крашится обычная версия, дебаг не крашится. Вижу, что при смещении текстуры в дебаге периодически появляется "Загрузка". Видимо, обычная в этот момент вылетает.

И, до кучи, у меня такие же проблемы перед этим были при проверке/очистке карты с ошибками. Обычная версия крашилась, а дебаг - нет. Возможно, какая-то проблема с доступом к логу либо каким-то другим необходимым функциям?

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

UnrealKaraulov commented 9 months ago

Вот ошибку 1282 не могу поймать, но связана с рендером моделей я так понимаю, если отключить рендер моделей то пропадает?

UnrealKaraulov commented 9 months ago

@Qwertyus3D ну дубликат моделей почему-то начал дублировать leafs хотя не делал этого ранее, какие-то фиксы внес вроде как стало лучше.

Когда жмешь duplicate модель, и очищаешь карту, карта сохранялась с ошибками "LEAF не соотвествует количеству".

Создание моделей сломал, в последнем билде пофиксил.

Поймать краш с передвижением текстуры пока не могу

Qwertyus3D commented 9 months ago

Да, без моделей нет ошибки.

UnrealKaraulov commented 9 months ago

@Qwertyus3D самое странное что я не могу увидеть эту ошибку OPENGL но о ней сообщают многие) Если бы увидел то давно уже пофиксил бы

Qwertyus3D commented 9 months ago

Перестало вылетать при смещении текстуры.

UnrealKaraulov commented 9 months ago

Сделал новую функцию для дублирования структур модели, то есть делает ее редактируемой но не создает новую копию структуры, вообще не знаю зачем новую создавало но теперь два варианта будет.

Qwertyus3D commented 9 months ago

Класс, как говорится, зачем плодить сущности?

UnrealKaraulov commented 9 months ago

Класс, как говорится, зачем плодить сущности?

Оно создавало новую BSPModel в BSP файле каждый дубликат. Но цель не понятна совсем. По этому теперь есть упрощенный вариант который не делает этого.

UnrealKaraulov commented 9 months ago

@Qwertyus3D Починил импорт BSP моделей, карта освещения и текстуры, кажется все в порядке.

@Outerbeast In latest build this problem solved ?

Outerbeast commented 9 months ago

Working good so far, but there was sometimes a crash on loading the bsp file. A bug I noticed was opening a big map where there was a lot of brush models, I couldn't scroll past model32, the list just cut off at the bottom of the screen without scrolling

Qwertyus3D commented 9 months ago

@Outerbeast Any sample map?

Qwertyus3D commented 9 months ago

@UnrealKaraulov У меня вот лог не прокручивается после некоторых действий. То ли от выполнения ряда операций, то ли лимит у него на размер файла, ХЗ.

Qwertyus3D commented 9 months ago

@UnrealKaraulov Я смотрю, лог дописывается каждый раз при запуске, и пухнет неограниченно. Надо бы опцию на ограничение размера файла, либо вообще отключения дописывания.

Outerbeast commented 9 months ago

@Qwertyus3D @KarKarKarKarkarkar I think I might have done it wrong: so I exported a brush func_tracktrain from cz_silo05.bsp in condition zero deleted scenes "with wad" and when I loaded it into anything it crashed on the load button. But when I exported with the "with internal textures" and imported it seemed to work fine

UnrealKaraulov commented 8 months ago

@Outerbeast you can test in latest build no issues with import/export BSP models ?

I do test with some maps, and think this issue fixed. If this issue not fixed, please tell me.