Как написать собственный игровой движок на C++ / Хабр

Немного о 3D для народа. Полигоны и топология.

Немного о 3D для народа. Полигоны и топология.
Спасибо за положительные отзывы, продолжаем постигать таинства 3Д.
В этот раз, наверно, поясню за процесс моделирования, в частности за сетку, постараясь не сильно углубляться в подробности, но при этом передав суть и принцип работы. Получилось все равно весьма объемно, поэтому заваривайте чаёк и устраивайтесь поудобнее, это надолго.
Все моделирование в 3д может строиться по 2м принципам: из полигонов и описываться математическими функциями при помощи плавных линий (NURBS). Принципиально разница следующая: при NURBS детализация модели не теряется при любом приближении, в отличии от полигонального моделирования, когда рано или поздно при приближении мы уткнемся в плоскости, которые и являются полигонами.

https://preview.redd.it/q9rowbv8nkm41.jpg?width=1588&format=pjpg&auto=webp&s=0081fe920562bfbecde7f8a69f0a591e277e6a5c
NURBS используется преимущественно в САПР софте, благодаря точности и постоянному уровню детализации. Ну, а в классической трехмерке точность не так важна, да и не будет никто приближать высокополигональную модель на столько, что полигоны станут заметны. А если и будут, то увеличат их плотность и все опять станет плавненьким.
Итак, как уже говорилось в предыдущем посте, есть 3 основных пакета для моделирования (хотя в действительности их гораздо больше): Autodesk Maya, 3D’s Max и Blender. Все эти пакеты работают с полигональным моделированием.
Что такое полигон? Это плоскость, в классическом варианте четырехугольник, который в свою очередь состоит из граней (эджей – edge) и вершин (вертексов – vertex). Как все мы помним из курса школьной геометрии, для того, чтобы определить положение плоскости в пространстве, нужно иметь 3 точки. В случае, если точек больше, могут возникнуть проблемы в виде того, что не все они могут лежать в одной плоскости. 3D также основано на этом принципе и для определения положения полигона в пространстве модели используются координаты его вершин. Но полигон четырехугольный (классический), а однозначно плоскость можно провести только через 3 точки. Поэтому вполне реален вариант, при котором одна из точек будет выбиваться за пределы плоскости и мы получим такую картину:

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

Вы думаете, что оно как слева, а на деле оно как справа
В 3Д хорошим тоном считается использование при моделировании только четырехугольных полигонов, называемых квадами (quad). Также существует понятие триса (tris) – треугольного полигона – и n-гона – полигона с 5 и более углами. Важное уточнение – квад это не когда на полигоне визуально 4 вершины, а когда их реально 4.

https://preview.redd.it/orjzmm4tnkm41.jpg?width=507&format=pjpg&auto=webp&s=094d0a442fd6d1ebdac0ec7fc249fae5d85fb492
Соответственно, квад не обязательно должен быть квадратом или прямоугольником – он может быть любой ломаной формы, главное, чтобы было 4 вершины, и они лежали в одной плоскости. Полигон, вершины которого не лежат в одной плоскости называют непланаром (non-planar), т.е. неплоским (вы его видели на первой картинке).
Как подытог: сетка полигональных объектов может состоять из трисов, квадов и n-гонов, в идеале только квадов, желательно плоских. Кстати, сетка полигонов на модели называется топологией модели.
Возникает вопрос: а почему именно квады? Смотрим дальше. Принцип создания многих моделей заключается в создании довольно грубой формы объекта с последующим ее сглаживанием. Называется этот процесс сабдивом (англ. subdiv, subdivision - подразделение). Суть его заключается в разбиении исходного полигона на 4 маленьких. Повторять до вылета программы создания достаточного уровня детализации.
https://preview.redd.it/kjpxxfswnkm41.png?width=1483&format=png&auto=webp&s=536730e21601d31bdcd77f46ba7ad5f4c431ce0f
Более того, новые полигоны могут путем интерполяции (поправьте, если процесс называется не так) изменять свое положение. Тридэшник не писатель, поэтому лучше он покажет полигоны и все станет ясно.
https://preview.redd.it/eug7i1mznkm41.png?width=905&format=png&auto=webp&s=b87d91c7cdb9b8f6207b4e141537a5bdb00f66f7
Этот процесс хорошо работает с квадами, но может вызывать проблемы при использовании трисов. Пример:
https://preview.redd.it/utakk2p3okm41.jpg?width=1097&format=pjpg&auto=webp&s=c34f59a49a7d7d02dfb067f61b6c02e6cd0ba3a3
Зачастую подобные треугольники портят ситуацию на изгибах объектов и переходах геометрии. Их наличие при сабдиве вызывает различные потяжки и искривления топологии, которые и влияют на внешний вид модели и в частности на блик. Про освещение в трехмерке расскажу как-нибудь потом, а сейчас продолжаем.
Хоть и возникает ощущение, что без треугольников в некоторых случаях вот прям никак не обойтись, всегда есть лазейки и способы избавиться от них. Искусство моделить без треугольников приходит исключительно с опытом, кнопки убрать трисы и n-гоны (еще) не придумали. Вот один из простых примеров, как один и тот же объект можно сделать с использованием трисов и без них.
Шайтанама
Тонкости избавления от non-quad геометрии описывать не буду, т.к. процесс довольно нудный, а для понимания нужно знать софт. Мы же тут собрались для баянов общего развития, поэтому идём дальше.
Нужно понимать, что не всегда трисы и n-гоны вызывают проблемы. Они вполне допустимы в местах, где сетка плоская. Да, сама сетка после сабдива будет не особо аккуратной и с ней будет неудобно работать, но по правде говоря, все манипуляции с моделью производят до сабдива, он предназначен лишь для сглаживания поверхностей, т.е. получения финального вида модели. После него работать конечно можно, но гибкость работы резко снижается.

https://preview.redd.it/sqb9mqrbokm41.png?width=1218&format=png&auto=webp&s=362a8da2c27d8a51b2bc2293d7fddce28d5c6a2b
При моделировании необходимо стараться сделать сетку равномерной и не допускать участков с большой концентрацией полигонов и не допускать излишне растянутых. Но, как уже говорилось, есть нюансы. Говоря о равномерности сетки необходимо помнить об уровне детализации, который может быть получен посредством этой сетки. Простым примером являются персонажи в мультфильмах и играх. Если посмотреть внимательно, можно увидеть, что на голове плотность полигонов заметно выше, чем по всему телу. Это сделано из-за того, что при анимации лицо должно выражать большое количество эмоций. Полигоны при этом также двигаются, где-то возникают очаги их концентрации, где-то наоборот сетка разглаживается. Все эти процессы возможны только при достаточно плотной сетке, в противном случае детализации будет недостаточно, чтобы красиво отразить мимику персонажа, не говоря уже о том, что он станет более полигональным.

https://preview.redd.it/hsffue1dokm41.jpg?width=736&format=pjpg&auto=webp&s=b5d19cee3bfc2534479156b340aeeae971a178c6
Ниже пример разных топологий:
1 – излишне плотная сетка, работать неудобно;
2 – оптимальная сетка – не слишком плотная, но при этом обеспечивающая достаточный уровень детализации;
3 – плотная треугольная сетка – работать крайне сложно – при взаимодействии с одним полигоном трудно предсказать изменение полигонов, окружающих его. Квад-сетка в этом плане гораздо более очевидная и гибкая.

https://preview.redd.it/s322rcidokm41.jpg?width=480&format=pjpg&auto=webp&s=d3f1512417e99fbd99a660a25125b8e54d63d96c
Особняком стоят игры, а вернее топология для них. Еще не забыли, что все полигоны в 3D софтах разбиваются на трисы? Так вот, проблема в том, что каждый софт делает это по-своему и если Макс поставил эдж в одном месте, Майя поставит его в другом. Дальше картинка для понимания.

https://preview.redd.it/sdg7vs4fokm41.png?width=1244&format=png&auto=webp&s=4a2c775bdde1638fef427e2ce77d40c2218a3837
Видите, как сильно способ триангуляции влияет на профиль модели? А крутой профиль это больше половины успеха, ведь если взять любую модель и отбросив все материалы взглянуть на ее профиль, большая часть деталей пропадет, а выразительный силуэт останется. Но я отвлекся.
https://preview.redd.it/qscbvobjokm41.jpg?width=807&format=pjpg&auto=webp&s=83deffa895e6f54671f49d0a078827aa6e6040cc
Хоть пример с непланаром весьма утрирован, суть ясна – каждый пакет триангулирует (т.е. разбивает на треугольники) по-своему и игровые движки в том числе. Поэтому, зачастую перед импортом игровой модели в движок ее предварительно триангулируют вручную, чтобы исключить возможное неверное отображение модели после ее автоматической разбивки. Ну и вообще процесс моделирования для игр происходит по довольно сложной схеме, тянущей на несколько постов. Когда-нибудь запилю разбор.
https://preview.redd.it/4f4bdeamokm41.jpg?width=2304&format=pjpg&auto=webp&s=33976cc951906a9537eea3c1bf1957d8d6affd40
Также кратенько расскажу про особенности моделирования в программах для скульптинга на примере ZBrush. Там ситуация с моделированием несколько отличается от классического. В данном случае работа происходит с максимально плотной сеткой полигонов, благодаря чему, при помощи различных кистей (аля фотошоп), влияющих на геометрию, можно создавать любую форму практически без ограничений.

Справа можно видеть кисти с демонстрацией их функционала
Работа ведется не с каждым полигоном в отдельности, а скорее с областью, которая попадает в область действия кисти. Задумываться над топологией на данном этапе не нужно, с небольшим нюансом. На определенном этапе, при значительном наращивании геометрии, сетка искажается и ее нужно пересчитывать (нажатием на кнопочку), т.е. работа ведется с существующими полигонами, а не рисованием новых, как может показаться.
После перерасчета сетка вновь становится равномерной
В отличии от ZBrush, программа 3DCoat использует так называемые воксели, иначе говоря – объемные пиксели. Углубляться в технологию не буду, т.к. в Coat-е не работаю, а для понимания что и как этого хватит.
Минусом использования этих программ является сверхплотная сетка, которая будет тормозить любой софт кроме того, в котором она была создана. Поэтому, говоря о сетке и полигонах, нельзя не упомянуть процесс ретопологии, т.е. создания новой сетки поверх старой.
https://preview.redd.it/igfcaftwokm41.jpg?width=807&format=pjpg&auto=webp&s=2ee577072a549e91a1c91497faa3b93a31d76522
Выполняется ретоп лапками, хоть и есть различные плагины для этого - достойного результата они не дают. Применяется этот процесс для разных целей, в частности для переноса детализации с высокополигонального меша на низкополигональный при помощи карты нормалей. Штука сложная, но интересная, как-нибудь расскажу.
В общем-то вот кратенько про сетку и как ее едят. Надеюсь прояснил принципиальные моменты по моделингу, если остались вопросы – задавайте, если есть что добавить – добавляйте, если где-то накосячил – исправляйте. Ну и можно предлагать темы, которые вы хотели бы для себя прояснить – в силу компетенции отвечу или даже пост сделаю, если тема большая.
Всем спасибо!
submitted by S_Alexandr_L to Pikabu [link] [comments]

Sonic Infinity Engine – движок для создания игр про Соника

Sonic Infinity Engine – движок для создания игр про Соника

Когда разработчик-любитель создал то, чего не смогла добиться Sega.

https://reddit.com/link/f5bf6i/video/uaql4fmhiih41/player
На протяжении всей истории серия игр Sonic the Hedgehog, подобно американским горкам, испытывала многочисленные взлёты и падения. Так уж сложилось, что многие игры серии получились весьма неоднозначными и частенько подвергались критике. Под раздачу попали не только однозначно плохие игры вроде Sonic 2006 и Sonic Boom, но и вполне хорошие Sonic Heroes и Sonic Riders Zero Gravity. В нулевые годы разработчики из Sonic Team очень любили экспериментировать с франшизой.
После провальной Sonic 2006, разработчики из Sonic Team решили переосмыслить геймплей и создать игру, которая противопоставлялась бы Sonic 2006. Так родилась Sonic Unleashed, в которой впервые в истории серии был реализован Boost-геймплей. Критики и игроки были в восторге от дневного геймплея, но в то же время подвергся критике ненужный геймплей за Соника-оборотня, который превращал игру в некое подобие God of War. Тем не менее, Sonic Unleashed стала успешной игрой, и фанаты приняли её на ура. Sonic Team, кажется, смогла найти идеальную формулу для создания новых игр франшизы.
Но несмотря на успех, в дальнейшем Sonic Team не особо развивала идеи Unleashed. Да, были Виспы из Sonic Colors и даже игра за Классического Соника в Generations, но идеи у них быстро заканчивались, и дизайн уровней с годами подурнел. В итоге это дошло до провальной Sonic Forces, в которой все уровни представляли собой одну трубу, которую можно пройти за минуту тупо нажав на кнопку буста. В общем, в Sonic Team работают криворукие дизайнеры уровней. Многие фанаты остались так разочарованы, что они решили создавать игры про Соника сами, разрабатывая игровые движки.
Пару лет назад некий разработчик из Японии под ником Oban в свободное время решил создать на основе Unreal Engine свой движок для создания игр про Соника. Сам Oban никогда не был фанатом Соника, и сделал его чисто ради эксперимента. Он работал над движком в течение года и в итоге он фактически создал концепцию того, как должна выглядеть хорошая игра про Соника. В конце концов Oban открыл исходный код игры всем желающим, благодаря чему фанаты-энтузиасты начали создавать свои собственные уровни.
Если вы хотите посмотреть на то, как фанаты делают уровни в Sonic Infinity Engine, советую посмотреть канал Blue Vivacity (, в котором также есть ролики по модам к другим сониковским играм. Также есть и другой канал на данную тематику под названием Sonic Overtime.
А теперь я, собственно, расскажу о самом движке.
В техническом плане Sonic Infinity Engine является игрой, созданная на Unreal Engine. Существуют две версии игры от Oban: чистая версия и Adventure Pack. Чистая версия создана для разработчиков и содержит всего лишь один скромный уровень-полигон, где игрок может испробовать все возможности и механики игры. Вторая версия же, в которую я уже поиграл, представляет собой комплект из 4 уровней, по которым можно пробежать. Поскольку с "чистой" версией довольно скучно сделать обзор, я решил сыграть в "приключенческую версию" игры, которая меня очень впечатлила.


Когда я запустил игру, я сразу же оказался на обучающем уровне, который выполнен очень красиво. Несмотря на отсутствие меню настроек, я не испытывал технических проблем с игрой, благо что мой компьютер не является допотопным ведром. Игра запускается в большом окне, но можно переключиться на полноэкранный режим нажатием F11. Информация о том, на какие кнопки надо нажимать прилагается в файле README. К слову, режим обучения включается с каждым запуском игры, но можно его пропустить прыгнув на пружину. А потом сыграть в этот же уровень снова, но без обучающих подсказок. В целом игралось без просадок FPS.
Перехожу к геймплею. Первым делом я осваивался с управлением. К слову, управление в этой игре просто идеальное и крайне удобное. Главная беда всех 3D-игр про Соника как раз было управление персонажем. Даже в Generations разработчики из Sonic Team не смогли решить данную проблему. Но в этой игре наконец-то я могу контролировать ежа без особых трудностей. Что самое интересное, в этой игре я наконец могу управлять персонажем не только клавиатурой, но и мышью.
Sonic Infinity Engine развивает идею Boost-геймплея ещё дальше, добавляя такие новые функции, как возможность прыгать мячиком (фича из Sonic Adventure 2) и спиндешить. Особенно мне понравилась в игре одна фича: если спрыгнуть с большой высоты на высоком скорости, то Соник не будет тупо падать как наковальня, а парить какое-то время над землёй, медленно падая. Это придаёт игре ощущение полёта, и что самое приятное, благодаря данной фиче можно преодолеть огромные расстояния, любуясь прекрасными видами с высоты.


Уже на первом уровне я начинаю понимать, что тупо нажимая на кнопку буста я не могу пройти многие препятствия. Причём во многих случаях лучше вообще не пользоваться бустом и предпочтительнее пользоваться нормальным бегом. Причём самый первый уровень помимо приятного дизайна обладает отличным левел-дизайном, который демонстрирует все возможности движка.
В Adventure Pack всего 4 уровня. Они все состоят из готовых ассетов, собранных из Unreal Marketplace. Но тем не менее, они поражают качественным левел-дизайном и визуалкой, и они точно смогут заменить уровни Sonic Generations. При этом Обан подобрал для уровней красивую музыку, которая добавляет игре атмосферы.
В игре есть хаб, который представляет собой огромную пустыню с горами. И выглядит хаб просто божественно:

https://preview.redd.it/dncf8l7zhih41.png?width=1400&format=png&auto=webp&s=682f02e5cb3971de8d934f1443ed9c7693df2dc5
Моим вторым уровнем оказался ... . Он выполнен в индустриальном стиле и по дизайну схож с первым. Тут также я должен преодолеть полосу препятствий. Стоит отметить, что местные уровни не выглядят как прямолинейные трубы. Посмотрите какая красота:
https://preview.redd.it/kkdcpa20iih41.png?width=1400&format=png&auto=webp&s=5fe0ef7499e0e264a881a716e9cf72574f983ed6
Следующий уровень оказался довольно спорным, поскольку автор явно переиграл в Зельду. И он спорный по той причине, что в ней невозможно применять сверхскоростные способности Соника, и больше напоминает на лабиринт. Я так данный уровень и не прошёл, но в целом он выглядит прекрасно:

https://preview.redd.it/a43lfzx4iih41.png?width=1400&format=png&auto=webp&s=bdfcfc9e328ace13870b6363b8bb0c7828d83612
И наконец, последний уровень оказался для меня самым любимым. Начну с того, что это не сюрреалистичная полоса препятствий и он выполнен в более реалистичном ключе. И тут бег напролом не поможет, и мне придётся применять свои способности на реалистичном окружении. Для этого мне нужно тщательно продумывать свой маршрут, поскольку Обан не даёт мне подсказок, куда мне дальше идти. Посмотрите на эти живописные пейзажи!

https://preview.redd.it/w5q86ip9iih41.png?width=1400&format=png&auto=webp&s=f6b8c434cba93f402075f03419cb882ece80a4a1


Есть у данного движка недостатки? Да. Во-первых, игра вряд ли запустится на слабом железе, и для этого потребуется мощный компьютер. Во-вторых, способность Соника перемещаться с помощью колец реализован криво. И в третьих, это знаменитые петли. В этой игре Соник не может бежать по петлям, поскольку он начинает падать с потолка. Видимо, в официальных 3D играх бег по петлям заранее заскриптован для зрелищности. И в итоге мне пришлось в буквальном смысле перепрыгивать со стенки петли на другую сторону, полностью игнорируя потолок.
Но несмотря на вышеперечисленные недостатки, Обан смог превзойти разработчиков Sonic Team. Я играл в бету-версию Adventure Pack, в которой не завезли даже меню паузы и настроек. Поэтому мне пришлось играть в окне. Повезло, что окно огромное. В полноэкранном режиме игра неправильно отображается. К счастью, сейчас разрабатывается новая версия Adventure Pack с новыми и впечатляющими уровнями. Так что я пожелаю Обану удачи.
И теперь я решил опробовать другую игру, основанную на данном движке. Речь пойдёт о Grand Metropolis, который к слову был разработан нашим соотечественником. Данная игра представляет собой порт одноимённого уровня из Sonic Heroes, но переделанный в некоторых моментах.
Ах, Sonic Heroes – игра моего детства, и я с удовольствием решил переиграть в данный уровень, но уже с новой механикой. И тут я заметил огромную проблему в движке и самой игре – оптимизация. При высоких настройках у меня игра начинает просиживать где-то до 45 FPS. Но к счастью, в ней наконец завезли меню паузы и возможность поменять разрешение экрана.
Подвожу итоги. Sonic Infinity Engine – прекрасный движок для создания игр про сверхскоростного ежа. Если иметь прямые руки, мозги и, конечно же, Unreal Engine, то можно сварганить отличную игру про Соника. Если Sega никак не сможет сделать хорошую 3D игру про Соника, то пусть им займутся фанаты.
Источник: https://dtf.ru/games/103855-sonic-infinity-engine-dvizhok-dlya-sozdaniya-igr-pro-sonika
submitted by KAFKA_FAN to KafkaFPS [link] [comments]

ТОП 5 движков для создания игр без особых усилий КАК СОЗДАТЬ СВОЮ ИГРУ - ЛУЧШИЕ ДВИЖКИ ДЛЯ СОЗДАНИЯ ИГР В 3D и 2D! Как создать игровой движок?  Часть 1 ТОП 6 ЛУЧШИХ ПРОГРАММ ДЛЯ СОЗДАНИЯ ИГР НА ANDROID И IOS Как стать разработчиком игр / Рисование, игровые движки и ...

Решено: Как написать свой игровой движок с нуля Игровые движки Ответ В этом обзоре мы рассмотрим популярные в 2016 году игровые движки и проголосуем за лучшие из них. Игровые движки предоставляют средства разработки, которые могут быть использованы... Как устанавливать движок; Как создать 3d модель; Как написать мод; Как создать игру; Как сделать движок; Как написать игровой движок; Как создавать игровые движки; Как написать движок для игры На данный момент для Python есть следующие движки на выбор: 2D: - Cocos 2D (сам лично им не пользовался и ничего сказать не могу, но знаю, что русскоязычное сообщество использует этот движок для с++, вместо python) - Kivy (это потомок ... Как сделать игру с помощью игровых движков ... которые называются игровые движки. С помощью них без проблем можно создать программу практически любого жанра и масштаба. Конечно если Вы ...

[index] [1819083] [194085] [987786] [819961] [111096] [4751365] [4955794] [267052] [2249737] [4012156]

ТОП 5 движков для создания игр без особых усилий

ARTALASKY CG - Как создать игру 137,169 views 13:43 Создание игр / Уроки по Unity 3D / #1 - установка, интерфейс, создание ... Как игровые движки меняют кино. Unreal Engine 4 — убийца зелёного экрана - Duration: 11:32. XYZ 599,153 views Все движки зарекомендовали себя как отличные генераторы и на всех можно спокойно работать. Основной сайт ... # Я ВК - https://vk.com/flatingo # Группа ВК - https://vk.com/flatingo_games # Instagram - https://instagram.com/flatingo_games # Twitter - https://twitter ... Мое имя всем давно известно,так что слушай.Сегодня мы поговорим про то как.сделать игру на юнити.У тебя ...

#