Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transparency for solid entities #35

Open
Qwertyus3D opened this issue Nov 22, 2022 · 65 comments
Open

Transparency for solid entities #35

Qwertyus3D opened this issue Nov 22, 2022 · 65 comments
Labels
enhancement New feature or request

Comments

@Qwertyus3D
Copy link

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

@UnrealKaraulov UnrealKaraulov added the enhancement New feature or request label Nov 24, 2022
@Qwertyus3D
Copy link
Author

Qwertyus3D commented Dec 18, 2022

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

@UnrealKaraulov
Copy link
Owner

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

@UnrealKaraulov
Copy link
Owner

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

Работает?

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

UnrealKaraulov commented Dec 19, 2022

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

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

@Qwertyus3D
Copy link
Author

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

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

UnrealKaraulov commented Dec 19, 2022

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

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

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

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@UnrealKaraulov
Copy link
Owner

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

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

@UnrealKaraulov
Copy link
Owner

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

@UnrealKaraulov
Copy link
Owner

UnrealKaraulov commented Dec 19, 2022

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

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

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

@Qwertyus3D
Copy link
Author

Краш

@UnrealKaraulov
Copy link
Owner

UnrealKaraulov commented Dec 19, 2022

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

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

@Qwertyus3D
Copy link
Author

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

Поток 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
Copy link
Author

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

Qwertyus3D commented Dec 19, 2022

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
Copy link
Author

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

@Qwertyus3D
Copy link
Author

Qwertyus3D commented Dec 19, 2022

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

@UnrealKaraulov
Copy link
Owner

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

@UnrealKaraulov

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

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

@UnrealKaraulov
Copy link
Owner

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

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

И остался вопрос #54

@UnrealKaraulov
Copy link
Owner

UnrealKaraulov commented Dec 31, 2022

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

@Qwertyus3D еще есть эта проблема? Если да то на какой карте, я посмотрю.

@Qwertyus3D
Copy link
Author

Да повсеместно можно увидеть. с2а5, например.
tran1
tran2

@UnrealKaraulov
Copy link
Owner

@Qwertyus3D спасибо за примеры, посмотрю почему так.

@Qwertyus3D
Copy link
Author

Можно ли добавить опцию, делающую "кубики" точечных энтить полупрозрачными? Список прозрачных энтить на них не влияет, они всё равно непрозрачные. Да и в целом было бы удобно иметь возможность регулировать их отрисовку по одной галочке. Т. к. точечные энтити, если это не модели или спрайты, то в игре вообще невидимые. А в редакторе будет удобно рисовать их полупрозрачными для манипуляций с соседними энтитями.

И ещё можно было бы для списка полупрозрачных брашевых энтить сделать поддержку маски названия. типа trigger_, чтоб сразу все триггеры делать полупрозрачными, а не раздувать список.

@UnrealKaraulov
Copy link
Owner

@Qwertyus3D нужно как-то менять видно функцию рендера, в opengl нужно сначала рисовать непрозрачные, затем прозрачные в порядке удаления от камеры

void Renderer::renderLoop() {
    // 1. Render opaque objects
    for (auto& object : opaqueObjects) {
        render(object);
    }

    // 2. Sort transparent objects based on distance from camera
    std::sort(transparentObjects.begin(), transparentObjects.end(), [&](const Object& a, const Object& b) {
        float distA = distance(cameraPosition, a.position);
        float distB = distance(cameraPosition, b.position);
        return distA > distB;
    });

    // 3. Render transparent objects back-to-front
    for (auto& object : transparentObjects) {
        render(object);
    }
}```

пока не вкурсе как это сделать правильно :(

@Qwertyus3D
Copy link
Author

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

@Qwertyus3D
Copy link
Author

В исходниках Ксаш-движка можно смотреть, как всё настроено. А в Ксашмоде рендер ещё более продвинутый.

@UnrealKaraulov
Copy link
Owner

@Qwertyus3D я в рендере не разобрался, но вроде как с альфатестом стало намного лучше, хотя бы часть прозрачных объектов не перекрывает другие. (ну там к примеру деревья на cs_estate теперь не перекрывают друг друга и полупрозрачные объекты, т.к там 100% прозрачность) щас еще проверю и загружу обнову

@Qwertyus3D
Copy link
Author

Да, вижу, что сортировка улучшилась.

@UnrealKaraulov
Copy link
Owner

Да, вижу, что сортировка улучшилась.

Если заменить стандартные текстуры (SKY,TRIGGER и т.п) более прозрачными вариантами, то через alphatest через них тоже будет нормально видно, подумаю над этим. Не получается сделать сортировку объектов для рендера потому что они привязаны к ID сущностей, типа

renderEnt[id] = ents[id]

Можно будет потом поковырять, в принципе возможно добавить сортировку но надо будет часть кода переписывать, а это мне пока лень)))

@UnrealKaraulov
Copy link
Owner

@Qwertyus3D убрал гору ненужного кода связанного с шейдерами, обновил шейдеры для моделей, и добавил поддержку прозрачных текстур в .MDL, теперь модели с прозрачностью тоже должны отображаться нормально.

@Qwertyus3D
Copy link
Author

Вообще, под прозрачными текстурами следует скорее понимать аддитивные текстуры, а текстуры с прозрачным фоном скорее лучше называть транспарентными. Транспарентные текстуры вижу, что заработали, спасибо, полезная обнова (думал намутить с её помощью комплект служебных моделек под отображение разных энтить). Хром и аддитив пока нет.

@UnrealKaraulov
Copy link
Owner

В последнем билде фпс должен стать намного больше. Случайно нашел места в коде которые вызывали сильную нагрузку на процессор.

@Qwertyus3D
Copy link
Author

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

@SirYodaJedi
Copy link

Reading through a google translation of this thread, I didn't see this mentioned, so I thought I'd clarify:

Index # 255 (the last color in the palette) is always converted to black by the engine for textures with the { prefix, regardless of if the texture is being rendered as transparent or translucent. This is why there isn't a blue (or whatever color 255 is) highlight around transparency in-game when texture filtering is enabled.

(I tried to word the above in a way that Google Translate shouldn't mangle it; I don't speak Cyrillic, so I'm sorry for being that annoying American that speaks English in a foreign land 😅.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants
@SirYodaJedi @UnrealKaraulov @Qwertyus3D and others