LINUX.ORG.RU

GLSL игра без текстур

 , , ,


2

3

сделал небольшую «демку»(игрой сложно назвать) видео демонстрация https://youtu.be/lVCIEaFEMO4
в живую пробовать https://danilw.github.io/cputests/wasm/sgame/normal/sgame.html
лучшее качество шума(пять итераций вместо трех) https://danilw.github.io/cputests/wasm/sgame/best/sgame.html
на виндовсе могут быть баги в прошлой ссылке, пофикшено для виндовс юзеров тут https://danilw.github.io/cputests/wasm/sgame/best_wfix/sgame.html

исходники https://github.com/danilw/cputests

управление F на весь экран, WASD движения, ПРОБЕЛ отклеиться от планеты, 1/2 или прокрутка мыши масштаб(во время паузы можно сильнее масштабировать), левая/правая кнопка мыши атака, R сбросить масштабирование, P пауза

описание простая игра работает на С++ или wasm не используются текстуры
без зависимостей (glut glew ничего больше) 2к строк на С++ и столькоже на GLSL (оригинальный свой исходник glsl опубликую через неделю от сегодня)

Производительость не на «лучшем» качестве(первая ссылка) дает 60ФПС почти всегда на всех 2-3 летних картах в виндовсе проседания ФПС до двух раз по сравнению с Линуксом(это чисто из за отсутствия врапера в брауере в линуксе)

проверено на Нвидии на Вин/Лин работает

Забыл написть про правила «геймплея»

в игре Три врага

у игрока лазер и бомбы, бомбы липнут к планетам

1. большая планетарная пушка(вокруг белой луны) у нее просто эфект «щита» реагирует на лазер, и бомбы отскакивают, неуязвимая

2. маленькие враги что взрываются подлетая к игроку, их можно «деспавнить» лазером, уничтожать на растоянии, бомбы отскакивают от них

3. враги с лазером и щитом, они именны к лазеру игрока, но бомбы липнут к ним(бомба липнет и через некоторое время взрывается, не сразу) после взрыва бомбы они исчезают

корабль игрока тоже неуязвим,только щит реагирует на атаки(цвет под лазером и эффект на бомб)

это и есть весь геймплей

missxu ()
Ответ на: комментарий от EXL

2-3 недели заназ было 50 строк кода «физики притягивания и столкновения окружностей», вместо окружностей накодил красивые GLSL объекты, и сделал правила и слои для столкновений чтоб тото с темто но не с тем

пробный проект кодинга игры на GLSL

в GLSL очень много оптимизаций написал(без оптимизаций один эффект планет жрет 50% ГПУ и пара планет вместе давалаб меньше 1 фпс)

весь код на GLSL не имеет циклов(лишь для шума 3 итерации), даже псевдо 3д у планетарной пушки(рельсы по которым она ездит) это линейная функция без циклов

missxu ()
Ответ на: комментарий от EXL

честно говоря те «хело ворд физикс» что на шедертое или по твоей ссылке, что на glsl считается-это работалоб и работает на приставках денди/сеге/нес 20 летней давности (ничего суперпроизводительного там нет, и все очень примитивно) при этом нагружая видеокарту под 80%+

5 итераций фор с 10 условиями(if) внутри на glsl это уже 50% мощности видеокарты ушло

даже в этом моем проекте при спавне 20+ енеми и 20+ бомб от игрока ФПС прсядет до 30

у меняже к примеру все «лазеры» рассчитываются на видеокарте(вся логика), но если физику столкновений перенести в GLSL будет 1 фпс

...без фанатизма надо подходить к задачам

missxu ()
Ответ на: комментарий от missxu

5 итераций фор с 10 условиями(if) внутри на glsl это уже 50% мощности видеокарты ушло

for – это рк, если разворачивается, if – говно, да. (код не читал) Если есть вариант распилить if на два шейдера и биндить нужный на стороне движка – надо делать так.

Stil ★★★★★ ()

добавил на java https://github.com/danilw/cputests/tree/master/java/sgame (только исходники собирайте сами кому интересно)

первый раз вижу что java в два раза медленнее wasm-а, очень удивлен, все прошлые результаты показывали обратное(что wasm в разы медленнее джавы)

missxu ()