Текст книги "Журнал «Компьютерра» №1-2 за 2006 год"
Автор книги: Компьютерра Журнал
сообщить о нарушении
Текущая страница: 4 (всего у книги 12 страниц) [доступный отрывок для чтения: 5 страниц]
Посмотрите на свою руку: видите морщины, появляющиеся на ней, когда вы сгибаете локоть? Нашему персонажу такие морщины тоже нужны. Для их имитации строятся специальные кривые, которые, в отличие от костей, продавливают кожу. И после размещения в нужном месте «привязываются» к скелету.
Теперь тело персонажа практически готово. Но лицо, ну или морда, что у него там есть, остается неподвижным. А если в фильме будут крупные планы? Для создания мимики существует несколько принципиально разных подходов. Естественный – для мимики используется имитация лицевых мышц. Они, как ни удивительно, делаются из тех же костей, что и скелет, но работают, как настоящие мышцы, – изменяя длину, двигают ткани лица. Этот метод дает практически полную свободу в создании различных выражений лица, но достаточно сложен в управлении, ведь лицевых мышц может быть очень много.
Более простой в управлении метод основан на плавной модификации трехмерных объектов. Сначала лицо персонажа дублируется в нескольких экземплярах, обычно не более пяти. Каждый из дублей модифицируется таким образом, что выражает крайнюю степень той или иной эмоции: радости, гнева, страха.… После чего специальный инструмент позволяет «смешивать» в разных пропорциях эти лица. Теперь при помощи пяти ползунков можно управлять мимикой персонажа. Более того, таким же образом можно создать и эффект плавной трансформации, всего лишь сделав пару из новых лиц, сильно не похожих друг на друга.
Когда все предварительные работы завершены, в дело вступают аниматоры. Именно эти люди научат наше существо двигаться на экране. Самый простой метод анимации компьютерных персонажей называется методом ключевых кадров (Key Frames). Состояние героя точно задается на некотором наборе кадров, эти кадры не обязаны идти в фильме последовательно, например поза существа может быть задана на первом десятом и пятидесятом кадрах. После чего для всех промежуточных (не ключевых) кадров автоматически вычисляется положение всех частей героя. Этот способ достаточно прост в реализации, но слишком трудоемок для создания движений сложной конфигурации и требует большого умения аниматора для получения реалистичности поведения персонажа. Более того, не все позы персонажа в реальности бывают возможными. Зритель вряд ли поверит в существо с явно смещенным центром тяжести. Например, при анимации хвоста бегущего динозавра надо следить за тем, чтобы хвост, как и его прототип, балансировал в воздухе, помогая своему хозяину не упасть. В таких случаях зачастую применяется процедурная анимация, здесь для управления персонажем или его частью пишется специальная программа, которая может расположить одни части тела персонажа оптимальным образом исходя из других и существа в целом. Но и такой подход не всегда дает приемлемый результат.
Что же может стать источником реалистичного движения? Правильно, сам человек. Для того чтобы перенести движения с человека на цифрового персонажа, существуют системы захвата движения (Motion Capture), позволяющие анимировать в реальном времени. Существует три принципиально разных подхода к созданию таких систем. Первый: можно разместить на руках, ногах и других частях тела специальные датчики, которые будут передавать на компьютер информацию о своем положении в пространстве. Второй: на человека можно «надеть» внешний скелет, регистрирующий изменение положения своих костей. Однако обе эти технологии громоздки и дороги.
Третий же (новейший) способ захвата движения куда проще. На теле человека в особых точках размещаются специальные маркеры, например ярко-оранжевые перчатки. А программный комплекс восстанавливает положение маркеров в пространстве, получая данные с обычных цифровых камер, расположенных вокруг движущегося человека. Этот способ наиболее удобен, так как оборудование почти не мешает двигаться. Впрочем, для достижения более реалистичных результатов могут применяться особые костюмы, сковывающие движения актера, для восстановления походки рыцаря в тяжелых латах, может быть, и актеру придется облачаться в некоторое подобие средневековых лат. К тому же технологии Motion Capture годятся для копирования движений не только человека, но и животных.
Даже мимику можно перенести с реального персонажа на виртуального. Для этого на лицо человека наклеиваются яркие кружочки, после чего его снимают с нескольких камер одновременно, и с помощью программного обеспечения, схожего с тем, которое используют для Motion Capture, физиономия человека в реальном времени переносится на компьютерного героя.
А что это мы совсем забыли о механических актерах. Их можно сделать очень похожими на живой организм, просто скопировав его устройство с начала и до конца. Сначала изготовить копию скелета с функциональными устройствами, заменяющими мышцы, после чего разместить муляжи мышц, снабдив их возможностью увеличивать объем и, наконец, обтянуть все «кожей». Так как ее можно изготовить из материалов, похожих по свойствам на настоящий покров животного, результат может быть очень реалистичен. Но это пока наш механический актер неподвижен. Во время съемок ему придется двигаться. Это могут быть однокадровые движения как в классической кукольной мультипликации, но тогда можно будет забыть о сложных прыжках и естественности движений. Более того, этот метод съемок требует большого количества времени. Так, при съемках первого «Кинг-Конга», где роль большой обезьяны играла кукла, а деревья в джунглях были простыми комнатными растениями, в сцене, пока Конг шел по лесу, одно из деревьев успело выбросить бутон и даже зацвести.
Если нам надо снимать непрерывные движения, то кукла должна либо самостоятельно двигаться, либо использовать помощь человека. Куклы-роботы хорошо подходят только на роли роботов, все дело в их необычном стиле передвижения: согласитесь, трудно не узнать походку даже самого изощренного робота и еще труднее выдать ее за прыжки зайца или бег человека. Помощь человека машине может прийти как снаружи, так и изнутри. Да, именно изнутри, персонаж может надеваться на актера, как новогодний костюм. Это позволяет достичь некоторой реалистичности движений, но не позволяет создать героя ростом четыре метра или существо с непропорционально длинными конечностями: тот же Кинг-Конг с человеческими пропорциями смотрелся бы не так колоритно. Существуют и другие вариации на тему марионеток, но всем им присущ крупный недостаток – даже не необходимость стирать на отснятом материале веревки, а все та же неестественность движений, зритель в них не верит.
Если механического актера, как и живого, можно снять обычной камерой, то для их компьютерных коллег применяются специальные программы рендеринга, позволяющие создавать реалистичное изображение на основе 3D-сцен. Для наиболее сложных сцен обычно используют так называемые рейтрейсеры (Raytracer). Принцип действия этих программ довольно прост. Из оптического центра камеры через каждый пиксел на экране пускается луч. Он может отражаться, преломляться и затухать в зависимости от того, какие объекты встречаются у него на пути, и в конце концов приносит информацию о цвете того пиксела, через который прошел в самом начале своего пути. Понятно, что такой способ визуализации требует немалых вычислительных мощностей, особенно если учесть огромные разрешения кинематографических форматов.
Теперь осталось только совместить результаты рендеринга с отснятым материалом, если, конечно, фильм не полностью цифровой. Но это уже тема отдельной статьи.
Виртуальные массовки
Иногда по сценарию требуется присутствие в одном кадре множества персонажей. Можно, конечно, набрать необходимое количество статистов, но это дорого. Представьте, во что обошлись бы сцены битв из «Властелина колец», если бы режиссер решил собрать такое количество людей, надеть на них доспехи, раздать оружие и погнать в атаку. Но это еще не все проблемы, таким скопищем людей очень трудно управлять, даже полководцу это не всегда под силу.
В современном кинематографе массовки принято размножать или рисовать с нуля, полностью собирая из 3D-персонажей. У каждого из этих методов есть свои достоинства и недостатки. Размножение двухмерных персонажей на первый взгляд кажется менее трудоемкой задачей, а 3D открывает больше возможностей для управления.
В фильме «Гладиатор» толпы зрителей в Колизее были размножены из небольшого количества статистов. Тогда мощности компьютеров для создания такого количества реалистичных 3D-людей были еще не достаточны. Поэтому была выбрана технология размножения при помощи композитинга. Так как камера практически во всех кадрах находилась в центре арены, ракурс для всех людей на трибунах был практически одинаков. Для таких сцен как нельзя лучше подходит 2D-метод размножения массовки.
А вот в трилогии «Властелин колец», во-первых, нужны были воистину масштабные батальные сцены, и, во-вторых, камера должна была пролетать над строями воинов. Поскольку во время пролета камеры ракурс, с которого видно человека внизу, существенно меняется, то двухмерное размножение не подходило, было решено делать участников массовки в 3D.
Персонаж для участия в массовке делается по тем же принципам, что и любой другой, но кроме меньшей детализации он еще должен обладать очень простыми инструментами для управления. Если у вас всего один персонаж, то вы можете следить за движением каждого сустава, а если их больше? Хорошо, если вам не лень указывать каждому участнику сцены, когда и куда ему бежать. Для такого персонажа создается некоторое количество элементарных анимаций: ходьба, бег, прыжок, падение. Также некоторые параметры персонажа делаются так, чтобы при размножении их легко было задать случайным образом, – например, рост, полнота, цвет одежды и кожи.
При работе над «Властелином колец» для управления массовками доселе невиданных масштабов (более 70 тысяч объектов) на студии Weta Digital была разработана программа Massive. Она позволяет управлять как отдельным существом, так и строями, при этом они движутся по 3D-ландшафту, автоматически обходя преграды и не сталкиваясь друг с другом. Каждый агент (так принято называть участника массовки) имеет свой искусственный интеллект, который позволяет ему не только адекватно перемещаться, но и атаковать противника, стараясь нанести свой удар так, чтобы попасть в наименее защищенную часть тела. Эта программа вышла за пределы родной студии, что редко случается в мировой практике, и была взята на вооружение крупнейшими студиями планеты.
А вот в фильме «9 рота» массовку для финального боя решили делать двухмерной. При натурных съемках были задействованы актеры только для первых рядов наступающих душманов. Остальных же пришлось дорисовывать, для чего в студии на зеленом фоне отсняли множество кадров с различными ракурсами и движениями актеров. Впоследствии из этих материалов и была собрана финальная массовка.
Технологии: Эффекты в компьютерных играх
Спецэффекты нужны не только в кино, но и в компьютерных играх. Причем то, что для киношников не составляет никакого труда, может вызвать у разработчиков игр головную боль. Первое, что приходит на ум, – это тени. Если при натурных съемках они получаются сами собой, да и при рендеринге 3D-сцен рейтрейсеры делают неплохие тени, то в играх…
Тени
…в играх использовать рейтрейсеры пока невозможно из-за недостаточной производительности компьютеров. Самый простой способ создания тени, падающей от объекта на плоскость, – это разместить под объектом полигон с заранее заготовленной полупрозрачной текстурой, повторяющей форму тени. Или же, если объект и источник света неподвижны, тень можно нарисовать на текстуре пола. Но если объект будет двигаться относительно источника света, то и тень должна меняться.
В таких случаях придется рисовать объект дважды. Один раз таким, каким мы его будем видеть, а второй раз путем несложных проекционных преобразований изменив его так, чтобы по форме он точно соответствовал своей тени. После чего объект окрашивается в полупрозрачный серый цвет и отрисовывается на полу. Этот метод, однако, подходит, только когда тень падает на плоскость, а если под объектом сложная рельефная поверхность?
Для таких случаев существует технология теневых объемов (Shadow Volume). Нам придется дважды нарисовать часть сцены, на которую может попасть тень. Сначала для отбрасывающего тень объекта строится трехмерное тело, соответствующее той части пространства, которую он затеняет. Например, для круга – это будет конус, а для треугольника – пирамида. Понятно, что построить такое тело для объекта сложной формы непросто, хотя можно построить отдельный объем для каждого полигона, а потом их объединить. После чего встроенными средствами видеокарты мы можем отсечь часть сцены, не попадающую в теневой объем. Затем, отсекая то, что не попало в объем, нарисуем ту же сцену, но с приглушенными цветами. Этот метод позволяет рисовать тени, которые одни сложные объекты отбрасывают на другие не менее сложные, а также на самих себя. В последнем случае придется рисовать объект столько раз, сколько в нем содержится полигонов. Shadow Volume подходит не только для создания теней, но и для имитации ярких пучков света. В этом случае объем будет соответствовать пучку света, а части сцены, попадающие внутрь пучков, будем рисовать ярче, чем остальные. Если же тела, соответствующие теневым объемам, сделать полупрозрачными, то лучи будут отчетливо видны в пространстве. Останется только решить проблему просвечивания пучков через объекты сцены.
Метод Shadow Mapping позволяет делать тени, отбрасываемые предметами на себя. Для этого в точке освещения создается виртуальная камера, и все точки, которые ей «видны», заносятся в специальный буфер. Они рисуются освещенными, а все остальные затененными. Перечисленные методы делают так называемые жесткие тени, имеющие четкую границу с освещенными частями сцены. В реальности же края теней чаще всего размыты, из-за того что источники света не точечные и свет отражается от различных предметов. Чтобы имитировать такие тени, можно одним из предложенных методов несколько раз нарисовать их, постепенно уменьшая размеры и увеличивая затемненность, и таким образом получить плавный переход.
Современные видеокарты поддерживают пиксельные шейдеры, с помощью которых можно получить очень неплохие тени. Для каждого пиксела задается программа, позволяющая определить его освещенность и сделать цвет ярче или темнее. Так можно сгенерировать жесткие или мягкие тени. Единственный недостаток этого метода – код шейдера для каждой сцены придется писать практически заново.
Отражения
Плоское зеркало сделать достаточно просто, нарисовав с обратной стороны то, что должно в нем отражаться. Стеклянные полы делаются таким же способом: под полом рисуется перевернутая комната со всей обстановкой, а пол делается полупрозрачным. Таким образом, нижняя комната будет восприниматься как отражение верхней, и в зависимости от степени прозрачности пола он может казаться как зеркальным, так и едва отражающим.
Но если понадобится сделать отражающим предмет сложной формы? Можно, конечно, для каждого полигона нарисовать перевернутую сцену. Но человек устроен так, что ему трудно оценить, насколько реально выглядит отражающая поверхность сложной формы, главное, чтобы блестело и контуры угадывались.
Поэтому такие отражения делают «нечестно», натягивая на объект специальную текстуру. Существенно упростить эту задачу может автоматическая генерация текстур. Обычно используют сферическую или кубическую генерацию: вокруг объекта создаются обтянутые текстурой виртуальные куб или шар, которые и проецируются на объект. Соответственно для шара достаточно одной текстуры, а для куба потребуются все шесть.
Чтобы создать эффект отражения, необходимо в качестве текстур для объекта с автоматической генерацией текстурных координат подать фотографию сцены, сделанную из центра объекта. Для сферического способа придется использовать сверхширокоугольный объектив с захватом в 360 градусов, иначе предмет будет отражать только часть сцены. А для кубического подойдет и с 90-градусным. Если сцена, которую необходимо отражать, статична, то текстуры можно заготовить заранее, если же она изменяется, то ее придется фотографировать прямо в процессе работы программы. Точно так же можно создать и эффект преломления, достаточно просто-напросто перевернуть текстуры.
Взрывы, огонь и дым
Во многих играх чуть ли не каждую секунду что-то взрывается и горит. Для создания взрывов существует несколько подходов. Самый простой из них – это технология, основанная на 2D-спрайтах. Взрыв представляет собой последовательность быстро меняющихся текстур (точно так же можно сделать и огонь, только последовательность должна быть зацикленной). Поскольку это объект двумерный, нужно, чтобы взрыв был всегда обращен «лицом» к игроку. К сожалению, такие взрывы трудно разнообразить. Игра, в которой все взрывы одинаковые, будет выглядеть странно, а каждый новый тип взрыва потребует свою уникальную последовательность спрайтов (кстати, огонь можно разнообразить, просто сдвинув последовательность текстур по фазе). Такие взрывы нельзя располагать очень близко к игроку, иначе их плоская природа будет заметна.
Более сложные и впечатляющие эффекты создаются при помощи систем частиц. Тут киноиндустрия и разработчики игр идут нога в ногу. Ведь в кино на обработку каждого кадра компьютер может потратить достаточно большое время, а в игре это неприемлемо. А вот создание взрывов при помощи геометрии применяется только при разработке игр. Взрывы создаются как специфическая комбинация текстурированных особым образом сфер и других фигур. Такие взрывы гораздо менее требовательны к вычислительным ресурсам, чем сделанные на основе систем частиц, и зачастую дают неплохие результаты, ни в чем не уступающие им.
Практически все дымы в играх – это системы частиц, а вот для создания огня есть свой специфический способ, основанный на 3D-текстурах. Объемная текстура – это аналог обычной плоской текстуры, только теперь каждая вершина имеет не две, а три координаты, что позволяет накладывать на полигон такие цвета, какие соответствовали бы треугольнику в 3D-текстуре с углами в нужных точках. Огонь представляет собой изменяющееся тело, текстурированное таким образом, и за счет структуры 3D-текстуры достигается мерцание огня. Потенциально этот способ может давать очень хорошие результаты, но он довольно сложен в реализации.
Различного рода туманы часто используются в играх. Раньше главным предназначением тумана было скрыть границы сцены. Например, на открытой местности можно было не рисовать все объекты до горизонта, а просто затуманить их. Такой способ достаточно примитивно реализуется, просто, в зависимости от удаления точек от камеры, к их цвету подмешивался цвет тумана. Позже туман стали использовать для придания определенной атмосферы, тут он уже должен был быть не на всей сцене, а только на определенных ее участках. Для этого очень хорошо подходил вершинный туман; при его использовании для каждой вершины указывался не только цвет, но и «туманная» координата, в зависимости от которой и подмешивался цвет тумана. Интересный эффект стелящейся над землей пелены достигается набором полупрозрачных горизонтальных плоскостей, по которым в различных направлениях могут двигаться едва различимые текстуры.
Уже сейчас качество эффектов в играх оставило далеко позади некоторые фильмы прошлого, и можно с уверенностью сказать, что то, чем нас сейчас удивляет кинематограф, в недалеком будущем можно будет увидеть и на экране монитора в реальном времени.
ФМ-ВЕЩАНИЕ: Занимательная футурология
По традиции все «взрослые» колумнисты в начале года делают прогнозы на новый год, а в конце года обязательно подводят итоги (которые, как обычно, показывают, что «оракул» редко ошибается). Такие прогнозы, вспоминая старый анекдот из области теории вероятностей, делать нетрудно: «Какова вероятность того, что, выйдя из подъезда, вы встретите китайца»? (В связи с объявленным годом Китая в России и России в Китае.) Очевидно – 50%. Исходя из этого, попробую и я дать свой первый прогноз на будущее. Естественно, меня больше всего интересует интернет-рынок и состояние софтверной индустрии в России.
Маловероятно, что китайский поисковик Baidu выйдет на российский рынок и начнет конкурировать с Google. Даже самый смелый футуролог будет побит за такие утверждения. Но то, что Mail.ru объединится с «Яндексом» и .masterhost, выйдет на IPO и легким движением руки обгонит по капитализации Google двухлетней давности, даже угадывать не надо. РБК после этого займет достойное второе место и будет, учитывая предстоящий 2008 год, готовиться к очередной эмиссии, которую почти целиком выкупит один из ведущих издательских домов. «Рамблер», видя, что третье место уплывает, срочно проведет вторую эмиссию и на вырученные деньги купит eHouse, объединив две компании, путь и стратегию которых пока никто не понимает. Может быть, новая компания с гипотетическим названием РeHouseР, будет понятнее рунетовским аналитикам. Инвестиционный фонд Финама начнет вкладывать деньги в стартапы (ни до, ни после никому не известные) и к концу года неожиданно выпустит многонациональный сервис для всего постсоветского пространства. Сервис никому не будет нужен, но себя окупит. Одновременно на горизонте возникнет западный инвестиционный фонд FigNam. Он будет рассматривать десятки заявок в неделю на стартапы, связанные с тематикой социальных сетей, и, не удовлетворив ни одной, зарегистрирует сотни патентов в США на компанию NamFig. Лидирующий интернет-магазин достроит автоматизированный склад в Твери, и его арендует Amazon.com, организовав представительство в России под названием «Ам-Озон».
Что же в этой трудной для понимания западного человека ситуации будут делать Yahoo!, Microsoft и Google? Google наконец-то официально объявит о создании российского представительства в Бологом численностью 3000/1000 человек и начнет рекламную кампанию с рассылкой 170 тысяч писем, на которых будет написано: «Вебмастер. Твой чек с заработком 170К рублей на AdSense ты сможешь обналичить в ближайшем отделении Сбербанка!». Microsoft наконец-то назначит в российском представительстве персону, ответственную за интернет-канал, и русифицирует интерфейс Hotmail. В MSN Messenger появится реклама на русском языке, в которой будет рекламироваться Ситибанк. Yahoo!, который уже научился таргетировать на Россию, будет показывать рекламу «Последнего дозора» в личных дневниках ЖЖ-пользователей. На этом продвижение западных порталов в Россию в нынешнем году, видимо, и закончится.
Для софтверной индустрии настанут трудные времена. Во исполнение поручения президента и очередного пинка от премьер-министра министерства, распределяющие деньги, сдадутся на милость лоббистов от офшорного программирования и пропустят изменения в законодательстве. Вслед за тем из отдаленных регионов стройными рядами потянутся в технопарки дивизии программистов-недоучек. После полугодичного дополнительного обучения английскому языку на их основе будут создаваться call-центры, вполне способные конкурировать даже с индийскими (по зарплате, конечно). Через некоторое время выяснится, что индийцы готовы получать еще меньше, и Дубна с Троицком станут городами с преобладанием смуглого цвета кожи. Но это я уже полез в долгосрочное прогнозирование. Вернемся к текущему году.
На антивирусном рынке заметных изменений не произойдет, так как в бета-тестирование четвертой версии русифицированной Microsoft OneCare забудут включить компьютеры с русской Windows. Несколько крупных зарубежных вендоров откроют у нас представительства, но это никому не будет интересно, потому что маркетинговых бюджетов центральные офисы им не выделят. Антипиратские ассоциации продолжат бороться с контрафактом, что приведет к увеличению легальной доли программного обеспечения с 13% до 20% (что само по себе хорошо), но главное, это позволит мне написать «Пираты поневоле-7», получить еще сотни писем от разъяренных сисадминов и снять на этой основе мультфильм для flash-телевидения. Демпинг и откаты как явление не исчезнут. Такое только в дурном сне может привидеться. Но уровень и того и другого настолько возрастет, что компании, использующие эти методы, смогут обеспечить операционную прибыль на рекордном уровне – минус 10%. Да, как же я забыл про родной «Софткей». Чтобы завуалировать реальность своих предыдущих прогнозов, напророчу-ка я ему увеличение оборотов в пять раз. В это даже я сейчас не верю.