Сообщество - Инди игры
Добавить пост
52 поста 202 подписчика

Популярные теги в сообществе:

363

Как я делал шпору, а в итоге получилась игра "змейка"

Дело было во время обучения в институте. Шел первый курс, а может и второй, неважно. Все первые года 3 матан и все что с ним связано сильно меня доставало. А вот по линалу, к слову, мои дела были куда лучше.


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


И вот у меня родилась мысль: а что если взять калькулятор и в него запихать шпоры. Погуглив не нашел таких девайсов. Все какие-то, в лучшем случае, визуально приметные.

С другой стороны, посмотрев на возможности своего калькулятора, пришел к выводу, что в него ничего не записать:
- во-первых у него экран специфичный, может рисовать только цифры

- во-вторых он полностью закрыт: такая черная блямба-микросхема к которой никак не подпаяещься, а еще она нигде не продукоментирована КАК СЕЙЧАС ПОЧТИ ВСЕ ОБОЖАЮТ ДЕЛАТЬ.


Что же делают настоящие разработчики? XD Разрабатывают! Мы не ищем легких путей, от калькулятора можно использовать только корпус. Кстати, а вот и мой итоговый вариант (смог найти фото):

Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост

Работает он на одной ААА батарейке. В качестве микроконроллера использовал для начала атмегу на 28 ног. Потом атмегу на 32 ноги (могу путать число ног). Потом SMD использовал, вроде тоже атмегу.

В качестве экрана использовал MT510 какой-то там вроде наш жк чб экран (на экране умещалось 3-4 строки). Пиксели большие, но он хорошо маскировалс под экран обычного калькулятора(выглядел допотопно), что меня устраивало. Стоил правда этот чудо-экран за 500р, а выглядел примерно так (плата была поменьше и экран не зеленый):

Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост

Собрал себе программатор и коробку для него. Коробку не купил так как чет для простого студента все дорого, особенно кусок пластика за пару сотен рублев, когда можно из сидибокса можешь какой хошь (ну прямо совсем какой хошь) корпус сделать и дешевле будет:

Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост

И да, компоненты были дорогими. Когда жил с родителями, помню у отца было все. Ну или не все, но недостающие детали можно было выпаять. Всех эих резисторов / конденсаторов тогда было море... Хоть в окно выкидывай. Тогда я этого не ценил и не знал что они, оказывается, сумасшедших денег стоят.
Помню, ходил по митино, 1 резистор стоил 20-25р. Ребята, 1 стандартный резистор из самого стандартного ряда, с самой стандартной погрешностью, эта проволочка за 20 руб...


Первая версия калькулятора была с LED, сохранились только эти фотки (не знаю куда сейчас калькуль потерялся со всеми переездами). Собрал все на картонке так как мне так всегда было удобно. Когда учился в школе, собирал на картонке, которая была у отца. Это была какая-то особо прочная картонка, наверно даже для таких целей. А в общаге только был... гринфилд. Ну ладно, не для презентации делаем, так что прототип из каках и палок. Главное чтобы работал (и так уже разорился с покупкой конденсаторов, резисторов, МК-ов...):

Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост
Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост

Через какое-то время много усмешек отгреб от своих товарищей, которые тоже что-то паяли : "че это у нас тут за сопли на картонке?" "Ха-ха-ха-ха, Лёх, такой редкостной фигни мы еще никогда не видели".

Но девайс работал: склыдвал / вычитал / умножал / делил. Шпоры залил через программатор в память МК и понеслась...


Не, не понеслась. Оказалось, что у микроконтроллера памяти всего - ничего, на 1 билет из 100. И это расстроило. Что-то по неопытности я не ждал такого удара.


За это время, к слову, я выучил часть билетов. Но вопрос с памятью все еще стоял остро. Итого было решено купить SD-карту, на нее залить txt со шпорами (выбрал этот формат так как писать-читать в файл очень просто впрямо в windows).


Ну что, шпоры на SD, а экзамен на носу, 80% билетов знаю. Как так? Когда надо они не учились, а теперь запомнились сами. Ну ладно, у нас другая цель: нужно подключить карту к МК. Дело непростое. Дело в том, что интерфейс взаимодействия там... Ну как сказать, если вы никогда не работали с картами памяти напрямую через подачу сигналов с учетом тайминага, стробирующего сигнала и прочей фигни, а еще и с учетом того, что SD карта может иметь несколько чипов с памятью в которые нужно писать правильно, то вам не понять. В итоге я угрохал где-то 3 сдэшки. Кажется я сбивал им основную программу. Не знаю как так получилось, но они стали работать только на чтение.


В итоге дней через 5 все получилось. Фотка того как подключал SD-шку:

Как я делал шпору, а в итоге получилась игра "змейка" Инди, Инди игра, Игра змейка, Калькулятор, Программируемый калькулятор, Gamedev, Устройство, Девайс, Девайсы для геймера, Шпора, Игры, Истории из жизни, Своими руками, Программист, Радиоэлектроника, Радиолюбители, Программатор, Читер, Длиннопост

Круто, что, едем дальше. Соответствие пикселей и символов задал сам. Была моя библиотека для CAVR, которая декодировала символы из txt и выводила каждый символ на экран. Кстати, каждый символ я нарисовал-закодировал "попиксельно", пришлось как всегда заморочиться.

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


В итоге калькулятор работал так, что есть 2 режима:

- калькулятор

- шпаргалка (вызывается когда держишь точку более 2.5с)


Ну круто, что. Собираем все в корпус, только зачем? Билеты я знал. Что сделал: запрогал в калькулятор игру змейку и играл иногда. Про мой калькулятор мало кто знал кроме соседей. Ну а теперь, как говорится, по секрету всему свету :) Конечно моя змейка не разошлась тиражом более чем 1 экземпляр, но я и этому очень рад :D


Воодушевленый калькулятором у меня были платны собрать телефон или компьютер, даже знакомым ребятам предлагал. Но никому вообще не сдалось собирать телефоны или компьютеры кроме меня. Так что прикинув сколько усилий ушло на калькулятор, я все же решил притормозить коней и занялся исключительно разработкой ПО.

Показать полностью 12
54

Интеграция геймпада, 2 месяца спустя

Наконец закончил интеграцию системы обработки и вывода настроек геймпада в T-Reload на стороне меню. Не прошло и 2-х месяцев...

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

На картинке представлены геймпады для T-Reload, которые собраны в блендере.Основным требованием к моделям было: минимальная полигональность. У моделей выше около 6к полигонов.

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

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

- в редакторе расставялются линии с примерным положением подписей к каждой кнопке

- префабу геймпада задается ID и сопоставляется набор иконок, которые символизируют кнопки геймпада

На начальном этапе система геймпадов должна уметь:

- вращать геймпад в зависимости от того, что игрок настраивает

- поддержка геймпадов xBox, PS4, PS5, NintendoSwitchPro

- поддержка нераспознанных геймпадов

- разработать гибкую систему, которая позволяет подключать новые геймпады путем их добавления в редакторе Unity

Так как модели будут интегрированы в игру, еще нужно принять во внимание стилизационные особенности T-Reload. Но для дизайнеров (разработчиков) это обычное дело, как и вообще все, что ниже будет написано.

Процесс переделки меню под геймпад

Работу начал с анализа того, что было создано другими разработчиками:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

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

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Следующим шагом было разработать свою версию меню с геймпадом.


Первым делом была разработана система линий, которые подключаются к разным элементам геймпада и которые можно настраивать прямо в редакторе:

Первое время пытался протянуть линию к каждой кнопке, но быстро понял, что запутанный паук из кучи линий - это не то, что радует глаз. "Паук" выглядел примерно так:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Потому решил придержаться того подхода, который использовали другие разработчики (группировка кнопок):

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Согласитесь, муравей с усиками выглядит лаконичнее :)


Процесс проб и ошибок был достаточно долгим, пришлось исписать много страниц А4 по нескольку:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Разработка моделей


Каждый геймпад должен иметь свою модель. Цена вроде как визуально приемлимых моделей еще вчера составляла около $20. С курсом доллара сегодня это стало дороже в 2 раза.

Но все эти модели достаточно высокополигональные: около 200к полигонов. Самое минимальное, что удалось найти - это 100к полигонов.


По этой причине геймпады пришлось моделить и текстурироовать самостоятельно. Результаты работы приведены на первой картинке статьи.


Последний геймпад - это геймад для случая, когда геймпад не распознан. Внешний вид этого геймпада не принципиален. Потому модель была сделана на основе нескольких реальных геймпадов. В конце, прикидывая то как придется рисовать иконки кнопок, все же пришлось переделать треугольную кнопку. Другие геймпады сильно менять нельзя.

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Далее скачал SubstancePainter, создал карты материалов, маски:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

А вот и протекстурированные модели:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Модели выше еще были откорректированы (в основном материалы, шейдеры) так как нужно их стилизовать под T-Reload.

Вот модель геймпада xBox в игре:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Геймад от Nintendo заставил немного понервничать. Дело в том, что у меня его нет и по фотографиям из сети я не мог понять, что у него за линии на корпусе. Позже пришел к тому, что корпус геймпада немного прозрачный, а линии - это конструктивные внутренние элементы, которые просвечиваются через пластик.


Так выгдядит редактор наших геймпадов:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

А здесь геймпад PS5 и xBox непосредственно в T-Reload:

Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост
Интеграция геймпада, 2 месяца спустя Gamedev, Инди, 3D моделирование, Интерфейс, Компьютерные игры, Игры, Графика, Компьютерная графика, Меню, Геймпад, Unity, Blender, Инди игра, Видеоигра, Разработка, Видео, Длиннопост

Завершение


На данный момент мы провели несколько тестов того как люди взаимодействуют с системой настройки управления. Все недочеты исправлены. Переходим к доработке системы вывода иконок помощи в процессе игры :)


VK // Twitter // Instagram // DTF // Habr

Показать полностью 19 1
27

Анонс моей игры в steam

Привет!

Спешу поделиться инфой о игре, которую делаю уже более двух лет. Недавно она появилась в steam в разделе «скоро выйдет»

Morbid Inhale это драйвовый шутер с видом сверху про зомби апокалипсис.

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


Играем за выжившего человека, одетого в космический скафандр. О том, как так вышло, игра расскажет в сюжетной кампании.

Анонс моей игры в steam Инди, Gamedev, Topdown, Зомби, Indiedev, Скриншот, Unity, Madewithunity, Gameplay, Шутер, Видео, Гифка, Длиннопост

Коротко местного зомби можно описать так - «Его нельзя подкупить. С ним не договориться. Ему не ведомы жалость, раскаяние или страх. И он ни за что не остановится. Никогда.»


Герою остаётся только взять пушку побольше и наматывать мертвечину на маховик борьбы за жизнь.

Анонс моей игры в steam Инди, Gamedev, Topdown, Зомби, Indiedev, Скриншот, Unity, Madewithunity, Gameplay, Шутер, Видео, Гифка, Длиннопост

В арсенале множество разных видов оружия от револьвера и пулемета до самонаводящихся ракет и генератора шаровых молний.


Из убитых зомби выпадают полезные бонусы и паверапы: аптечки, броня, двойной урон, невидимость, ускоритель стрельбы и т.д.

Анонс моей игры в steam Инди, Gamedev, Topdown, Зомби, Indiedev, Скриншот, Unity, Madewithunity, Gameplay, Шутер, Видео, Гифка, Длиннопост

У игрока есть три перка:


Огненное кольцо – вокруг игрока образуется кольцо огня, которое отталкивает и сжигает зомби.

Анонс моей игры в steam Инди, Gamedev, Topdown, Зомби, Indiedev, Скриншот, Unity, Madewithunity, Gameplay, Шутер, Видео, Гифка, Длиннопост

Зажигательные патроны – оружие стреляет быстрее, мощнее, не расходует боеприпасы, пули поджигают зомби и прошивают их насквозь.

Анонс моей игры в steam Инди, Gamedev, Topdown, Зомби, Indiedev, Скриншот, Unity, Madewithunity, Gameplay, Шутер, Видео, Гифка, Длиннопост

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


У каждого перка определенное время действия и время перезарядки.


Вы получаете опыт, когда убиваете зомби. При достижении некоторого количества опыта повышается уровень. С каждым новым уровнем даётся одно очко прокачки навыка. Можно прокачать наносимый урон, увеличить шкалу здоровья, быстрее перезаряжаться, прокачать работу перков, ускорить их перезарядку и т.д.


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


Помимо сюжета доступны четыре режима выживания, условия и правила разные, цель всегда одна – продержаться как можно дольше, набить как можно больше опыта.


Глобальная таблица рекордов покажет ваши результаты наряду с другими игроками.

Работать над игрой начал в феврале 2019 г.

Команды у меня нет, бюджета тоже, делаю один, без ансамбля, после основной работы и в выходные.


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

Одиночную кампанию можно пройти от первых обучающих уровней до битвы с боссом. Остаётся доделать левел арт, навести красоту, часть которой предстоит смоделить и нарисовать.

Нужно сделать примерно половину музыки. Музыку делаю под стать происходящему на экране – ритмично, тяжело, брутально.


Планирую закончить в феврале 2022 г.

Надеюсь, Вам понравится!


Буду признателен за добавление в список желаемого.

На текущем этапе это будет максимально крутая поддержка для проекта.


Страничка в steam

Сайт с инфой о игре

Трейлер на YouTube

Показать полностью 5
24

Water Simulation

Появилась возможность рассказать о том как мы создавали жидкость для TReload. Нам всего лишь нужно было залить уровни кислотой. Кислоты должно быть много, площади затопления огромные :) Один из финальных результатов:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Визуально кислота должна была представлять из себя грязную воду с желтым оттенком. Вот референсы:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Кислота должна поддерживать физическое взаимодействие с объектами, которые в нее брошены: рисовать волны, пену. Так же должна быть возможность видеть сквозь грязь. Возможно в уровнях будет небольшой ветер, но это неточно.


Разработка кислоты проводилась в несколько этапов:

- разрабатывались инструменты для работы с кислотой (в основном это инструмент рисования текстурных масок пены)

- разрабатывалась кислота (работали над шейдерами, материалами, логикой взаимодействия, звуковыми эффектами)



Инструмент рисования текстурных масок пены


Механизм рисования достаточно прост.

Условно есть 2 текстуры:

- текстура маски пены (далее маска)

- текстура кисти (далее кисть)


Задача состоит в том чтобы правильно произвести операцию Blit кисти с маской (использовать для кисти соответствующие “scale” и “offset”, чтобы корректно ее спроецировать в нужную область маски).


Чтобы можно было водить кистью по модели и рисовать, нужно чтобы координаты точки пересечения модели и кисти переводились в пространство UV.


Здесь есть 2 решения по части перевода координат:

- использовать “MeshColluder” и из него получать “texcoord.xy” области пересечения луча “Raycast”. В этом случае координаты будут уже приведены к “UV” виду, нам только останется проецировать текстуру кисти в нужную область маски.

- использовать “BoxCollider” и самостоятельно переводить “worldSpace” координаты кисти к UV координатам маски.


Мы использовали второй вариант:

- к модели кислоты добавляется “BoxColider”

- делается RayCast

- worldSpace точка пересечения луча кисти и кислоты переводится в “acidLocalSpace”

- далее эта точка переводится в “UV-space”. Для этого мы делим координаты точки пересечения на размеры кислоты:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Доработчки: механизм отмены (ctrl+z)


Для ввода механизма отмены пришлось изменить подход: была создана ортографическая камера, которая рендерит только слой кистей. Размеры камеры соответствовали размерам кислоты. В области пересечения кисти и маски создавался меш кисти, который рендерился камерой, а далее делался "Blit" с маской. Таким образом появилась возможность отменять действия.


Небольшая демонстрация работы системы рисования масок:



Волны


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

- рисования волн на тектуре кислоты

- волны созданные геометрическим шейдером поверх кислоты

- тесселяция + GPU Instancing и волны

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Справа на рисунке представлена волна, которая создана геометрическим шейдером. Волна слева - плоская.


Кстати, про кубики я писал здесь: Немного о дематериализации в нашей игре


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



Как работает генерация волн


Опишу это простыми словами: есть 2-х мерное уравнение “колебаний”, которое нужно решать каждый кадр. Это уравнение позволяет генерировать распространение волн. С материалом по теме вы можете ознакомиться здесь: ссылка 1

А здесь еще один отличный материал: ссылка 2

Здесь крутой пример исходного кода для Unity: ссылка 3


Мой результат генерации волны (используется стандартная тесселяция от Unity и стандартный шейдер):

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Но генерация волн это еще не все. Если у вас маленький бассейн, то примера с Github должно хватить. А если нужно рендерить море или океан, то возникает масса проблем оптимизации:

- оказывается Unity не поддерживает “Tessellation + GPU Instancing of Standard shaders”

- ближние участки кислоты должны быть высокополигональными (для этого нужно использовать систему “LOD”)

- дальние волны, пену можно не рендерить

- артефакты распространения волн


Самое важное я узнал в самом конце. Unity, почему “Tessellation + GPU Instancing” не не работают со стандартными шейдерами? Для решения этой проблемы пришлось посмотреть сгенерированный код Standard-шейдера, вытащить из него то что вам нужно и вставить это в “Fragment shader”.



Структура водной поверхности, распространение воды на соседние сегменты


Водная поверхность представляет из себя NxN объектов с “LOD”. По мере удаления, объекты с LOD подменяют друг друга так, что на расстоянии X вместо 4-х различных объектов с LOD, рисуется один:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

То есть водная поверхность - это “умная” сетка из разных участков воды. Допустим, вода имеет размеры 8х8 и пусть источник волн возник в ячейке [2,4]:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Тогда мы резервируем соседние N ячеек (в моем примере по одной с каждой стороны) и проецируем текстуру распространения волн на этот участок общей водной поверхности. Проекция текстуры распространения волн показана красным. То есть мы растягиваем и смещаем текстуру для каждого участка воды. Поиск зоны отрисовки волн в Unity выглядит следующим образом:

Кстати, если источник волн на к краю воды, то мы располагаем текстуру с волнами так, чтобы она не уходила за границы воды (на видео этого нет).

А здесь мы спроецировали текстуру на которой должны рисоваться волны (настроили “tilling & offset”):

Таким образом распространение волны происходит на прилегающие соседние объекты, то есть за пределы одного участка воды.

Вот результаты работы симуляции воды и тесселяции:

Генерация волн от объектов сложной формы


До этого момента я упрощенно рассказал и сослался на литературу, описывающую то как генерировать волны в виде кругов. А что если в воду упадет параллелепипед, капсула или еще какой-то объект (в том числе и невыпуклый). В этом случае форма волн должна быть соответствующей.


Чтобы добиться “реалистичной” формы волн, мы поступили следующим образом:

- падающие в воду объекты рендерятся в текстуру _FallTex. (Ортографическая камера рендерит значения глубины упавших объектов умноженные на скорость падения обьекта)

- далее текстура _FallTex размывается и результат размытия передается в текстуру волн

То есть мы вмешиваемся в процесс симуляции воды, добавляем в симуляцию новые значения (новые источники волн).


Здесь показан результат симуляции волн от объектов сложной формы:

Распространение волн на дальние сегменты


Это одна из проблемных задач. Распространение волн осуществляется за счет использования дополнительных текстур. Игрок не способен летать над водной гладью со скоростью пули и присутствовать то в одном месте, то в другом. Поэтому есть возможность переставать генерировать те волны, которые “далеко”. А распространение тех волн, которые близко, нужно плавно переносить из одного водного сегмента на другой. Здесь видно как ведет себя вода при переходе между разными участками симуляции жидкости:

Чтобы передергов с водой не было, нужно иметь 2 текстуры симулирующие жидкость. Одна из них должна симулировать жидкость, а другая должна перекопировать на себя участок с волнами при перемещении игрока (то есть при смене центрального участка воды). Если этого не делать, то возможны такие баги:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Допустим упавший в воду объект поплыл из [2,4] в [3,4] :

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

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

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



Артефакты


Если объект - источник волн расположен на границе разных водных сегментов, то при копировании текстуры распространения волны могут возникнуть артефакты:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост
Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост
Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Эти артефакты связаны с тем, что текстура волн является “Clamp”. Для устранения данных артефактов, необходимо учитывать расположение объектов (проверять расположение относительно стыков) и, в случае необходимости, исключать часть объектов из процесса симуляции волн.



Возможны ситуации, когда возникают щели. Они решаются в тесселляцинном шейдере путем уменьшения высоты отклонения волн. То есть высота волн меняется в зависимости от расстояния до камеры игрока.

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Вот мои тесты тесселяции и попытки объединения Tesselation + GPU Instancing в Standard shader:

Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост
Water Simulation Gamedev, Волна, Симуляция, Компьютерная симуляция, Unity, Игры, Компьютерные игры, Инди, Инди игра, Дизайн, Программирование, Вода, Блог, Арт, Пена, Шейдеры, Компьютерное моделирование, Математическое моделирование, Видеоигра, Компьютерная графика, Видео, Длиннопост

Волны от объектов разной формы:

На этом пока все!

Надеюсь статья была полезна и позволила рядовому читателю понять часть трудностей с которыми сталкиваются разработчики в процессе работы над играми :)


Ссылки на нас:

VK  //  Twitter  //  Instagram  //  DTF  //  Pikabu  //  Habr

Показать полностью 14 9
17

Первый опыт

Пробую освоить новый для себя игровой движок Godot

Пока что удалось сделать какое-то подобие астероида

12

Очень нужна обратная связь

Сделали игру. Показали друзьям/знакомым. Мнения разделились. Одни говорят классно, другие говорят что скучно. Рекламы нет, встроенные покупки начинаются только после 30-го по счёту уровня, да и у нас они один хрен не работают. Выкладываю не ради скачиваний (для этого уже всё настроено в яндексе, в целом норм работает, по деньгам приемлемо). Просто реально очень нужна обратная связь, даже если будет грубо (хотя на адекватность очень надеюсь)). Предварительно скрины прикладываю.

Заранее благодарен всем неравнодушным.

Игру делали 2 человека. Один пилил графику в Blender, второй собирал на Unity. Музыку брали на https://filmmusic.io/ там есть вариант бесплатного использования в иргах, только нужно обязательно указывать автора и ссылку, это в целом не проблема если выделить небольшую панель в меню для этого.

Если вдруг нарушил правила, то модерам моё огромнейшее извинение и полное повиновение сносу.

Android: https://play.google.com/store/apps/details?id=com.DagazStudi...

iOS: https://apps.apple.com/us/app/cyberboom/id1604885697?platfor...

Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Очень нужна обратная связь Игры, Blender, Компьютерная графика, Видеоигра, Unity, Инди игра, Инди, Разработка, Gamedev, Длиннопост
Показать полностью 7
12

Имитация жидкости в бутылке

Работаем над TReload :) Недавно закончил работу над моделированием поведения жидкости в бутылке / колбе, вот результат:

Товарищи, как оцениваете "физику" поведения?

11

Сечем модели плоскостью

Не думал что шейдер рассчения моделей плоскостью вызовет такой интерес, в том числе и у сеньеров на reddit :) Все еще работал над рассечением моделей. Теперь алгоритм стабильно работает на выпуклых высокополигональных моделях типа таких.

Ради эксперимента добавил тесселляцию, работает :)

Да, была проблема с "карнизами":

Сечем модели плоскостью Gamedev, Шейдеры, Сечение, Плоскость, Cgi VFX, Компьютерная графика, 3D графика, 3D, Unity3D, Алгоритм, Компьютерная симуляция, Компьютерное моделирование, Проецирование, Инди игра, Видео, Длиннопост

Но ее удалось решить:

Сечем модели плоскостью Gamedev, Шейдеры, Сечение, Плоскость, Cgi VFX, Компьютерная графика, 3D графика, 3D, Unity3D, Алгоритм, Компьютерная симуляция, Компьютерное моделирование, Проецирование, Инди игра, Видео, Длиннопост

Модель цилиндра невыпклая, потому есть небольшие наложения на основаниях:

Еще можно двигать плоскость сечения вверрх-вниз и качество проекции вершин на плоскость не пострадает (я быстро попробовал). Но мне это не нужно :)

Интересно, кто-то реализовывал подобный шейдер? Поделитесь скринами/видео?

Показать полностью 2 1
Отличная работа, все прочитано!