Серия «TOTAL RELOAD»

18

Часть процесса работы над дизайном игры

Все еще работаем в гараже над графическим дизайном игры: главный герой, персонажи, окружение.


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


Здесь один из вариантов головы главного героя. Версий головы персонажа, наверно, за 200 перевалило уже. Такая же история с руками. С фалангами пальцев оказалось немного проще, всего версий 15 было сделано.

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост


А это варианты врагов.

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост

Нет, это не футуристическая сушилка для волос, это тоже версия босса / врага:

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост


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

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост


Скетчи других персонажей. Правки размыты.

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост

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

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост

А на этом лежала печенька, ну и булочка. А вооще, это скетчи персонажей. Не скажу пока каких. Не все же карты открывать прямо сейчас :D

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост
Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост
Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост
Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост

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

Часть процесса работы над дизайном игры Концепт, Скетч, Gamedev, Игры, Видеоигра, Создание персонажа, Персонажи, 3D моделирование, 3D, 3D графика, Дизайн, Графический дизайн, Инди, Инди игра, Дневник разработки, Арт, Концепт-арт, Компьютерные игры, Робот, Злодеи, Длиннопост

На сегодня все. Больше набросков и работ можете найти здесь:

https://twitter.com/CGAleksey

https://www.instagram.com/cgaleksey/


Всем хороших выходных :)

Показать полностью 11
316

Вот это поворот!

Собрали прототип и дали паре ребят для тестов. Ребята играют, проходят, мы смотрим на то как играется. В конце я решил задать глупый вопрос: "как бы вы описали игру, она вам что-то напоминает или вы такого еще не видели?"


И тут один игрок раскрыл мне глаза. Далее часть диалога, игрок - И:

И: ну, это напоминает Portal, Talos Principle и Witness

Я: что именно напоминает Portal?

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

Я: где порталы? какие порталы?

И: ну вот эти (и показывает)

Я: так это же спец.двери

И: ну какая разница, ты же проходишь через них и куда-то попадаешь...


И тут мне уже нечего было ответить:

Вот это поворот! Игры, Тестирование, Игроки, Разработка, Инди, Gamedev, Реальная история из жизни, Портал, Альфа-тест
72

Немного о нашей безымянной студии и о том, что мы делаем

Привет всем! Пока мы, на самом деле, безымянная студия и проект, который делаем имеет техническое название "CGDrone". Сегодня мне захотелось написать эту короткую статью. Понимаете, замучился от всей этой работы со скетчами, цветами, алгоритмами и исправлением багов во вращениях, которые реализованы с помощью кватернионов. Последние, к слову, меня порядочно побили.

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


Начало


Дело было в институте, конец магистратуры. Мы с моим товарищем из параллельной группы решаем создать свою супер-пупер 3D-головоломку от первого лица. Такую, что просто… ну просто бомба и огонь. Надеюсь вы поняли меня. Почему решили делать игру? У меня есть опыт в рисовании, окончил школу с ИЗО уклоном, у напарника есть опыт в создании 3D-моделей. Ну и оба мы программисты как-никак, поработали в фирмах в т.ч. игры делали. Почему головоломку? Потому, что нам нравятся головоломки.


Работу мы разделили примерно пополам ну или делали кто что может. С одной стороны, если в команде 2 человека, то делить работу можно пополам! Удобно же :) И на контроль за результатами работы всех разработчиков не так много времени уходит как, скажем, ушло бы если бы в нашей команде было 30 человек.


В итоге все встало на свои места: я стал отвечать за весь код и графику (шейдеры, освещение, пост-эффекты), а напарник за уровни и юридические вопросы. Вначале, кстати, он моделил лучше меня. Но со временем стало понятно, что просить его переделывать что-то каждый раз - это дергать человека и отрывать от основной работы. К тому же требования к моделям могут меняться и человек сойдет с ума от 1000 правок в день. Так что позже модели перешли под мою ответственность.


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

Не поверите, но у меня набралось 2 толстенные папки со скетчами по проекту и иногда мне все еще приходится набрасывать картинки/перебирать идеи/сопоставлять объекты:

Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост

Скетчи, которые я набрасывал выглядят примерно так:

Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост

На данный момент мы опубликовали большую часть скетчей в твиттере / инстаграме.


Были еще знакомые, мы попытались подключить их к проекту. Кроме нас в команде было две девушки (дизайнеры-художники), гейм-дизайнер и программист. Через 2-3 недели программист пошел работать в крупную фирму, после попыток прописать структуру проекта и сборки одного игрового объекта - условный объект с "глазом" (который следит за игроком). Потом нас покинули дизайнеры. Гейм-дизайнер оказался крепким. Он был с нами до последнего, а вот результатов его работы у нас не было :)


Кстати, игра на тот момент выглядела так:

Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост

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


Еще несколько скетчей:

Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост
Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост

Коротко о не коротком, о сети


Изначально мы планировали сетевой режим. Вот то, что не стоило делать, так это сеть. Я пытался вытягивать сеть до последнего. Просто как кот вцепляется в рыбу, так и я вцепился намертво в сеть. В итоге мы реализовали комнаты, уровни, сетевое взаимодействие основных объектов. Но все это двигалось очень долго, тесты и отладка занимали тьму времени.


Интерфейс игры тогда выглядел так:

Немного о нашей безымянной студии и о том, что мы делаем Gamedev, Команда, Indiedev, Разработка, Истории из жизни, Реальная история из жизни, Личный опыт, Опыт, Поиск команды, Поиск людей, Игры, Компьютерные игры, Видеоигра, Энтузиазм, Студия, Разработчики игр, Разработчики, Unity, Блог, Работа, Длиннопост

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

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

Лучше синица в руках, чем журавль в небе

Попытки расширить команду


Позже мною предпринимались попытки привлечь в проект крутых художников. Но не пошло.


Очевидные вещи, которые я выяснил:

- профессиональные художники хотят получать денежки, а у нас есть только энтузиазм

- непрофессиональные художники (из моего личного опыта), в основном, любят покреативить и вместо того чтобы сделать все максимально по ТЗ, их заносит и они по-полной берут на себя роль главного ГД и начинают работать уже в этом направлении

- мотивировать команду - это работа на которую затрачивается много времени


Для себя мы поняли еще одну вещь: у нас нет времени на выдачу ТЗ ребятам, которые работают на энтузиазме потому, что высока вероятность их ухода. Так что мы решили делать все сами и никого не искать, не расширять команду. У этого решения есть плюс, который я описал бы так:

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

На данный момент мы все так же усердно работаем над проектом. Сделали кучу основной работы, работаем над оптимизацией, полировкой графона, анимациями и историей.

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


А вот и ссылки на нас:

https://twitter.com/CGAleksey

https://www.instagram.com/cgaleksey

https://vk.com/treload

Показать полностью 13
8

Немного о дематериализации в нашей игре

А мы все еще работаем в гараже над графической частью игры! Работа над скетчами вроде завершена! Набралась целая стопка изображений и чертежей игровых обьектов, идей по тому как это все подключается и взаимодействует, теперь осталось главное - собрать :)


Перед вами результат работы моего geometry - шейдера :

Немного о дематериализации в нашей игре Инди игра, Gamedev, Разработка, Блог, Cgi VFX, Шейдеры, Программирование, Инди, Компьютерная графика, 3D графика, Визуальные эффекты, Эффект, Видео, Игры, Длиннопост
Немного о дематериализации в нашей игре Инди игра, Gamedev, Разработка, Блог, Cgi VFX, Шейдеры, Программирование, Инди, Компьютерная графика, 3D графика, Визуальные эффекты, Эффект, Видео, Игры, Длиннопост
Немного о дематериализации в нашей игре Инди игра, Gamedev, Разработка, Блог, Cgi VFX, Шейдеры, Программирование, Инди, Компьютерная графика, 3D графика, Визуальные эффекты, Эффект, Видео, Игры, Длиннопост
Немного о дематериализации в нашей игре Инди игра, Gamedev, Разработка, Блог, Cgi VFX, Шейдеры, Программирование, Инди, Компьютерная графика, 3D графика, Визуальные эффекты, Эффект, Видео, Игры, Длиннопост

Шейдер позволяет использовать в игре эффкт дематериализации: рассыпание обьекта на кубики / исчезновения кубиками.
Как это работает в общем виде: в шейдер подается текстура - маска в которой содержатся пиксели - смещения.
Параметр _Burn смещает вершинки в зависимости от значений в текстуре и все это выглядит так, будто кубики двигаются.


А вот и обобщенное видео процесса:

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

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

Одна из версий шейдера (если кому пригодится) предсавлена здесь.
<Шейдер не должен работать на OGL и Metal>

Обновления по проекту обычно выкладываем здесь:

https://vk.com/treload
https://twitter.com/CGAleksey

https://www.instagram.com/cgaleksey/


На этом все, всем хорошего вечера :)

Показать полностью 4 2
8

Антигравитационные поля и другое беззаконие в гипермире

А мы все ещё работаем над уровнями нашей 3D-головолмки от первого лица .
Проводим плей-тесты, дорабатываем механики / головоломки / сценарий :)

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

Антигравитатор в нашей игре сейчас выглядит так:

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

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

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

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

Здесь пример наброска сцены уровня и вариантов антигравитационных ламп:

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

На этом пока все, кому интересно больше, то добро пожаловать сюда:
https://twitter.com/CGAleksey
https://www.instagram.com/cgaleksey
https://vk.com/treload

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

Овердравы из T-Reload

Фотоотчет о результатах работы за последни 2 недели.

Техническое название игры: T-Reload

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

Овердравы из T-Reload Gamedev, Игры, Idie, Инди игра, Уровень, Скетч, Дизайн, Screenshotsaturday, Набросок, Рендер, Видеоигра, Блог, Скриншот, Длиннопост
Овердравы из T-Reload Gamedev, Игры, Idie, Инди игра, Уровень, Скетч, Дизайн, Screenshotsaturday, Набросок, Рендер, Видеоигра, Блог, Скриншот, Длиннопост
Овердравы из T-Reload Gamedev, Игры, Idie, Инди игра, Уровень, Скетч, Дизайн, Screenshotsaturday, Набросок, Рендер, Видеоигра, Блог, Скриншот, Длиннопост

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


А вот и наброски задач на листе, овердравы которых представлены выше:

Овердравы из T-Reload Gamedev, Игры, Idie, Инди игра, Уровень, Скетч, Дизайн, Screenshotsaturday, Набросок, Рендер, Видеоигра, Блог, Скриншот, Длиннопост
Овердравы из T-Reload Gamedev, Игры, Idie, Инди игра, Уровень, Скетч, Дизайн, Screenshotsaturday, Набросок, Рендер, Видеоигра, Блог, Скриншот, Длиннопост

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

twitter
DTF
pikabu


Вот такие пироги, надеюсь было интересно :)

Всем хороших выходных!

Показать полностью 4
25

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
12

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

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

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

Отличная работа, все прочитано!