Серия «TOTAL RELOAD»

Начало разработки игры

Имея некий опыт в разработке игр, а именно опыт в разработке:

- программного кода

- алгоритмов

- арта

- немого нарратива (преподнесения игровой истории)

- интерфейса

- игровых механик

- и еще в чем-то, что сейчас не приходит на ум...


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


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

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

Начало:


Итак, далекий 1997 год, мне тогда было лет 6 и я яростно штудировал журнал "МК". До сих пор помню, классный был журнал. Понятно, что я мало чего в нем понимал, но изучать все это было на самом деле круто. Настящий чертеж самолета или корабля и все это в одном журнале. Журналов было штук 450. Точно не скажу, но мой отец собирал все так как ему тоже было интересено.


Годам к 10 я понял, что буду разработчиком. Неважно кем, да я и не понимал, что разработчиков былвает 100500 видов, но главное разработчиком.

Микросхем и прочего у меня не было. Их вообще нигде не было в моей "деревеньке". Часто приходилось выпаивать/распаивать и так далее. Толком ничего не работало потому, что сделать все 1:1, как написано в книжке, не удавалось.


Ну и ладно подумал я, по телеку шла передача "Позвоните Кузе" и это стало моим новым увлечением. Нет, не игра, а само устройсвто - компьютер! Что в 12 лет можно знать о компьютерах, когда их никогда не видел? В общем поговорив с отцом я собрал коробку из бумаги и сделал что-то, что явно не компьютер. Быстро пришло понимание, что компы это что-то сложнее бумаги, веревки и того кто за это все тянет. Да и игра еще как-то не такая как в телеке, совсем... Что-то не то.

Порывшись в журналах, я нашел печатную плату какого-то старого компа "Электроника". Запустить его не удаось так как от электроники была одна лишь плата XD

Вскоре отец купил комп. Совпадение ли эти или еще что-то??? На компе была WindowsXP, которую я быстро освоил, знал чуть ли не все файлики в папке System32.
Что произошло дальше? Я начал изучать то как все работает. Комп с операционкой был для меня настоящим черным ящиком. Как исследуют черные ящики? Впрочем тогда я не знал как их исследуют, но исследовал примерно правильно. То есть я подавал на вход ящика значение и смотрел что будет на выходе.


Итак, я брал приложение "блокнот", открывал в нем dll, exe и все прочее и думал, что читаю настоящие машинные коды. Частично это было так. Потом я вносил изменения в файл, сохранял файл в папке System32 вместо того что там был. Ну и... Ну и я долго не мог понять что блокнотом бинарные файлы нельзя изменять. Так как блокнот сохраняет файл в другой кодировке и, даже, если его не менять, то файл становится испорченным.

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

Так я разбирался с тем как работает все класса до 7-го. Узнал про #Assembler, @Ida и прочее.
В школе на уроках информатики нам не могли толком ничего рассказать кроме какой-то черепашки, которая, вместо привития интереса к программированию, лично у меня вызвала отвражение :/


И вот как-то однажды при обмене дисками с товарищами я нашел какую-то среду разработки. Это не была VisualStudio и это не был BorlandC++. Даже не знаю что это было. Сейчас думаю, что эт была чья-то крутая курсовая или что-то типа того.


В общем, у меня была среда и она выводила "Hello World!".  Более того, она имела набор примеров вывода картинок, работы с памятью и вообще кучу всего о чем я даже не имел представления. Язык был похож на язык С++. Но это не был ни С++ ни C#.

Итак, делать было нечего, нужно было разбираться с тем, что было. Повозившись с месяц я все же смог собрать без учебников о геймразработке и вообще без всего что-то типа Platupus. Что там было: картинка Су27, облака, горы и враг, который не работал. Самолет летел вверх-вниз, а горы шли на него. Горы рандомно генерировались, убого сбивали самоле, если он касался их.

И да, через какое-то время программа вылетала и я не мог понять В ЧЕМ ДЕЛО. Кажется эта среда разработки не имела отладчика вообще. Код просто компилировался и работал или (чаще) не работал и указывал где есть ошибка.


Несмотря на все это я ликовал и чуть ли не ходил на руках от того что собрал игру. Надо же, ОНО РАБОТАЕТ! Если кому-то интересно, я могу позже опубликовать что-то из игры так как я сохранил ее части на память. Много чего потерялось, но что-то осталось.


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

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


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

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

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

- ощущение пространства. Игровое пространство ощущается. Это незаметно игрокам, но они это чувствуют. Например стоя на выступе ты имеешь превосходство, больше выбора. А вот спрыгнув с него ты уже можеim и не запрыгнуть назад.

- и многие другие...


Все эти особенность сложно (да и бессмысленно) описать в целом. Их нужно рассматривать в контексте игры. Одни особенности важны в одной игре, а в другой они вообще бесполезны.


(На фотке Trello и документация к игре)

Здесь я выкладываю пока наброски процесса разработки:

https://twitter.com/CGAleksey

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

https://www.reddit.com/user/CGAleksey



Думаю на сегодня все.

Спасибо за внимание!

Начало разработки игры Игры, Gamedev, Инди, Инди игра, Компьютерные игры, Длиннопост
Показать полностью 1

Начало разработки игры (команда. часть 1)

Как и обещал. В этом посте будет часть опыта, которую я приобрел в процессе поиска святого грааля/команды.

Плохая команда на дороге не валяется, а хорошая и подавно.

Итак, поехали!


Команда разработчиков.

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


Какие есть требования к членам команды?

Требования ко всему предьявляются исходя из того, что вы хотите сделать. Разумно? А как же иначе. И это нужно держать в голове.

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


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

Все же какие требования предьявляются к инди-разработчикам? Давайте разбираться, это очень непростой вопрос.


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


Что вы планируете создать? Нет-нет, давайте поставим вопрос так: "что вы можете создать?" GTA6, Crysis, Portal4, TeamFortress? Нужно отталкиваться от того что вы можете, а не от того что только что сверкнуло в голове или от того что вы нафантазировали.


Вы можете создать все что придумали/запланировали? Да? Тогда почему до сих пор не создали? На создание всего нужно время? Если вы на самом деле можете все сами создать, то вы золотой человек и мастер на все руки, молодец, таких людей очень-очень и оень мало. Надеюсь вас очень ценят.


Если вы не можете создать все, что придумали, то зачем вам инди? Для души?


<<По волнам моего опыта>>


Школа


С 10 класса я уже пробовал работать в команде. Но что-то никак ничего не удавалось. Школьники они знаете... они такие... в общем-то обычные.

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

Мотивы этой команды:

- попробовать что-то новое

- похвастаться "я делаю игру"

- опыт (может в будущем поможет)


Смотрите, среди мотивов не было:

- желание заработать

- желание совместно работать далше

- даже желания закончить, самоутвердиться, сделать свой продукт


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

Итог: игру допилил сам.



Институт


Итак, теперь я уже знал людей немного больше. Ищем людей, которые имеют:

- огромное желание заработать

- хотят посвятить себя разработке игр

- беспокоятся о качестве продукта


Я уже набрал горку книжек  понял, что на первом курсе точно нужно либу учиться, либо вылетать вверх тормашками. Пришлось выбрать учебу.

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

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

Это все смешно звучит, на деле это совсем не смешно. Это просто дырнь в команде.

Кстати, я закончил школу с дизайнским уклоном, поступил в технический вуз. Вот такие чудеса бывают.


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

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


Следующий шаг был таким: мы нашли дизайнера.

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


Итак, мы уконтрапупили Васю, вроде все хорошо, работаем дальше. 75% игры завершено. Сценарий у нас был, игра проходила тесты. Но тут Васе снова сверкнула мысль и он решил стать сценаристом. Сценарий у нас уже был, все готово для тестов, но нет... Вася придумывает нововведение, которое наносит удар по core-механике игры. Убедить его ни в чем не удается.

Потом было нанесено еще пару ударов.


Итак, как быть с Васей, когда тот плохо понимает, что делает?


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


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

Игра "не пошла" так как ног у нее не было. Я начинаю разбор полетов и перебор ошибок, критику всего. Так же я говорю Васе прямо в каких местах он допустил очевидные ошибки. Понятное дело, ошибок было столько, что Васе моя критика не понравилась. Ну а кому понравится, когда говорят, что твоя игра буквально полностью кака? Так же пришлось подчеркнуть, что я намеренно дал полную свободу Васе, чтобы он видел во что он может привести наш проект.


Итог работы над игрой с инвестором: Вася меня не понял, а только обиделся. Его мнение относительно всего так и не изменилось.

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


Итог: в общем на этом этапе я покинул Васю. Совместная с ним игра была завершена на 75%. Я бы сказал она была классная до того как Вася начал лезть туда куда ему не следует.
Почему я больше не стал работать с Васей? Иногда надо принять то, что лучше остановиться сейчас, чем потратить кучу времени впустую и прийти к разбирому корыту. В мире есть куда более талантливые и опытные ребята с которыми силы будут уходить на "создание результата", а не на войну в команде.


Какие я сделал выводы:

1) конечное решение принимается всегда одним человеком и его нужно выбрать в самом начале формирования команды.


В семье один глава, как правило, - это мужчина (последнее решение за ним).

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

У человека одна голова на плечах и она принимает решение за все тело.


2) члены команды должны быть гибкими


3) члены команды должны иметь представление о том как "это делается".


В следующей статье будет продолжение.


На сегодня все.

До встречи!

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

Начало разработки игры (команда. часть 2)

В предыдущем посте я бегло рассказал о том как пытался собрать команду разработчиков.

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


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

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


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




Еще немного о команде.

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


В чем тут может быть дело? А дело может быть вообще в чем угодно. Но в основном разбор полетов нужно начинать с главного гейм-дизайнера. Кто он, есть ли у него опыт разработки подобного? И куда он/они смотрели при разработке если вдруг что-то пошло не так...

И да, какую команду он набрал? Дальше идем по всем специалистам и по тому что они реально умеют делать.

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


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


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


Игры - это достаточно сложные вещи и быть специалистом во всем невозможно. Почему так?

С одной строны пока вы разрабатываете игру, выходит Vukan/DirectX12,15,25,125 и так далее. То есть технологии не стоят на месте. Все согласны?

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


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

Да, специалистов на все руки нынче не ценят. Еще студентом, я пробовал устроиться в одну очень крупную игровую фирму и понял, что чтобы туда попасть я должен был к тому времени знать все что только можно было знать по С++11.

Что еще немаловажно, знать это нужно было еще пол года назад, а лучше год назад, а лучше до выхода стандарта. Это как старый мем со Swift: язык только вышел, а в сети уже требуют спецов с опытом работы от 4-х лет.


Вернемся к команде, которую я пытался собрать.


После краха с Васей мои руки не опустились. Как говорится: "Все, что нас не убивает, делает нас калеками".

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

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

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

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

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

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


На сегодня все,

Спасибо за внимание!

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

Процедурная анимация движения персонажа

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


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

Ссыли на наработки по игре:

https://twitter.com/CGAleksey

https://www.instagram.com/cgaleksey


Чем не угодили mocap - анимации:

1) нужно искать наиболее подходящие анимации

2) нужно много анимаций

3) визуально анимации должны сочетаться


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


Можно брать готовые анимации с https://www.mixamo.com но есть НО:

1) анимации неуникальны

2) все же урезаный набор анимаций


Побираясь, как бездомный в чьем-то ведре, в поисках нужных анимаций в течении недели я собрал некого Франкенштейна. Именно Франкенштейна потому, что анимаций надыбал отовсюду. Ходил персонаж как офисный работник, крался как эльф 80-го уровня, приседал как человек-паук. Шучу, все было не так уж и ужасно, конечно, для обывателя может и пойдет, а вот меня все же неустраивало разношерстность анимаций. Хотя блендинг и прочие процедурные фишки сильно улучшали дело... Да и ноги не прилипали к земле как надо. Меня это жутко раздражает, когда анимация персонажа не на 100% соответствует тому, что он делает, ноги проходят сквозь пол, руки сквозь стены... ну вы поняли, 21-й век как никак.


Что важно для анимации персонажа: нужно передать ощущение того как персонаж передвигается с учетом физики. Короче, аимация нужна процедурная. Это крайне важно для нашего 3D паззла от первого лица.


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


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


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


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

Отлично, цепляем все к боди, еще немного IK и получаем что-то типа (одно из приближений):

Внимание на лодыжку ^. C ней вечно были проблеммы. Дело в том, что наш робот сделан инженерами-конструкторами и соединения должны гнуться строго по оси и никак иначе. Хотя это далеко не последний вариант робота, но в целом все примерно так. (Спойлер: соединение ложыжки мы все же переделали. Инженеры поставили его на 3 гидропривода, что дало нужное число степеней свободы).



Далее используем наш ИИ для ноги. Не зря же нога у нас обучалась ходить сама по себе без тела XD


Подключаем ИИ к ногам и говорим им болтаться:

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

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

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

Здесь экспериментирую с тем как робота придавливает плита. Робот должен корректно анимировать позицию своего тела:

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


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

В тестах использовалась модель-аналог робота Федора. Извините, это неточная копия. Чертежей не было, собрали "на глаз" XD

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

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

Статья о том как художник/дизайнер бодался с системой рисования линий для игры и сделал ее :)

Кому будет интересна статья? Наверно всем, но не бывалым прогерам так как тут ничего нового для них нет. Читателя ждет МНОООГО видео, картинок и обьяснений "на пальцах".

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

Как артист делал систему рисования линий для своей игры Gamedev, Компьютерная графика, Cgi VFX, Игры, Инди, Арт, Видеоигра, Линейная алгебра, Видео, Длиннопост

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

Итак, поехали. Нужно было сделать систему рисования линий для игры. Линия должна рисоваться от лазерного луча на любой поверхности. Стал делать свою систему потому, что на AssetStore ничего такого нет. Есть одна система, но она:
1) рисование на каждом обьекте (static/dynamic) приводит к тому, что обьект вырывается из батчинга и создает +1 drawCall.
2) система рисует только точки. Ну типа как в Splatoon. Можно рисовать пятна, но не линии.
Очевидно, это мне не подходит, так что go делать что-то свое.

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

В сети можно найти кусочки кода и даже проекты, которые позволяют рисовать следы на какой-то одной модели.

Требования к системе такие:
- линии должны рисоваться на статических обьектах, но не всех. Динамические обьекты должны не давать рисовать линию на полигонах, которые ЗА ними.
- работает максимально быстро
- работает на любом железе на котором работает Unity
- число линий неограничего
- число цветов линий - неограничено
- рисовать можно не только линии

Задача эта для меня новая, никогда такого еще не делал, пришлось повозиться.
Как рисуются линии в комп-графике? Есть модель и игрок проводит по модели лучем. На модели должен остаться след. Нужно найти в каком месте рисовать этот след.
1) очевидно, полигоны, которые смотрят ОТ начала рисования линии не будут содержать на себе след. Потому, что это полигоны с противоположной стороны модели. Их можно отбраковать.
2) есть полигоны, которые смотрят на игрока и которые попали в область рисования линии. На них предположительно будет след от линии.

Ну вот, для наглядности:

Как артист делал систему рисования линий для своей игры Gamedev, Компьютерная графика, Cgi VFX, Игры, Инди, Арт, Видеоигра, Линейная алгебра, Видео, Длиннопост

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

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

Вот фото работы этого алгоритма:

Как артист делал систему рисования линий для своей игры Gamedev, Компьютерная графика, Cgi VFX, Игры, Инди, Арт, Видеоигра, Линейная алгебра, Видео, Длиннопост

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

Здесь просто тесты алгоритма, смотрел как работает:

В сцене может быть несколько "рисователей". Вот видео. где одновременно рисуется больше одного пятна за 1 раз. Кстати, тут видно, что нужно рисовать именно линии, а не пятна. Иначе между точками есть пробелы.

Здесь видно (подсвечиваю) полигоны на модели и какие полигоны секутся лучем (рисуют линию):

Здесь наглядно видно как работает рисование линий:

Удалось сечь обьект и рисовать на нем линию. Здорово!
Осталось сделат самую малость: найти обьекты, которые будут рисовать на себе линии.Вот водишь ты лучем в пространстве и нужно знать с чем луч пересечется. Для этого есть Оctree & BVH. Первый хорош для статики, второй для динамических обьектов. Спасибо GameDev.ru (а именно крутым парням foxes и kkolyan за подсказки).

Внедряем деревянные структуры, печем, запускаем. Работает!
Это не конечный вариант, но все же. Вот как смотрится след в действии:

Спасибо за внимание. На данный момент я занимаюсь больше артом и даже на такие беглые статьи не хватает времени.

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

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

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

Как артист делал оптимальные лазерные лучи

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост

Настало время оптимизации нашей иры-головоломки от первого лица. В посте будет много картинок, видео и НЕ БУДЕТ математики / программирования. Вся "математика" будет описана на пальцах, показаны только общие идеи. Итак, под оптимизацию попали лазерные лучи.
До этого в grayBox мы использовали юнитевский LineRendere.

Достоинства:

- берется из коробки

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


Недостатки:

- работает неоптимально.


Неоптимальность незаметна на одном, 2-х и даже на десяти лучах. Но вот если у вас в игре лазер, который отражается от зеркал, делится на несколько лучей при прохождении через призму, имеет несколько цветов... то тут уже стоит прикинуть сколько +drawCalls накинут сверху только лучи. Ну, у нас могло набегать 4, 8 и даже 30 drawCalls.


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


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


3/4, сбоку, вразрезе, чтобы моделлер лучше понял конструкцию:

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост

Первые наброски:

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост

Наброски приемника луча:

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост
Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост
Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост
Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост
Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост

Работает в целом так: луч попадает в приемник и применик передает сигнал о том, что в него попали. На основе этого разворачивается одна из игровых механик.


Больше скетчей, если интересно, выкладываю сюда:

https://twitter.com/CGAleksey

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

На https://vk.com/dronesgame пока ничего не выкладываю, но если добавятся больше 1.5 человека XD, то и туда начну скидывать.


По коду.

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

Написал разработчику Vectosity чтобы узнать в чем проблема, когда исправит. С его слов это неисправимый косяк GPU. Короче нафиг-нафиг-нафиг... потом буду заикаться от него из-за того что будут вспоминать добрым словом.


Итак поехали. Что нужно:

- система рисования всех лучей на GPU за 1drawCall;

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


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

Этот набор параметров (array) мы подаем в шейдер при генерации меша на GPU.

Так же мы подаем на GPU набор параметров (тоже array): цвет, индек текстуры, толщина луча и всего чего вам еще вздумается.


И да, лучше чтобы эти параметры подавал какой-то менеджер. То есть в менеджер мы подаем какие лучи нарисовать, а он собирает данные и передает их на GPU.


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

1) на концах луч должен быть светлее так как это выглядит естественно. Используем grayscale-маск текстуру для этого;

2) переход от центра луча к перифирии (цвет и прозрачность) задаются grayscale-маской;

3) ну и добавим какой-нибудь шум, типа cloud и будем анимировать его, чтобы имитировать туман или движение воздуха.


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


Как по точкам на GPU нарисовать линию. Идея такая:

- в шейдере линия имеет вектор направления (начало-конец)

- есть доступ к позиции камеры.


Ну и все, делаем в шейдере сross(lineDir, camDir) и получаем направление вектора толщины линии. Передаем в шейдер параметром толщины и им можем регулировать толщину линии.

На словах все просто, на деле ушло много времени. Вот рисую линии на GPU по координатам:

Как видно, все ровненько и красиво и текстуру не колбасит как на предыдущем видео. И что там за проблемы с GPU у него были... Так можно отрисовать хз как много линий, зависит от того сколько вершин Unity разрешает использовать (если не ошибаюсь). Вроде 65к в последний раз было максималкой, а это куча линий, мне хватит :)



Версия сырого луча и приемника луча:

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост



Это видео с грейбокс-тестов. Ну, бокс как видно, совсем не gray XD Еще здесь нет нормальной градиентной маски на луче. Луч сильно упрощен: (нет тумана, градиент подобран на скорую руку, концы луча не засветлены... короче, артист не занимался тогда еще этим)

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

В итоге линия (лазерный луч) выглядит так. Здесь уже все:

- градиенты настроены

- туман пост-процессом наложен поверх полупрозрачного луча

- концы засветлены

- есть немного анимации тумана

- вся отрисовка на стороне GPU за 1 drawCall, красота :)

Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост
Как артист делал оптимальные лазерные лучи Арт, Художник, VFX, Cgi VFX, Программист, Инди, Gamedev, Прототип, Прототипирование, Лазер, 3D моделирование, Скетч, Инди игра, Игры, Видеоигра, Видео, Длиннопост

Надеюсь кому-то пост понравился и кто-то нашел что-то полезное для себя.

Еще раз ссылки на материалы по игре:
https://twitter.com/CGAleksey

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

На https://vk.com/dronesgame


Спасибо за внимание :)
Показать полностью 10 3

Работа над интерьером в игре

Привет всем!
Вот мои некоторые попытки представить интерьер внутри игры, которую мы с товарищем делаем в гараже и на коленке 😂

Здесь часть потолка:

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

А это часть стены:

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

Немного работал над полом, креплениями стекла и монтажом игровых объектов в пол:

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост
Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

Здесь наброски соединительных коробок и электропроводки 😉 Ну и немного спойлеров об игре

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост
Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

Модули, которые формируют логические задачи-головоломки. Ещё не закончили экспериментировать с ними.

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

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

Работа над интерьером в игре Gamedev, Инди, Арт, Скетч, Интерьер, Инди игра, Видеоигра, Game Art, Длиннопост

Здесь больше эскизов / набросков / схем уровней и вообще всего по нашей игре:
http://twitter.com/cgaleksey
http://instagram.com/cgaleksey

Спасибо зза внимание, всем хороших выходных :)

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

Что надо успеть за выходные

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

ПОЕХАЛИ

Эксперименты с персонажем для игры (скетчи)

Немного экспериментировал с формами персонажа для игры, которую делаю с товарищем на коленке в гараже :) Не судите строго, ненастоящий художник.

Финальный набросок:

Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост

Некоторые попытки/эксперименты:

Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост
Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост

Здесь ещё пробовал экспериментировать с формой головы-корпуса. Немного менял принцип работы дрона:

Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост
Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост
Эксперименты с персонажем для игры (скетчи) Инди игра, Инди, Видеоигра, Игры, Gamedev, Скетч, Прототип, Робот, 3D моделирование, Длиннопост

Больше работ и прогресса по игре можете увидеть здесь:

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


На этом все, всем хороших выходных!

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