Егор делает игры
197 subscribers
73 photos
33 videos
58 links
Привет. Это канал @yogurtthehorse

Здесь я рассказываю, как я делаю игры. Полный список моих "релизов", можно найти вот туть:
https://yogurtthehorse.itch.io/

Обычно я делаю игры на Unity, но пишу вообще о чем попало, как-то так
Download Telegram
В этот раз в результатах нет Overall категории, поэтому как оценивать непонятно даже

Ну нарисовали и музыку сделаил красиво, тут понятно, да :D

Из почти 10к участников прямо хоорошие числа

Энджойментом как-то немного расстроен, правда. Ну и креативити будто у нас не так плох, но мы не смогли его донести((
👍7👾1
О, мы попали на главную итча. Красивое

Если вы почему-то пропустили нашу последнюю игру, то отличный шанс поиграть в нее сейчас

https://yogurtthehorse.itch.io/slugoborus
8🔥5
Вообще, я почему пока ничего не пощу. Я в декабре писал, что у меня мысли писать свой движок. Где-то месяц назад я сдался и начал его писать. Вот месяц уже пишу. Потихоньку начну рассказывать про него. Не то что бы его можно использовать уже (если как-то сможете - то скажите, но я вам не поверю)

В нем вообще сейчас отсутствует примерно все. Но процесс идет

В репозитории написано больше и о мотивации, и о тулинге, но тут сразу отвечу на вопрос зачем:
Во-первых, это весело и познавательно. Это моя основная мотивация и мне просто нравится этим заниматься, узнаю много нового для себя (о чем тоже расскажу)
Во-вторых, потому что мне хочется чтобы был легковесный современный движок на C# с поддержкой веб сборок, быстрого хот релоада и сносной документацией, на котором было бы удобно джемить. Получится ли такое сделать - не знаю, посмотрим. Это у меня больше задача максимум
🔥13😱43
Вообще, вчерашний пост вышел бы на день раньше, если бы мне резко не захотелось вместо какой-то некрасивой фигней с нагромождением, а показать лого движка, которое мне нарисовал Юра. Но чтобы это сделать, лого нужно было загрузить в память игры, а для этого нельзя просто кинуть файл картинки, потому что файл картинки запакован. Его нужно распаковать и кидать распакованным, либо перепакованным в формат, который поддерживает GPU

А чтобы это сделать, нужно, well... Считать картинку! И это не так просто как кажется. Вообще, когда пишешь свой движок, то осознаешь сколько тривиальных операций на самом деле совершенно нетривиальны. Ты как бы и так это знаешь, если задумаешься, но вот осознавать... В итоге вечер был потрачен на небольшой ресерч, чем грузить картинки. Раньше в .NET была либа System.Drawing, но ее оставили рабочей только на винде (читать почему вот тут, там вполне разумные причины), соответсвенно пришлось перебирать 3rd пати решения

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

И нашлась шарповая реимплементация StbImage. Буквально прост трансляция сишного кода в шарпы. И отлично работающая. В итоге быстренько был написан импортер картинок в распакованные байты и отрисована картинка. Не с первого раза, правда, потому что байтики двигать любой может, а вот правильно двигать уже сложнее...

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

Не пишите свои движки ребята :D
🤯54
Вот кстати как выглядела одна из первых попыток нарисовать простенький интерфейс (как он должен выглядеть, видно на второй картинке)

А на третьей картинке неудачная попытка загрузить логотип в память из-за неправильного размера пикселей в байтах
7
Про шейдеры

В общем, если вы не знаете, то шейдеры это программы, которые, строго говоря, пишутся для видеокарт. Вот обычно пишут программы для центрального процессора, а шейдеры это для графического. Пишутся они на специальных для этого языка. Самые популярные - HLSL (изначально придуман для шейдеров DirectX), GLSL (изначально придуман для шейдеров OpenGL) и MSL (придуман для шейдеров Metal). Как можно заметить, у каждого графического API свой предпочитаемый язык для шейдеров. А еще есть Вулкан - у него нет своего текстового языка, но он читается байткод SPIR-V - то есть уже скомпилированный шейдер в специальный машиночитабельный код

Все три языка шейдера можно довольно незамысловатым способом сконвертировать в SPIR-V байткод. А потом этот байткод можно даже обратно превратить в любой из этих трех языков. Зачем это нужно? Чтобы не писать три шейдера под каждое графическое API (и под каждую его версию). И вот я же пишу свой движок, мне нужно было выбрать как писать шейдеры. Варианты следующие:

1) Писать под каждое API свой шейдер и пусть пользователь движка сам страдает
2) Выбрать какой-то язык для шейдеров и конвертировать его в другие

С первым все просто и понятно, но неудобно. А со вторым ряд сложностей. Во-первых, какой язык выбрать. Но тут я просто фанбой HLSL, поэтому выбирал недолго. Во-вторых, как его потом пересобирать. Пересобирать ли его заранее или позволять пересобирать его прямо во время запуска игры? Первое проще и позволяет не таскать с собой кучу тулинга по конвертации шейдера, второе позволяет редактировать шейдеры прямо пока игра запущенна

Изначально я хотел пойти по второму пути, потому что так вроде круто, но я уже где-то неделю (с перерывами на Silksong) танцую вокруг конвертации HLSL в GLSL для реализации OpenGL и WebGL API и умер. Устал настолько, что

1) Пока буду писать опенгл шейдеры руками
2) Все ближе к идее научиться компилировать C# в SPIR-V и потом уже в любой удобный мне язык (я не совсем сумасшедший, похожие проекты существовали и до меня)

По конвертации HLSL под метал и вулкан - ребята из SDL уже написали удобную тулзу, котоаря это делает и делает она это.. ну нормально делает. Единственный минус - она работает на майкрософтском компиляторе шейдеров, который весит ~100 мегабайтов в собранном виде (и это лишь одна из множества его проблем)

Если вам хочется окунуться в безумие шейдеров еще глубже, то очень рекомендую эту статью: https://moonside.games/posts/layers-all-the-way-down/. Там рассказано гораздо больше проблем, чем я рассказал тут
🤯52🔥1😱1
А если хочется больше узнать про шейдеры простым языком, то 4 года назад я на DTF с картинками о них рассказывал: https://dtf.ru/gamedev/714743-sheidery-chto-i-kak
7
тык тык тык
👍8
ну делаем игру про отъем денег по решению суда, все просто
😁9👍2
Зарисовки с брейншторма, вот. Примечательно, что идея, которую мы в итоге делаем, была проговорена устно и не нарисована вообще
😁8
– В общем, у нас этот джем будет краш тестом, посмотрим, как фигово мы можем собирать игру
– А когда краш тесты уже закончатся и мы сможем просто делать игры?
– Увы
9😢4
17😁4
Пока приходим в себя

Степа выложил вот треки из игры

https://t.me/kiberptah_channel/74
🔥5
Так, а ссылку на игру я так и не скинул

Короче, если вы скучали по 2003-ему, то вам понравится

https://yogurtthehorse.itch.io/tazos
🔥6