UnrealKaraulov / newbspguy

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

Transparency for solid entities #35

Open Qwertyus3D opened 1 year ago

Qwertyus3D commented 1 year ago

Небольшое улучшение в виде отдельной опции в разделе Render flags - для энтити со значением SOLID (rendermode 4) не отрисовывать синий фон-заливку, чтобы они выглядели так же, как в игре, с прозрачностью. Для лестниц, решёток, кустиков и т. д.

Qwertyus3D commented 1 year ago

В идеале бы, учитывать значение renderamt у энтить (0-255), если выбран любой режим rendermode, кроме Normal (0). Потому что во всех остальных режимах прозрачность учитывается. Единственная особенность для спрайтов, это что если выбран режим Color (1), то любое значение, кроме 0, просто делает энтить видимой, а 0 - невидимой. Но прозрачность должна касаться текстур, сам каркас энтити должен быть видим, конечно.

UnrealKaraulov commented 1 year ago

@Qwertyus3D Ну... Мне пришлось узнать что такое шейдеры, и вроде как получается, думаю к вечеру сделаю обнову :)

UnrealKaraulov commented 1 year ago

@Qwertyus3D сделал что-то, работать должно кое-как :)

Работает?

Qwertyus3D commented 1 year ago

Да, кое-как - работает. В том плане, что прозрачность подключилась, хотя она не 100%-ная (в случае, когда renderamt 0). Текстуры всё-же видно. Может, это даже неплохо. Стёкла прозрачные, уже хорошо. Главный вопрос, что транспарентные текстуры (типа тех, что с синим фоном) лишь немного прозрачны. Синий этот фон виден, как мелкая сетка, которая лишь немного прозрачная. А нужно бы, чтобы пиксели определённого цвета (последний цвет в текстуре, вроде) вообще были невидимы.

UnrealKaraulov commented 1 year ago

@Qwertyus3D Opengl сглаживает текстуры, по этому по краям синий цвет не особо синий.

Qwertyus3D commented 1 year ago

И если renderamt 0 явно не указан в свойствах энтити, то программа считает, что энтить должна быть видима. Но это неверно, т. к. когда renderamt не задан явно, он по умолчанию равен 0. И для любого другого указанного режима, кроме Normal (0), такая энтить должна быть невидимой.

UnrealKaraulov commented 1 year ago

@Qwertyus3D Но если полную прозрачность сделать, то объекты станут полностью прозрачными, и не видимыми в программе

Добавил 0 renderamt если не указан

Qwertyus3D commented 1 year ago

@Qwertyus3D Opengl сглаживает текстуры, по этому по краям синий цвет не особо синий.

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

UnrealKaraulov commented 1 year ago

Можно пример карты я посмотрю

Qwertyus3D commented 1 year ago

blue256 Это пример максимальной прозрачности, скажем так.

Qwertyus3D commented 1 year ago

На любой карте, где есть подобные текстуры.

Qwertyus3D commented 1 year ago

blue257 Прозрачность "плавает" при поворотах камеры от мелкой синей сетки до совсем непрозрачных участков.

UnrealKaraulov commented 1 year ago

@Qwertyus3D ну это сглаживание, я убрал сглаживание, должно быть лучше, позже я сделаю что бы лучше работала прозрачность. (конвертировать текстуру в RGBA)

В последнем билде нормально отображается?

Qwertyus3D commented 1 year ago

Теперь просто нет сглаживания, но синяя сетка осталась.

UnrealKaraulov commented 1 year ago

@Qwertyus3D У меня без сглаживания так: image Со сглаживанием: image

Qwertyus3D commented 1 year ago

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

UnrealKaraulov commented 1 year ago

@Qwertyus3D я честно не знаю ни одной ХЛ карты, и где найти эти кусты) наугад потыкал не нашел таких ))) Можно конкретно название карты ?)

Qwertyus3D commented 1 year ago

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

Qwertyus3D commented 1 year ago

Карта роли не играет, я думаю. Видимо, шейдер опять привязан к видеокарте.

UnrealKaraulov commented 1 year ago

Карта роли не играет, я думаю. Видимо, шейдер опять привязан к видеокарте.

ну как бы если я не увижу это место как я смогу исправить ошибку)

Qwertyus3D commented 1 year ago

Так у меня с любой транспарентной текстурой косяк одинаковый, неважно, трава это, забор, лестница или ограда.

Qwertyus3D commented 1 year ago

Ещё забавный факт, что стекло прозрачно, но точечные энтити сквозь него не видно, только браши.

Qwertyus3D commented 1 year ago

Это видно сквозь стекло: Glass1 А это - за ним: Glass2 Карта as_a1.

Qwertyus3D commented 1 year ago

Даже не все браши видно.

Qwertyus3D commented 1 year ago

Теперь работает. Но другие энтити сквозь эту прозрачность не видны, только геометрия с непрозрачными текстурами. rgba

Qwertyus3D commented 1 year ago

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

Qwertyus3D commented 1 year ago

И на всякий случай не помешает опция в настройках рендера, для включения-выключения рендермодов текстур.

UnrealKaraulov commented 1 year ago

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

Цвет фона может быть в спрайтах другой, в wad ведь только синий?

UnrealKaraulov commented 1 year ago

@Qwertyus3D Вроде бы в SPRITE берется первый цвет из палитры а в WAD только синий? Разве не так?

Qwertyus3D commented 1 year ago

@UnrealKaraulov В спрайтах не помню. как устроено (особенно со многокадровыми), там как-то в сам спрайт, видимо, пишется инфа о прозрачном цвете. Точно не первый. В текстурах (что вады, что модели) для транспарентности берётся последний цвет палитры. Он может быть любым. Синий используют для удобства, но на деле любой цвет в ячейке 255. Причём, там, по сути не важен даже цвет. В палитре могут быть повторения по цвету. Но прозрачными будут читаться те пикселы, которые проиндексированы на ячейку 255. Тот же синий цвет отдельных пикселов может быть непрозрачным, если эти пикселы нарисованы синим цветом из другой ячейки.

UnrealKaraulov commented 1 year ago

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

Qwertyus3D commented 1 year ago

Вообще никакой разницы. :D

Qwertyus3D commented 1 year ago

Тут нужна сортировка по прозрачности. Наверное, можно даже в исходниках Ксаша подсмотреть, но не уверен, что прямо оттуда утянуть выйдет.

Qwertyus3D commented 1 year ago

А, ой. Есть разница. Для стёкол! Я не нашёл сразу. Теперь то же самое нужно не для полупрозрачности, а для транспарентности сделать.

Qwertyus3D commented 1 year ago

@UnrealKaraulov Со стёклами работает 👍 Теперь решётки/лесенки.

UnrealKaraulov commented 1 year ago

@Qwertyus3D добавил в этот список все что с текстурами '{'

В общем там как-то все сложно, в 2 этапа рисуется карта, сначала прозрачные потом непрозрачные объекты, добавил в прозрачные те которые идут с текстурой '{'

Должно теперь нормально работать.

Qwertyus3D commented 1 year ago

Краш

UnrealKaraulov commented 1 year ago

Уже завтра вечером тогда исправлю,после работы.

Я на нескольких картах проверял вроде как не крашилось.

Qwertyus3D commented 1 year ago

Странная симптоматика, но дебаг-компил просто закрывается после запуска. Краша как бы и нет.

Поток 0x63ac завершился с кодом 0 (0x0).
"bspguy.exe" (Win32). Загружено "C:\Windows\System32\SHCore.dll". 
"bspguy.exe" (Win32). Загружено "C:\Windows\System32\kernel.appcore.dll". 
Поток 0x4e20 завершился с кодом 0 (0x0).
Поток 0x16c8 завершился с кодом 0 (0x0).
Программа "[4724] bspguy.exe" завершилась с кодом 0 (0x0).
Qwertyus3D commented 1 year ago

И как бы без карты оно запускается. Но при попытке открыть карту вылетает.

Qwertyus3D commented 1 year ago

Упс, крашит именно на той карте, as_a1.

Qwertyus3D commented 1 year ago
Start bspguy editor with map: D:\Games\Xash3D\Ashfield\maps\as_a1.bsp
Load settings from : D:\Games\Xash3D\_Tools_\BSPGuy/bspguy.cfg
Parsing D:\Games\Xash3D\_Tools_\BSPGuy//_Res_/fgd/halflife_2022_op4.fgd
Bsp version: 30
Read lump id: 0. Len: 105152. Offset 124.
Read lump id: 1. Len: 144120. Offset 105276.
Read lump id: 2. Len: 6344. Offset 249396.
Read lump id: 3. Len: 242784. Offset 255740.
Read lump id: 4. Len: 227142. Offset 498524.
Read lump id: 5. Len: 210024. Offset 725666.
Read lump id: 6. Len: 229160. Offset 935690.
Read lump id: 7. Len: 283300. Offset 1164850.
Read lump id: 8. Len: 2319261. Offset 1448150.
Read lump id: 9. Len: 129840. Offset 3767411.
Read lump id: 10. Len: 167020. Offset 3897251.
Read lump id: 11. Len: 39674. Offset 4064271.
Read lump id: 12. Len: 141396. Offset 4103945.
Read lump id: 13. Len: 264716. Offset 4245341.
Read lump id: 14. Len: 20032. Offset 4510057.
WARNING: Unrecognized type body (line 3317) in FGD halflife_2022_op4
Generated 159 point entities cubes
(CRC "1578850597")
Warning: in map as_a1 found unused model: 191.
Crash
 WINAPI_LASTERROR:B7.
 Exception code: C0000005.
 Exception address: 00000000104CB885.
 Main module address: 0000000010000000
Generating minidump at path D:\Games\Xash3D\_Tools_\BSPGuy\bspguy_20221219_193436(2).dmp
Crash
 WINAPI_LASTERROR:0.
 Exception code: C0000005.
 Exception address: 00000000104CB885.
 Main module address: 0000000010000000
Generating minidump at path D:\Games\Xash3D\_Tools_\BSPGuy\bspguy_20221219_193436(1).dmp
Start bspguy editor with map: D:\Games\Steam\steamapps\common\Half-Life\valve\maps\c2a3e.bsp
Load settings from : D:\Games\Xash3D\_Tools_\BSPGuy/bspguy.cfg
Parsing D:\Games\Xash3D\_Tools_\BSPGuy//_Res_/fgd/halflife_2022_op4.fgd
Bsp version: 30
Read lump id: 0. Len: 15317. Offset 873940.
Read lump id: 1. Len: 97720. Offset 124.
Read lump id: 2. Len: 2600. Offset 889260.
Read lump id: 3. Len: 44508. Offset 122204.
Read lump id: 4. Len: 2782. Offset 871156.
Read lump id: 5. Len: 29784. Offset 166712.
Read lump id: 6. Len: 10640. Offset 196496.
Read lump id: 7. Len: 55840. Offset 207136.
Read lump id: 8. Len: 486033. Offset 385120.
Read lump id: 9. Len: 34496. Offset 262976.
Read lump id: 10. Len: 24360. Offset 97844.
Read lump id: 11. Len: 7468. Offset 297472.
Read lump id: 12. Len: 27180. Offset 355316.
Read lump id: 13. Len: 50376. Offset 304940.
Read lump id: 14. Len: 2624. Offset 382496.
WARNING: Unrecognized type body (line 3317) in FGD halflife_2022_op4
(CRC "3581799585")
Saving CRC key to Worldspawn
Calculating lightmaps
Loading WAD D:/Games/FWGS/valve/decals.wad
Loading WAD D:/Games/FWGS/valve/halflife.wad
Loading WAD D:/Games/FWGS/valve/liquids.wad
Loading WAD D:/Games/FWGS/valve/xeno.wad
Loaded 59 wad textures
Fit 2618 lightmaps into 1 atlases
Generated 159 point entities cubes
Loading WAD D:/Games/FWGS/valve/decals.wad
Loading WAD D:/Games/FWGS/valve/halflife.wad
Loading WAD D:/Games/FWGS/valve/liquids.wad
Loading WAD D:/Games/FWGS/valve/xeno.wad
Loaded 59 wad textures
Debug: Used 2 wad files(include map file)
Loaded 2440 clipnode leaves
adios

BSPGuy.zip

Qwertyus3D commented 1 year ago

Там, где не крашит, энтити стали видны сквозь решётки.

Qwertyus3D commented 1 year ago

И почему-то de_dust2 не открывает дебажный компил, как обычно (имею в виду, тот компил, который Студия создаёт).

UnrealKaraulov commented 1 year ago

понял, я там мелкую ошибку допустил и если на карте есть неиспользуемая модель то крашит ее

UnrealKaraulov commented 1 year ago

@Qwertyus3D а через студию не получается запустить отладку? Там по идее должно написать строку кода где ошибка

Qwertyus3D commented 1 year ago

@UnrealKaraulov

дебаг-компил просто закрывается после запуска

Нет ошибки, только консольное сообщение о том, что программа закрылась.

UnrealKaraulov commented 1 year ago

@Qwertyus3D исправил краш

Qwertyus3D commented 1 year ago

@UnrealKaraulov Теперь работает, но в отдельных случаях остался эффект. что энтить с прозрачностью не видна сквозь перекрывающую её прозрачную текстуру.

Qwertyus3D commented 1 year ago

И остался вопрос https://github.com/UnrealKaraulov/newbspguy/issues/54