Юра написал очень милый и наглядный тред о том, как мы рисуем слизня, посмотрите :)
https://bsky.app/profile/13px.games/post/3lvolsp4ud22d
https://bsky.app/profile/13px.games/post/3lvolsp4ud22d
Bluesky Social
13px 🇺🇦👾 (@13px.games)
Here's how our liquid snake effect works in our #gmtk2025 entry Slugoborus. Breakdown thread 🧵👇
#gamedev • #shader • #pixelart • #slime • #metablob • #breakdown
#gamedev • #shader • #pixelart • #slime • #metablob • #breakdown
1❤9
В этот раз в результатах нет Overall категории, поэтому как оценивать непонятно даже
Ну нарисовали и музыку сделаил красиво, тут понятно, да :D
Из почти 10к участников прямо хоорошие числа
Энджойментом как-то немного расстроен, правда. Ну и креативити будто у нас не так плох, но мы не смогли его донести((
Ну нарисовали и музыку сделаил красиво, тут понятно, да :D
Из почти 10к участников прямо хоорошие числа
Энджойментом как-то немного расстроен, правда. Ну и креативити будто у нас не так плох, но мы не смогли его донести((
👍7👾1
О, мы попали на главную итча. Красивое
Если вы почему-то пропустили нашу последнюю игру, то отличный шанс поиграть в нее сейчас
https://yogurtthehorse.itch.io/slugoborus
Если вы почему-то пропустили нашу последнюю игру, то отличный шанс поиграть в нее сейчас
https://yogurtthehorse.itch.io/slugoborus
❤8🔥5
Тихонечко оставлю ссылку тут на релиз подруги. Не уверен, как лучше рекламить, там все по картинке видно 🙂
https://store.steampowered.com/app/3269600/Flowers_And_Favours_Florist_Simulator/
https://store.steampowered.com/app/3269600/Flowers_And_Favours_Florist_Simulator/
Steampowered
Save 30% on Flowers And Favours: Florist Simulator on Steam
Flowers And Favours is a relaxing cozy florist sim. Run your own flower shop, experiment with a stunning variety of florals, and craft unique bouquets for your adorable customers. Your floral journey begins today!
❤20
Вообще, я почему пока ничего не пощу. Я в декабре писал, что у меня мысли писать свой движок. Где-то месяц назад я сдался и начал его писать. Вот месяц уже пишу. Потихоньку начну рассказывать про него. Не то что бы его можно использовать уже (если как-то сможете - то скажите, но я вам не поверю)
В нем вообще сейчас отсутствует примерно все. Но процесс идет
В репозитории написано больше и о мотивации, и о тулинге, но тут сразу отвечу на вопрос зачем:
Во-первых, это весело и познавательно. Это моя основная мотивация и мне просто нравится этим заниматься, узнаю много нового для себя (о чем тоже расскажу)
Во-вторых, потому что мне хочется чтобы был легковесный современный движок на C# с поддержкой веб сборок, быстрого хот релоада и сносной документацией, на котором было бы удобно джемить. Получится ли такое сделать - не знаю, посмотрим. Это у меня больше задача максимум
В нем вообще сейчас отсутствует примерно все. Но процесс идет
В репозитории написано больше и о мотивации, и о тулинге, но тут сразу отвечу на вопрос зачем:
Во-первых, это весело и познавательно. Это моя основная мотивация и мне просто нравится этим заниматься, узнаю много нового для себя (о чем тоже расскажу)
Во-вторых, потому что мне хочется чтобы был легковесный современный движок на C# с поддержкой веб сборок, быстрого хот релоада и сносной документацией, на котором было бы удобно джемить. Получится ли такое сделать - не знаю, посмотрим. Это у меня больше задача максимум
🔥13😱4❤3
Вообще, вчерашний пост вышел бы на день раньше, если бы мне резко не захотелось вместо какой-то некрасивой фигней с нагромождением, а показать лого движка, которое мне нарисовал Юра. Но чтобы это сделать, лого нужно было загрузить в память игры, а для этого нельзя просто кинуть файл картинки, потому что файл картинки запакован. Его нужно распаковать и кидать распакованным, либо перепакованным в формат, который поддерживает GPU
А чтобы это сделать, нужно, well... Считать картинку! И это не так просто как кажется. Вообще, когда пишешь свой движок, то осознаешь сколько тривиальных операций на самом деле совершенно нетривиальны. Ты как бы и так это знаешь, если задумаешься, но вот осознавать... В итоге вечер был потрачен на небольшой ресерч, чем грузить картинки. Раньше в .NET была либа System.Drawing, но ее оставили рабочей только на винде (читать почему вот тут, там вполне разумные причины), соответсвенно пришлось перебирать 3rd пати решения
Обычно игровые движки пишут на плюсах или чем-то похожем и в простых случаях типа моего берут stb_image - легковесная либа с минимум зависимостей, очень удобная. Но я то пишу на шарпах. Я бы мог написать биндинги для нее, как уже было сделано для шейдеркросса и SPIR-V с шейдерами, но тащить еще одну нативную зависимость, которая будет отправляться с любой игрой не хочется. Это лишние файлы, работа с нативными либами довольно стремная и в общем хотелось притащить чего-то шарпового, что потом легко упаковывать в бинарь,тем более
И нашлась шарповая реимплементация StbImage. Буквально прост трансляция сишного кода в шарпы. И отлично работающая. В итоге быстренько был написан импортер картинок в распакованные байты и отрисована картинка. Не с первого раза, правда, потому что байтики двигать любой может, а вот правильно двигать уже сложнее...
И вот так со всем в своем движка. Любая простая задача, которая кажется элементарной моментально вызывает проблемы и требует какого-никакого ресерча, написания кучи кода и принятия всяких неочевидных решений. Часто я хожу смотреть, как эту задачу решают другие движки, похожие на мой типа MonoGame или Foster, а потом придумываю что-то свое. Часто просто делаю как там. Но времени это все отнимает поразительно много
Не пишите свои движки ребята :D
А чтобы это сделать, нужно, well... Считать картинку! И это не так просто как кажется. Вообще, когда пишешь свой движок, то осознаешь сколько тривиальных операций на самом деле совершенно нетривиальны. Ты как бы и так это знаешь, если задумаешься, но вот осознавать... В итоге вечер был потрачен на небольшой ресерч, чем грузить картинки. Раньше в .NET была либа System.Drawing, но ее оставили рабочей только на винде (читать почему вот тут, там вполне разумные причины), соответсвенно пришлось перебирать 3rd пати решения
Обычно игровые движки пишут на плюсах или чем-то похожем и в простых случаях типа моего берут stb_image - легковесная либа с минимум зависимостей, очень удобная. Но я то пишу на шарпах. Я бы мог написать биндинги для нее, как уже было сделано для шейдеркросса и SPIR-V с шейдерами, но тащить еще одну нативную зависимость, которая будет отправляться с любой игрой не хочется. Это лишние файлы, работа с нативными либами довольно стремная и в общем хотелось притащить чего-то шарпового, что потом легко упаковывать в бинарь,тем более
И нашлась шарповая реимплементация StbImage. Буквально прост трансляция сишного кода в шарпы. И отлично работающая. В итоге быстренько был написан импортер картинок в распакованные байты и отрисована картинка. Не с первого раза, правда, потому что байтики двигать любой может, а вот правильно двигать уже сложнее...
И вот так со всем в своем движка. Любая простая задача, которая кажется элементарной моментально вызывает проблемы и требует какого-никакого ресерча, написания кучи кода и принятия всяких неочевидных решений. Часто я хожу смотреть, как эту задачу решают другие движки, похожие на мой типа MonoGame или Foster, а потом придумываю что-то свое. Часто просто делаю как там. Но времени это все отнимает поразительно много
Не пишите свои движки ребята :D
🤯5❤4
Вот кстати как выглядела одна из первых попыток нарисовать простенький интерфейс (как он должен выглядеть, видно на второй картинке)
А на третьей картинке неудачная попытка загрузить логотип в память из-за неправильного размера пикселей в байтах
А на третьей картинке неудачная попытка загрузить логотип в память из-за неправильного размера пикселей в байтах
❤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/. Там рассказано гораздо больше проблем, чем я рассказал тут
В общем, если вы не знаете, то шейдеры это программы, которые, строго говоря, пишутся для видеокарт. Вот обычно пишут программы для центрального процессора, а шейдеры это для графического. Пишутся они на специальных для этого языка. Самые популярные - 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/. Там рассказано гораздо больше проблем, чем я рассказал тут
🤯5❤2🔥1😱1
А если хочется больше узнать про шейдеры простым языком, то 4 года назад я на DTF с картинками о них рассказывал: https://dtf.ru/gamedev/714743-sheidery-chto-i-kak
DTF
Шейдеры. Что и как — Gamedev на DTF
Расскажу, как в общем случае они работают, что умеют и как их используют
❤7
– В общем, у нас этот джем будет краш тестом, посмотрим, как фигово мы можем собирать игру
– А когда краш тесты уже закончатся и мы сможем просто делать игры?
– Увы
– А когда краш тесты уже закончатся и мы сможем просто делать игры?
– Увы
❤9😢4
🔥5
Так, а ссылку на игру я так и не скинул
Короче, если вы скучали по 2003-ему, то вам понравится
https://yogurtthehorse.itch.io/tazos
Короче, если вы скучали по 2003-ему, то вам понравится
https://yogurtthehorse.itch.io/tazos
itch.io
Taos K. O. by Yogurt The Horse, Gmiss, kiberptah
y2k chips-collecting autobattler. Play in your browser
🔥6