Механика, построенная на разрезании трехмерных моделей в игровых проектах — это всегда иллюзия, подобная трюку, когда фокусник распиливает человека на две части.
Erid: 2VfnxxEbJuN
Никто человека на самом деле не пилит, просто от зрителей скрыта вторая часть тела, которой не видно. Есть много вариантов провернуть такой фокус, как и способов сделать так, как будто сам игрок делит трехмерный объект на две, три, десять частей. Разработчики игр в отличие от фокусников любят раскрывать свои секреты, с некоторыми из них мы готовы познакомить вас прямо сейчас вместе с разработчиками из игровой студии
SkillRush Games.
Из чего состоят трехмерные объекты?
Трехмерные объекты в играх состоят из нескольких мешей - сеток полигонов. Каждый полигон — это четырехугольник, состоящий из трех вершин. По факту эти три вершины - просто точки, которые в себе хранят по три основных числа - координаты вершин в пространстве по осям x, y, z. Представьте себе большой шар, выполненный из проволочного каркаса, обтянутый тканью. Трехмерная модель состоит из такой же конструкции. Если при помощи острого меча разорвать ткань и каркасную проволоку, то скорее всего окажется что внутри конструкция будет пуста. Трехмерная модель в игре создана по такому же принципу – на месте ее рассечения вы не увидите внутри никакого объекта, не заметите гладкой поверхности среза. Самая частая проблема, с которой сталкиваются разработчики - как показать внутреннее устройство объекта? Вторая проблема заключается в том, что в реальном мире конструкция из проволоки и ткани во время рассечения делится на две части, каждая из которой живет отдельной жизнью, обладает своим весом и формой.
В игровом пространстве если разделить меш на части, например удалив часть полигона, половинки все равно станут отдельной частью модели. Они будут также вместе двигаться, вместе крутиться, откликаться на физику, но посередине у них будет разрыв. Для осуществления механики рассечения нужен всегда только один объект, который имитирует отсеченную половину. Формируется проблема: где взять тот самый необходимый объект, ведь разделить просто так меши невозможно. Например - вы решили удалить полигон, визуально его поделили на две части, но по факту обе половинки все еще ведут себя как одно целое. Как выходить из такой ситуации? Давайте наглядно посмотрим на популярные игровые примеры.
Примеры рассечения трехмерных объектов
Одна из первых игр, в которой можно поделить на части трехмерные объекты — это шутер Soldier of Fortune, вышедший в 2000 году. Проект создан в стиле боевик, главный сюжет которого раскрывается в секретном агентстве, где лихие сотрудники постоянно пытаются догнать плохих парней. На самом деле на момент выхода проекта — это был самый жестокий шутер. Когда персонаж стреляет из дробовика по врагу и попадает по нему, то вскрывается его нутро - внутренности вываливаются прямо на землю. Если попасть по руке или ноге, то их моментально отсекает. Проект выпустила студия Raven Software, в своем интервью разработчики рассказывали, что расчлененка нужна только для того, чтобы пользователи были шокированы интерфейсом, для рекламной кампании такой ход не использовался. Игровая механика строилась на технологии Ghoul. Основная суть кроется в том, что каждая модель человека была сложена как пазл из нескольких частей. Поэтому, когда пользователь стреляет в руку или ногу персонажу, то он просто как бы отделяет один из кусочков пазла. Такую же технологию, но только немного модернизированную использовали в проектах Soldier of Fortune 2: Double Helix и Star Wars Jedi Knight 2: Jedi Outcast.
Довольно интересный подход к расчленению можно увидеть в проекте Left4Dead 2: в нем зомби походу боя теряют как руки, так и ноги. В первой части проекта все случаи таких потерь были прописаны заранее в сценарии их всего пять – можно было потерять руку, ногу или голову. Такие раны всегда заканчивались летально для зомби, живой мертвец без руки умирал моментально. Во второй части проекта разработчики хотели добавить больше разнообразия, например сделать так, чтобы уровень ранения зомби зависел от того, насколько мощным оружием пользовались игроки. Зомби с дыркой в животе все равно должны были бежать за игроком. Ситуация довольно сильно усложнялась тем, что в проекте было 24 тысячи разных типов внешности зомби и это без нанесенных увечий. Представьте себе, сколько будет мертвецов, если для каждого создать еще несколько дополнительных вариантов? Их численность станет просто зашкаливать. Поэтому разработчики придумали максимально простое решение проблемы - на отстреленной части тела игрока появлялась невидимая фигура, например сфера. Она закрывала ту часть модели, которая оказалась внутри нее. Дыру в модели закрывала специальная заплатка, которая по внешнему виду напоминает окровавленные кости и внутренние органы. Данная технология позволила создать 54 увечья на теле мертвеца, не переделывая уже готовые модели.
Игровой проект Metal Gear Rising: Revengeance разрабатывала студия Platinum Games. Это был спин-офф к серии проекта Metal Gear Solid, которые рассказывали про приключения Райдена - главного героя второй части. Он получает тело киберниндзя и всю игру воюет с киборговом. Чтобы реализовать механику разрезания разработчикам понадобилось три месяца работы - ее назвали Blade Mode. Объекты можно было рассекать в режиме реального времени и также в режиме замедление. Во втором режиме появлялась голографическая линия среза ее можно было повернуть тем самым выбрав какую часть противника или предмета необходимо отрезать.
Как объяснил в своем интервью программист Цуёши Одера механика разрезания потребляла больше памяти, чем вообще любой другой игровой процесс, поэтому разработчики постарались распределить ее выполнение по нескольким кадрам. Немного внесем ясность в этот процесс: каждая игра — это как будто тот же самый мультфильм, состоящий из нескольких кадров, сменяющих друг друга попеременно. Но в игровом процессе программа проверяет каждый кадр - не поменялось ли в нем что-то, например не нажал ли игрок какую-либо кнопку. Если он нажимает эту кнопку, то следующий кадр появляется с учетом внесенных изменений. Поэтому вычисления осуществляются каждый кадр, тем самым нагружая процессор. Но если сложные вычисления распределить на несколько кадров, то и нагрузка соответственно будет меньше. Также в проекте очень внимательно отнеслись к деталям: внесли нестандартные изменения в анимацию, если противник что-нибудь отсечет. Разработчики всегда опирались на одно правило – вычисления можно провести только в кадрах, которые отводились на взмах мяча.
Отрезанные куски через время исчезали — это было сделано с целью экономии ресурсов. Игрокам не дали возможность сделать целую гору из кубиков, которые были отрезаны от врагов. В проекте Tiny & Big in Grandpa’s Leftovers очень интересно подошли к изображению поверхности среза, когда пользователь разделяет камень, он не ждет что внутри него будет что-то большее, чем минерал, поэтому на поверхность среза натянули ту же текстуру, что и на всех остальных поверхностях камня. Но как быть с киборгом, которому игрок отсекает ногу или руку? Какую в этом случае можно нанести текстуру на место среза, чтобы максимально правдоподобно показать внутреннее строение этой части тела? Допустим разработчики сделали для руки текстуру руки в разрезе, а для ноги соответственно текстуру ноги в разрезе, но что делать если игрок порежет конечность не поперек, а вдоль. Это возможно по причине выбранного режима Blade Mode, когда время игрока начинает замедляться и он может повернуть линию рассечения как ему захочется.
Разработчики сделали отдельные текстуры поверхности среза для каждой части тела. Если игрок рассекает голову, то необходимо было сделать так, чтобы этот разрез выглядел как голова, такой же принцип работы с руками и ногами. Необходимо было подготовить разные текстуры среза под каждый угол удара по каждой части тела. Внутреннее строение должно было выглядеть совершенно по-разному и зависеть от вертикального и горизонтального, диагонального среза. Разработчикам на самом деле было очень тяжело и им нужно было продумать не только как герой выглядит снаружи, но и то, как он устроен внутри. Работа длилась очень долго, вся команда принимала участие в обсуждении того, как должен выглядеть разрез изнутри с определенного угла, где нужно расположить кость, сухожилия и как это все должно было выглядеть. Часто разработчики об этом даже не задумываются, но именно в этом проекте специалисты решили подойти детально к данному вопросу.
Другим неплохим примером является проект Hardspace: Shipbreaker 2022 года выпуска. Основной геймплей строится на демонтаже космического корабля. Игрок находится в скафандре списанного корабля, и он должен отсечь от него при помощи лазера правильные части и отправить их на переработку. Игра выполнена в виде своеобразного пазла, так как просто так взять и отрезать от корабля кусок нельзя. Одно неловкое движение - лазер задевает взрывоопасную систему, и космонавт легко погибает. Чтобы реализовать эту задумку разработчики сделали корабль в виде 40 метровой меши, выполненной из разных частей панелей и блоков. Беря в расчет как работает разрезание в этом проекте - все 40 метров корабля можно было поделить на части за один раз. Пользователи были в недоумении и мне нравился такой геймплей, поэтому разработчикам пришлось каждый корабль делать из отдельных частей соединенных в конкретном месте. Многие из них состояли из четырехметровых панелей, как будто кубики Lego.
Процесс разрезания происходит при помощи лазера: он выстреливает в поверхность при помощи двух расходящихся в стороны лучей. К такому решению разработчики пришли, когда им стало понятно, что один луч идет слишком долго по поверхности и игрок может заскучать пока не будет завершена анимация. Помимо лазера также есть прибор, который стреляет лучом, он используется для уничтожения узлов, соединяющих несколько крупных деталей вместе. Инструмент их полностью испепеляет, не разделяя при этом на части. Разработчики его ввели для того, чтобы механика демонтажа не ограничивалась обычным разрезанием, так как порой по другой стороне стены, которую резал до этого игрок, проходили трубы, вызывающие взрывы, а их нельзя было повреждать.
С технической точки зрения разрезать можно абсолютно любую часть корабля, чтобы игровой процесс не превращался в какую-то скучную нарезку звездолетов, разработчики вводят несколько ограничений. Каждый корабль состоит из двух основных слоев – капсул внутри капсул. Внешняя капсула — это оболочка корабля, а внутренняя это его помещение. Между этими капсулами есть пространство, так как внешняя оболочка соединяется с внутренней при помощи несколько балок — это дает эффект подвешенного состояния внутренней оболочки.
Мы разобрали самые популярные примеры разрезания трехмерных объектов, но до сих пор эта механика оставляет очень много вопросов для разработчиков. Сегодня она может стать главной особенностью любого проекта и на самом деле это неудивительно. Механика разрезания очень требовательна к мощности компьютера и разработчикам нужно приложить много усилий чтобы она органично вписалась в проект. Но поверьте, нашему опыту - результат этого стоит, ведь механика разрезания добавляет в цифровой мир немного реализма, создает иллюзию будто вокруг героя не сплошные декорации, а настоящие предметы, внутри которых есть что-то помимо пустоты.
Реклама. ИП Брагин Олег Сергеевич, ИНН 519017027462. Erid: 2VfnxxEbJuN
Photo by
Sam Pak on
Unsplash