Повышаем квалификацию Вот это я буду представлять на экзамене по физике, так что, если кто может помочь - you are welcome. Не обращайте внимания на стиль под названием "для ламеров" - все же это будут учителя читать. Скриншоты будут потом.
ФИЗИКА В КОМПЬЮТЕРНЫХ ИГРАХ
Вступление........................................................................................................2
Применение некоторых физических законов................................................3
Компьютеры в науке и жизни.........................................................................4
Компьютерное моделирование. История вопроса........................................4
Зачем нужна физика в компьютерных играх?..............................................6
Теория моделирования....................................................................................7
Примеры моделирования в играх...................................................................9
Физические движки и их методы моделирования.......................................11
Моделирование физических тел и законов..................................................13
Способы облегчения нагрузки на процессор...............................................15
Аппаратное ускорение....................................................................................15
Список используемой литературы................................................................17
ВСТУПЛЕНИЕ. Физика в нашей жизни
Физика ― это наука о природе в самом общем смысле. Она изучает вещество (материю) и энергию, а также фундаментальные взаимодействия природы, управляющие движением материи.
Некоторые свойства являются общими для всех материальных систем, например, сохранение энергии ― такие свойства называют физическими законами. Физику иногда называют «фундаментальной наукой», поскольку другие естественные науки (биология, геология, химия и др.) описывают только некоторый класс материальных систем, подчиняющихся законам физики. Например, химия изучает молекулы и образованные из них вещества. Химические же свойства вещества однозначно определяются физическими свойствами атомов и молекул, которых описываются в таких разделах физики, как термодинамика, электромагнетизм и квантовая физика.
Физика тесно связана с математикой ― математика предоставляет аппарат, с помощью которого физические законы могут быть точно сформулированы. Физические теории почти всегда формулируются в виде математических выражений, причём используются более сложные разделы математики, чем обычно в других науках. И наоборот, развитие многих областей математики стимулировалось потребностями физических теорий.
Главными ветвями физики являются экспериментальная физика и теоретическая физика. И хотя может показаться, что они разделены, поскольку большинство физиков являются или чистыми теоретиками, или чистыми экспериментаторами, это на самом деле не так. Теоретическая и экспериментальная физика развивается в постоянном контакте. Над одной и той же проблемой могут работать как теоретики, так и экспериментаторы. Первые ― описывают существующие экспериментальные данные и делают теоретические предсказания будущих результатов, вторые ― проводят эксперименты, проверяя существующие теории и получая новые результаты. Многие достижения в физике были вызваны экспериментальным наблюдением явлений, не описываемых существующими теориями (например, экспериментально обнаруженная абсолютность скорости света породила специальную теорию относительности), так же как и некоторым теориям удалось предсказать результаты, проверенные позже (например, открытие позитрона).
Первое, что мы наблюдаем во внешнем мире начиная с рождения – это различные формы движения и взаимодействия материи. Самая простая форма движения – механическое движение. Мы понимаем под механическим движением изменение положения какого-либо тела относительно других тел с течением времени. Движение всегда есть результат взаимодействия между телами или частицами тел. Механические взаимодействия между телами или частицами тел. Механические взаимодействия вызывают перемещения тел в пространстве или изменение формы тел (деформацию).
В окружающем нас мире все время происходят различные изменения или, как говорят, явления. Таяние льда, гром, свечение раскаленных предметов, образование тени или эха – все это примеры физических явлений в неживой природе.
В живой природе тоже постоянно происходят физические явления. Влага поднимается из земли к листьям по стеблю растения, кровь течет по сосудам в теле животного, морская рыба скат наносит ощутимые удары электрическим током, температура тела птицы выше, чем температура тела рыбы, животное хамелеон способно изменять цвет своего тела, а некоторые бактерии или насекомые могут даже светиться. Все эти явления и изучает физика.
Задача физики состоит в том, чтобы найти законы, которым подчиняются явления природы. Когда они будут известны, люди применят их для создания новых полезных приборов, устройств и механизмов. Например, установив законы возникновения и существования электрического тока, люди создали электрические светильники, чайники, магнитофоны, телевизоры, компьютеры и даже глобальную информационную сеть Интернет, которую часто называют чудом XX века.
ПРИМЕНЕНИЕ НЕКОТОРЫХ ФИЗИЧЕСКИХ ЗАКОНОВ
При изучении механического движения твердых тел учитываются только два важнейших признака материального тела: протяженность (или геометрическая форма движущегося тела) и вещественность (масса тела и ее распределение в данном геометрическом объеме). Твердым телом в механике называют такое тело, расстояния между любыми частицами которого во все время движения остаются неизменными. При изучении механических движений обычно не учитываются изменения других признаков реальных тел, например, тепловых, электрических свойств. Так, изучая движение артиллерийского снаряда, можно пренебречь нагреванием его металлической оболочки вследствие трения о воздух. Однако опыт, полученный из наблюдений и измерений скоростей при вхождении метеоров в атмосферу Земли, а также изучение движения космических кораблей, входящих в атмосферу Земли со скоростью более 8 км/с, показывают, что при высоких температурах нагрева оболочки уже нельзя пренебрегать влиянием этого нагрева.
Механические взаимодействия между телами приводят к изменению количества движения этих тел и осуществляются или непосредственным контактом, или дальнодействием. Величина, являющаяся мерой механического взаимодействия материальных тел или частиц, из которых состоит тело, называется в механике силой. В результате механического взаимодействия будет изменяться количество движения. Сила в механике измеряется изменением количества движения тела. Поэтому часто говорят, что основная задача механики – изучение движения материальных тел под действием сил.
Существуют различные методы физического исследования, и с течением времени изменяются. Физический эксперимент всегда был и остается основным инструментом, но в современных условиях он требует больших материальных и энергетических затрат.
КОМПЬЮТЕРЫ В НАУКЕ И ЖИЗНИ
Сейчас нашу жизнь невозможно представить без возможностей, предоставляемых компьютерами. Компьютеры используются в разных сферах деятельности: науке, обучении, медицине, развлечении и др.
Но с изобретением компьютера у ученых появились новые возможности для познания сложных физических процессов. Это – компьютерное моделирование. С его помощью можно воспроизвести свойства Солнца или погрузиться в мир наночастиц. Можно узнать, как себя будут вести различные вещества в невозможных в реальной жизни ситуациях – например, при невероятно высокой температуре или давлении.
Компьютеры также оказывают неоценимую помощь в обучении различным наукам, в том числе физике, делая этот предмет более понятным, наглядным и интересным. Создаются целые программы уроков, факультативов для компьютера.
КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ. ИСТОРИЯ ВОПРОСА
Современная видеокарта представляет собой мощнейшую подсистему компьютера. Именно эта плата отвечает за корректное отображение на экране всего происходящего в играх, а так как реалистичность графики все возрастает, то мощность видеокарт возрастает соответственно. Основная цель, к которой разработчики видеокарт стремятся уже не первый год, ― фотореалистичность изображения.
Технические характеристики современных видеокарт все улучшаются и улучшаются, поощряя разработчиков создавать все более и более навороченные трехмерные движки. Но реалистичная картинка и яркие спецэффекты невозможны без использования законов физики. Невозможно сделать модель человека «как в жизни» без красиво развивающихся на ветру волос, изгибающихся складок на одежде. Мир большинства современных игр абсолютно безжизнен ― даже здания не разрушаются.
Физика в играх появилась уже давно, но прежде ее расчетом занимался исключительно центральный процессор. Благо его ресурсов достаточно для просчета движения пары ящиков и шести пустых банок.
Давайте представим сложенные пирамидой бревна. Если задеть самое верхнее из них, импульс по цепочке передастся остальным. С некоторой долей вероятности можно утверждать, что вся пирамида развалится. Хорошо, когда таких бревен 100―150, но что делать, если их 10 000 или даже больше? А если учесть, что на каждое бревно действует сила тяжести и с другие законы механики, бревна соударяются, меняя траекторию полета, некоторые ломаются при ударе о землю... Любой современный процессор начнет тормозить. Его вины в этом нет ― он предназначен для других задач. К тому же у него и так работы хватает.
Раньше, в эпоху 166-х процессоров, достаточно было задать базовые упрощенные параметры и не особенно задумываться над детальным моделированием законов физики.
Возьмем простейшие игры с передвижением героев – так называемые «бродилки» десятилетней давности. Изначально ни один закон физики как таковой не моделировался. Скажем, управление движением героя реализовано не заданием ему направления, куда бежать, и не попыткой упереться в пол под ногами, а просто добавлением некоторого ускорения в нужную сторону. В первую очередь так делалось из-за общей слабости компьютеров, и непомерной сложностью (для тогдашних компьютеров) подобных вычислений. Поэтому в ранних проектах не было инерции и тому подобных вещей, машинки разгонялись до максимальной скорости и тормозили мгновенно.
Но когда в свое время в игровых кругах начали говорить о реализме (примерно после появления игр-стрелялок от первого лица), стало ясно, что разгоняться до максимальной скорости и останавливаться мгновенно - не слишком правильно, игроки перестают верить в реальность происходящего. И разработчики начали останавливать и разгонять героя не спеша. Никто, разумеется, не моделировал силу трения ботинок с полом или инерцию игрока, просто было задано фиксированное значение ускорения, которое и использовалось в такие моменты.
Если убежать герою не удалось, он начинает прыгать - если ему эта возможность предоставлена. Здесь в дело вступает сила тяжести. Все довольно просто, ускорение, как и в вышеописанных случаях, постоянное, а дальше все получается автоматически – и полеты по параболе, и прочее.
В компьютерных играх со стрельбой, так называемых «шутерах» (от англ. shoot – стрелять) нужно учитывать и другие законы реального мира, в первую очередь баллистику. Стрельба - занятие тоже непростое. Казалось бы, что такое пуля? По сути - материальная точка, которая может летать.
Подавляющая часть неприятностей, возникающих при моделировании физики, вызвана простой невозможностью точно воспроизвести все виды непрерывных взаимодействий, существующих в реальности, в рамках дискретной модели.
ЗАЧЕМ НУЖНА ФИЗИКА В КОМПЬЮТЕРНЫХ ИГРАХ?
Попробуем понять: а зачем игроку физика? Чего хорошего она внесет в игру? Почему не заменить ее на простейшие правила перемещения, как, например, в старом арканоиде? Или вообще отказаться от нее (как не без успеха делают в разнообразных стратегиях, квестах и тому подобных играх)?
Дело в том, что современные игры становятся все сложнее и объемнее, а потому создание простого и не вызывающего проблем набора правил движения превращается в сложную задачу. С какой легкостью мы могли делать что угодно в старом Digger'е: если в момент обсчета очередного кадра зажата кнопка "влево", добавить к текущей координате X число "-1", и отрисовать нашего персонажа в новом месте.
В играх других жанров использовались схожие методы. В хорошо известном и популярном «Арканоиде», основной целью которого являлось разбить все кубики на поле отбивая мяч ракеткой (по принципу тенниса), не дав мячику упасть в пропасть. Здесь очень важно было просчитать направление и силу удара. В старых версиях все расчеты были максимально упрощены, чтобы не нагружать процессор. Угол падения был равен углу отражения, мячик со временем ускорялся путем придания ему фиксированного значения ускорения, разницы между различными видами разбиваемых кубиков не было (в плане физических свойств).
А в современных вариациях «на тему» (самой известной можно назвать игру Ballance) уже крайне серьезно изменяется не только сам игровой процесс (кубики упразднены), но и общий подход к физическому моделированию. Теперь шарики меняют свои свойства – бумажный очень легкий, управлять им сложно, норовит упасть в пропасть при любом удобном случае, деревянный – самый удобный, каменный – очень тяжелый, не может заехать на горку, но прошибает стены. Все аспекты поведения шариков различных видов на различных поверхностях (наклонных, каменных, бумажных, вертикальных...) смоделированы крайне тщательно, и именно это, хоть и усложняющее игру, качество моделирования и делает игру увлекательной.
В играх-квестах (ориентированных на следование сюжету и решение подчас совершенно головоломных загадок) физика не использовалась до сих пор вообще. Зачем честно моделировать поведение чего-либо, если в квестах игроку дается очень ограниченная свобода использования предметов, и трудов все равно никто не заметит?
Здесь ситуация начала меняться совсем недавно. В новых квестах типа Penumbra игроку дается практически полная свобода перемещения и использования предметов, что дает неограниченные возможности по решению головоломок. Квест становится интерактивным – игрок не просто идет по задуманному авторами одному-единственному пути решения задачи, а может сам решать, каким образом открыть дверь или сейф – можно искать ключи или код, а можно взять ломик и применить силовой метод.
А в каком-нибудь из Quake'ов виртуальное альтер-эго игрока бегает, заворачивает за угол, прыгает, падает, плавает, стреляет, его подбрасывает в воздух взрывом и передвигает по уровню лифтами и конвейерами, носит воздушными потоками и т.п.
ТЕОРИЯ МОДЕЛИРОВАНИЯ
В какой-то момент становится проще смоделировать физику реального мира и забыть обо всех эмпирических правилах, призванных ее приближенно симулировать. Да и игроку легче вживаться в игру, если он видит, что любое его действие вызывает адекватный отклик, похожий на реальный (что вдвойне важно для симуляторов, но в них ситуация довольно специфична: моделируются всего несколько аспектов ситуации, зато очень точно и подробно).
В сегодняшних играх физика рудиментарна и различные ошибки заметны только при игре с большим лагом – задержкой связи при игре по сети, а в недалеком будущем (для которого уже существует практически все) уровень моделирования окружающей действительности резко поднимется.
Виртуальный мир станет почти настоящим, дерево будет гореть (если его поджечь), плавать на поверхности воды, создавая волны, раскалываться на части под ударами топора, каждый предмет можно будет толкнуть, перетащить, бросить, поставить на другой и выбить из-под третьего. И предметов таких, причем самых разных, будет огромное количество. Тут и важны будут все те мелочи, на которые пока не обращают внимания ни разработчики, ни игроки.
Итак, дискретная физическая модель работает следующим образом: мир развивается по тактам, в момент X задаются исходные данные для всех предметов, после чего код, ответственный за это, определяет новые их положения, подсчитанные для момента X+1 (разумеется, "1" не означает "одну секунду", или "один час", это просто некий отрезок времени, иногда фиксированной длины в несколько сотых долей секунды, иногда – переменной).
Казалось бы, легче всего взять текущую скорость, учесть ускорение, по стандартной формуле просчитать новое положение, перенести туда наш движущийся объект и уже там, на новом месте, бороться с возможными осложнениями. Например, если этот объект – пуля, которая при очередном такте попала в человека, надо тело этого человека зрительно повредить. А если человек вошел внутрь стены, нужно его оттуда вытащить.
Но при этом возникает ряд проблем. Рассмотрим простейший пример: кубик падает на плоскость (или пуля летит в игрока). Если кубик маленький, скажем, с ребром в 1 сантиметр, скорость большая (два сантиметра в секунду), а плоскость имеет нулевую толщину, то кубик может даже за один такт пролететь ее насквозь: в начале он еще ее не коснулся, а в конце уже находится за ней и снова ничего не касается. Чего в реальной жизни не бывает. Из этого можно сделать вывод: простейшие методы вычислений иногда не работают. Нужно честно просчитывать весь путь тела на каждом шагу и реагировать на различные столкновения и взаимодействия на пути. Это задача более сложная и ресурсоемкая, ведь для такого просчета надо определить точный момент столкновения одного сложного тела с другим (именно самих тел, а вовсе не их упрощенных оболочек).
Поэтому честная физическая модель пока практически не встречается в играх. Столкновения, как правило, никто всерьез не просчитывает (в лучшем случае оболочки проверят, что не так уж страшно выглядит для пули, поскольку она маленькая и весьма напоминает шарик). И потому либо руки и ноги фигур торчат сквозь двери и стены, либо туловища скользят вдоль стены на довольно заметном от нее расстоянии...
В будущем эти проблемы должны быть решены, ведь мощность процессоров все растет и растет, но хватает и других вопросов, связанных уже не с простейшими вещами типа проверок на столкновения, а с более сложной физикой: вычислениями импульсов, передачей их при ударах, учетом разнообразных сил, действующих на тела, в том числе сил трения и тяжести. Например, представим, что должно произойти, если в воздухе, друг над другом, висят двадцать честно (во всех подробностях и с применением всех законов физики) смоделированных бочек или ящиков. В идеале они должны упасть аккуратной стопкой, при наличии упругости - чуточку подпрыгнуть и успокоиться. Если хотя бы один из них падает не строго вертикально, а с перекосом - пирамида имеет полное право после серии сложных соударений разлететься в стороны.
Увы, этот эксперимент в современных попытках сделать полноценную физику обычно заканчивается неудачей. "Прямая" пирамида из-за накопления ошибок вычислений рассыпается, какой-то из ящиков никак не может успокоиться и дергается из стороны в сторону (его зажало между двумя другими, и код, который пытается вытащить его из первого ящика-соседа, заталкивает его во второй ящик, а на следующем такте все повторяется в обратном направлении), некоторые ящики залезают из-за подобных проблем столь далеко, что код, выталкивающий их наружу, ошибочно сообщает им огромную скорость, внося в физическую систему дополнительную энергию "из ничего". Таким образом видно, что до полного реализма, особенно при большом количестве взаимодействующих объектов, далеко даже лучшим физическим движкам (авторы которых создают их для продажи разработчикам игр и ничем больше не занимаются).
ПРИМЕРЫ МОДЕЛИРОВАНИЯ В ИГРАХ
Итак, как же применение законов физики реального мира может сказаться на игровом процессе? Например, в GTA San Andreas вес и скорость каждой машины определяются множеством параметров. Эти параметры влияют на то, как быстро машина будет разгоняться, а также на просчёт столкновений двух автомобилей. С помощью специального редактора можно менять эти параметры. После чего тяжёлый военный танк будет двигаться так же быстро, как гоночный болид, а простая детская коляска по своим характеристикам окажется неуклюжим транспортным самолётом.
Мир ролевой игры Oblivion содержит ряд примеров активного использования физики: предметы скатываются на крутых склонах, а тела поверженных врагов плавают на поверхности воды. Если труп немного притопить и отпустить, он всё равно затем всплывёт. Выстрелы из лука вертикально вверх приводят к тому, что стрелы будут падать обратно, иногда попадая в камни, деревья или пеньки.
Рассмотрим игру Half-Life 2. В нее включено множество хитроумных головоломок, построенных на основных физических законах. А также гравипушка, позволяющая испытать на прочность (реалистичность) физику.
Головоломки в этой игре решаются очень легко, если вспомнить про физику, что в то время, когда вышла игра, было еще в новинку. Как правило, они выглядели так – чтобы продвинуться по игре дальше, требовалось подняться выше, чем герой мог запрыгнуть. Чтобы решить эту проблему, достаточно было найти доску, положить ее на трубу нагрузить на один конец доски кучу кирпичей. Второй конец доски поднимался, и игрок спокойно проходил дальше.
Главной достопримечательностью Half-Life 2 можно назвать так называемую гравипушку – прибор, генерирующий луч, с помощью которого можно притягивать или отталкивать объекты. С помощью этой гравипушки в игре разбирались завалы и разбрасывались враги. Некоторые уровни приходилось проходить с одной гравипушкой.
Этот прибор позволял убедиться в прекрасной работе внутриигровой физики – все предметы абсолютно честно сталкивались, отталкивались и взаимодействовали между собой.
Это наглядно показывает возможности одного из лучших игровых физических движков под названием Havok, который часто используется при создании игр высшего класса. Из примеров использования можно также упомянуть Max Payne 2, в котором тоже все было в порядке с физикой. Но в глубине движка с названием Havok бьется сердце, называемое ODE (Open Dynamic Engine). ODE - еще один движок, гораздо менее проработанный, но зато бесплатный и "опенсорсный" ("open source" - с открытыми ресурсами), т.е. любой может бесплатно скачать себе его исходный код и изменить, как ему захочется. Именно так, например, поступили разработчики игры XPand Rally.
Помимо этих двух наиболее ярких представителей семейства физических движков существует и множество других, менее ярких. Это также достаточно известные реализации, обладающие, правда, меньшими возможностями, да и их исходники всем подряд не дают. Существует также целая армия маленьких сам описных движков, написанных независимыми программистами для конкретных игр.
ФИЗИЧЕСКИЕ ДВИЖКИ И ИХ МЕТОДЫ МОДЕЛИРОВАНИЯ
В основе современных реализаций лежат такие мощные математические модели, основанные на таких глубоких физических знаниях, что человеку несведущему разобраться трудно, если вообще возможно.
Для начала поделим все объекты на две большие группы: пружинные каркасы и твердые тела. Пружинные каркасы представляют собой группу точек, связанных пружинами - связями, пытающимися сохранить свою первоначальную длину. На каждом шаге моделирования рассчитываются все силы, действующие на все точки каркаса. В результате мы получаем новое состояние тела. Обычно такой принцип моделирования используют для создания мягких тел и поверхностей, например тканей, резины и т.п. Твердые тела представлены всего одной точкой, но тут появляется достаточно сложное вращательное движение. Такой метод, как понятно из его названия, используется для представления твердых тел, не изменяющих свою форму. Естественно, оба метода можно использовать одновременно.
Теперь поделим на части методы моделирования твердых тел. Тут существует два основных метода: импульсная модель и модель, основанная на ограничениях. Импульсная модель наиболее проста, здесь надо только найти столкновения объектов (впрочем, это приходится делать в каждом методе) и приложить к ним силы, высчитанные по закону сохранения импульса. Такой метод очень удобен, если между телами нет каких-нибудь связей, хотя и их тоже можно реализовать на импульсах, правда, не совсем точно и правильно. Поэтому для систем, содержащих множество связей различной сложности, был придуман другой метод - ограничения. Метод, построенный на ограничениях, - это пример системного подхода к моделированию физики. Все соединения и контакты описываются математически как ограничения и добавляются в общую систему уравнений. Решив эту систему, мы получим новое состояние для каждого тела. Этот метод удобен в первую очередь тем, что с его помощью можно создавать любые ограничения. Эти возможности получили наибольшее применение в технологии Rag Doll.
Словосочетание Rag Doll переводится на русский язык как "тряпичная кукла". Начнем наше описание данной сравнительно новой технологии сразу с практической части. Если мысленно перенестись в не очень далекое прошлое (примерно в 2000 год), то можно вспомнить, что в большинстве экшенов тела поверженных врагов (или монстров) лежат очень неестественно: они погружаются по пояс то в стену, то в дверь, то они повиснут над лестницей, как будто лежат на невидимых столах... Но вернемся в наши дни. Подавляющее большинство современных шутеров показывают гибель вражеских солдат очень реалистично: убитые прислоняются к ближайшим стенам или картинно скатываются с лестниц потому что используют технологию Rag Doll.
Суть идеи заключена в том, что строится иерархия физических тел, соединенных подвижными связями. Их расположение и соединения напоминают расположение костей скелета для скелетной анимации. Затем эта группа объектов объединяется со скелетом персонажа, чтобы совместить физическую и графическую сущность человечка (или другого существа). Как только персонаж умирает, "физический скелет" принимает позу неудачливого бойца и загружается в физический движок. Теперь все движения "куклы" обусловлены физическими законами, тело упадет на землю так, как это было бы в жизни.
Интересно отметить, что нет абсолютно никакой разницы, какой метод моделирования использовать, - главное, чтобы он смог правильно смоделировать все необходимые нам тела и соединения.
Несложно догадаться, что все это требует затраты огромных ресурсов памяти и процессора. А ведь в современных компьютерных играх помимо физики надо рассчитывать просто горы информации: графика (хотя она почти полностью лежит на видеокарте, но все-таки затраты производительности процессора требуются немалые), искусственный интеллект, интерфейс и многое другое. Но при повышении реалистичности физики повышаются и требования к компьютеру, т.е. все более и более сложные физические модели требуют от системы все больше ресурсов. Что же делать? Когда-то давно подобная проблема возникла в области графики. Тогда судьбу центрального процессора облегчили, добавив принципиально новое устройство - 3D-ускоритель, процессор которого (видеокарта) взял на себя значительную часть вычислений, связанных с расчетами в области построения 3D-картинки. Теперь похожая ситуация повторяется и с физикой. Поэтому, для того чтобы снять с процессора обязанность рассчитывать медленную физику, в ближайшем будущем планируется повсеместное введение физического процессора. Первые реализации уже появились, но они еще не очень распространены, да и игр с их поддержкой совсем немного. Но все-таки эта технология рано или поздно приобретет ничуть не меньшее признание, чем аппаратное ускорение трехмерной графики. Первое "физическое ядро", разработанное сравнительно молодой компанией Ageia, называется PhysX. По заявлениям разработчиков, сделанным на конференции GDC, он позволяет честно смоделировать в реальном времени систему из 50 000 тел (это против 10-50 тел современными программными способами!) без особых потерь в скорости выполнения программы.
МОДЕЛИРОВАНИЕ ФИЗИЧЕСКИХ ТЕЛ И ЗАКОНОВ
Нельзя забывать и о том, как создаются виртуальные аналоги физических тел. Для уже неоднократно упомянутых ящиков и бочек все довольно просто: достаточно задать их геометрию и указать, из какого материала они сделаны. А если взять конструкции посложнее... К примеру, автомобиль или человека таким методом не соорудишь. Ведь автомобиль - это отнюдь не ящик, а весьма сложная система из тысяч деталей, каждая из которых (даже если оставить в стороне подробности) влияет на его физические характеристики. Авторам автосимуляторов приходится моделировать двигатель (и, разумеется, детали его внутреннего устройства: разный момент на разных оборотах, инерцию при торможении и т.п.), коробку передач (не до отдельных шестеренок, но с реальными передаточными числами), рессоры (с нелинейной характеристикой, как у настоящих), амортизаторы (они сильно влияют на управляемость), рулевое управление, колеса, резину на них и многое другое. В итоге обнаруживается, что для любого сложного с точки зрения физики объекта создание его виртуального аналога - задача не рутинная, а требующая серьезнейшего программирования и очень долгой отладки и настройки.
А теперь поговорим о процессах, происходящих в момент удачного выстрела (под "удачным" будем понимать попадание).
Аксиома: пуля - это больно. Попадание чаще всего причиняет повреждения, причем, в зависимости от типа снаряда они бывают разными. Самый простой - выстрел из пулевого оружия типа instant hit (все вычисления траектории пули и результатов выстрела происходят за один такт, моделируется бесконечно большая скорость снаряда). Физика полета здесь полностью отсутствует, от дула просто проводится луч до ближайшего пересечения с любым полигоном.
Дальше события развиваются в зависимости от того, что за полигон встретился. Если попалась стена, можно продолжить вычисления, подсчитывая рикошеты или пробивание пулей тонких перегородок, а можно и просто считать ее короткий полет завершенным. А вот если попался человек или монстр, начинается самое интересное. Когда-то все ограничивалось вычитанием из "здоровья" жертвы фиксированной величины, но в наши дни такое уже не впечатляет.
Для начала надо разобраться, куда попала пуля. Для этого на модели выделяются специальные зоны попаданий (каждый ее полигон имеет одним из своих атрибутов номер такой зоны). После чего можно принять решение о дальнейшем вычислении повреждений, например, попадание в голову может убить с одного выстрела, а в ногу – заставить врага прыгать на одном месте, зажимая руками пострадавшую точку, и впоследствии передвигаться вдвое медленнее, но почти не снимать с него «здоровья» на специальной шкале.
Есть и еще один аспект (кроме причинения повреждений), традиционно рассматриваемый при попадании: это эффект отбрасывания. В самом деле, уж если мы говорим о физике, то даже с бронежилетом игрок вряд ли не заметит попадания в него из дробовика с пары метров (не говоря уже о ракете).
Авторы всем известного Quake в свое время приняли решение: чем проще, тем лучше. И любое повреждение, нанесенное игроку, добавляло ему импульс, пропорциональный потерянному здоровью и направленный строго от точки, куда угодил снаряд. Отсюда и родился rocket jump – способ запрыгивания на отдаленные уступы, выпустив себе под ноги ракету.
В наши дни такой подход уже начинает постепенно не удовлетворять требованиям реалистичности, и коэффициент, на который умножаются повреждения для получения величины импульса, делают переменным в зависимости от типа оружия (к примеру, в некоторых играх ракета отбрасывает очень сильно, а автоматная очередь - заметно слабее).
Другой, не менее популярный тип повреждений – это не огнестрельные ранения, а разнообразные взрывающиеся снаряды – ракеты, гранаты, мины и т.п. Чаще всего они довольно медленно перемещаются в пространстве, а долетев до места назначения, взрываются. Разумеется, попадание ракетой точно в лоб позволяет причинить максимум повреждений. Но в этом аспекте никаких новинок нет, все точно так же, как и в случае пуль, разве что вычисления делаются через некоторое время после нажатия курка.
А вот вторая составляющая воздействия снаряда, взрыв, несколько любопытнее. Здесь повреждения причиняются всему, что оказалось поблизости от центра (именно не от эпицентра, то есть проекции центра на землю, а центра), и (в большинстве игр) плавно убывают до нуля на некотором расстоянии от него. Вычисления в этом случае весьма просты, если только сначала понять: какую точку нужно брать внутри человека для подсчета этого самого расстояния? Общего ответа не существует, чаще всего берут геометрический центр описанной вокруг него оболочки или честно считают расстояние до ближайшей к взрыву точки этой самой оболочки.
И не надо забывать, что после смерти и превращения в труп любой персонаж превращается в такой же точно объект, который движется по тем же самым физическим законам, только перестает реагировать на управляющие импульсы игрока.
СПОСОБЫ ОБЛЕГЧЕНИЯ НАГРУЗКИ НА ПРОЦЕССОР
Как уже было отмечено делать все абсолютно реалистично пока не удается: не хватает ресурсов ни процессора, ни памяти. И потому приходится идти на компромиссы.
Самый очевидный позволяет резко снизить количество вычислений за счет полного игнорирования далеких объектов. Ответ на старый философский вопрос: "если дерево падает в глухом лесу, и никто его не слышит - производит ли оно шум?" принимается таким: "а какая разница?". Когда игрок удалится от монстра или другого объекта, живущего по физическим законам, можно либо резко упростить вычисления и двигать монстра вдоль пола, забыв обо всех сложностях, либо вообще остановить врага, сохранить на всякий случай его данные и забыть о нем.
Можно пройти и чуть дальше по этому пути. В графическом моделировании существует метод под названием LOD (в переводе – «уровень детализации»), позволяющий экономить вычисления за счет уменьшения полигонов в моделях, находящихся вдали от игрока. То же самое можно проделать и с физикой. Ведь никому не интересно происходящее с вражеским автомобилем, пока он на другой стороне трека, и с нами сталкиваться не собирается? В этом случае прекращаем подсчитывать трение его шин об асфальт, подменяем работу рессор и шин тривиальным алгоритмом движения вдоль асфальта, и радуемся выросшему значению кадров в секунду.
АППАРАТНОЕ УСКОРЕНИЕ
В 2005 году молодая американская компания AGEIA представила оригинальную концепцию, призванную свершить революцию в играх. Что если сделать отдельную плату и повесить на нее все вычисления физически? «Плюс» такого подхода в том, что это проще, чем пытаться решить проблему программным способом и распределять нагрузку между видеокартой и процессором. Когда-то создатели первой отдельной видеокарты пошли как раз путем специализации, в итоге удача оказалась на их стороне.
Физические спецэффекты в играх не появятся сами по себе после покупки карты. Чтобы насладиться красивыми взрывами и реалистичной анимацией, разработчики игр должны проделать огромную работу. Чтобы облегчить программирование спецэффектов для PhysX, компания приобрела программный движок Novodex, который служит посредником между игрой и обработчиком физики. На его основе был создан особый программный пакет, позволяющий прописывать физические спецэффекты в нужных местах игры.
PhysX SDK использовался при разработке многообещающих графических движков будущего.
Что может предложить PhysX в плане спецэффектов? Например, расчет твердых тел (не деформирующихся при ударе) в разумных количествах (20―30 в кадре) мы можем увидеть в любой современной игре, но PhysX способна совершить качественный скачок: как насчет того, что количество подобных объектов возрастет до 30 000? Добавим сюда еще мягкие (деформируемые) тела и разного рода жидкости (флюиды). Если перейти с абстрактного языка на более предметный, то PhysX обещает нам реалистичные взрывы, воду, ткань, волосы. В общем, все то, чего не хватает в современных играх. Это в идеале, но вряд ли мы увидим в ближайшее время полностью интерактивные виртуальные миры.
На данный момент доступна лишь одна игра с поддержкой PhysX ― Tom Clancy’s Ghost Recon: Advanced Warfighter. Последние тесты показали, что код игры еще не отточен и с включенным аппаратным ускорением физики игра сильно тормозит. Причинами тому могут быть недостаточная проработка программного обеспечения или низкая пропускная способность соединения платы с процессором. Но это только начало...
Давайте разберёмся, что собой представляет физический процессор, и что он способен дать играм? Если не вдаваться в подробности, то выделенный физический процессор способен взять на себя все задачи физики, которые раньше обрабатывались процессором. Однако физический процессор отнюдь не заменяет видеокарту, которая по-прежнему используется для создания кадров. Вместо этого, физический движок симулирует эффекты, которые встречаются в реальном мире, например, гравитационное воздействие и трение.
Наверное, самым важным эффектом, который карта PhysX добавляет в игры, можно считать просчет веса игровых объектов типа дверей автомобилей и покрышек. Они более реалистично реагируют на удары пуль. Но карта не предотвращает появление ошибок взаимного перекрытия объектов. Покрышки почти всегда частично исчезают в земле после взрыва гранаты, как при установленной карте PhysX, так и без нее. В целом, похоже, движок PhysX и аппаратное ускорение PhysX работают пока не в четкой гармонии.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
Детская Энциклопедия, том 3. - Москва, «Педагогика», 1993
П. Шубский «Позовите Ньютона! Обработка физических процессов в играх». - Игромания № 106
Д. Конгер «Физика для разработчиков компьютерных игр». - Бином. Педагогика, 2007
Господин П.Ж. «Заметки кудесника шотгана о девелоперском деле, часть 8». - Game.Exe № 1'2001
Н. Тюкачев, К. Рыбак, Е. Михайлова «Программирование в Delphi»
С. Бондаренко, М. Бондаренко «3DS Max 8»
David Hodgson «HALF-LIFE2: Raising the bar»
Сайты: AG.ru, DTF.ru
Отредактировано Ждущий (17-09-2007 00:30:20)