Математика, лежащая в основе производства фильмов и разработки компьютерных игр.
Если всмотреться в повседневную обстановку пытливым, наблюдательным взглядом, то можно заметить, кроме красивого пейзажа, тонкие изменения в освещении природных объектов, например, на листьях за окном, которые светятся великолепным светом под летним солнцем. Но что именно делает эти живые элементы такими визуально интересными и красивыми? Как именно листья рассеивают падающий на них солнечный свет, прежде чем он достигнет глаз наблюдателя? Но некоторые специалисты по визуальным эффектам задают себе немного видоизменённый вопрос: как лучше всего имитировать это с помощью компьютера, чтобы листья на экране или мониторе выглядели так же красиво, как в природе?
Если задуматься, все, что человек видит в мире — от деревьев до людей и одежды — состоит из сложных форм и материалов. Чтобы описать композицию визуальной сцены, необходимо описать все геометрические формы, из которых состоят объекты этой сцены, а также фактуры материалов, из которых они сделаны. Взглянув, например, на человека, можно увидеть кожу, лицо, волосы, одежду — это всё состоит из материалов с уникальными свойствами. А кроме того, существует также несколько типов источников освещения — например, солнце, лампа накаливания с тёплым светом, неоновая лампа с холодным спектром или луч прожектора. Каждый из этих источников, находясь под разным углом, создаёт уникальный рисунок освещения для одного и того же материала. То есть меняет визуальное восприятие фактуры. Причём человеческий мозг хранит огромное количество информации для распознавания истинности изображения почти для каждого такого эпизода. Наблюдаемая сцена воспринимается зрителем (или фиксируется камерой) с определённой точки зрения и в совокупности компонентов — достаточно одному элементы выглядеть неестественно, как это сразу станет бросаться в глаза. Точно так же и в компьютерной графике или кинематографе — при внимательном рассмотрении любой сцены обнаруживается огромное разнообразие элементов, работающих вместе, чтобы в конечном итоге создать то изображение, которое показывается зрителю.
Обычно люди принимают то, что видят в повседневной жизни, как нечто само собой разумеющееся, но когда специалистам приходится создавать реалистичное изображение мира на компьютере, то приходит понятие, насколько интересна и сложна наша визуальная реальность и насколько сложно убедительно представить программно. Почти все давно наслышаны о студии Pixar, которая известна своими анимационными историями. Изначально сценаристы этой компании задумали сделать спецэффекты в своих анимационных фильмах более убедительными, комбинируя компьютерный материал с фотографиями, сделанными вживую. Чтобы беспрепятственно объединить компьютерные детали с фото, компьютерные изображения должны были быть фотореалистичными, то есть неотличимыми от реальных фотоснимков. Для этого потребовалось создать 3D-изображения на основе описаний элементов сцены. Это был первый этап процесса, называемого рендерингом. Процесс получения описания 3D-сцены и преобразования его в компьютерное изображение — симуляцию окружающей среды. Со временем люди поняли, что рендеринг можно использовать не только для спецэффектов, но и для создания целых фильмов, только на компьютере, без необходимости снимать их на природе.
Как работает рендеринг? Во-первых, художники, дизайнеры и аниматоры предоставляют специалистам по визуальным эффектам (VFX) трёхмерные описания мира и конкретной сцены, которые необходимо смоделировать. Эти описания предоставляются в виде рисунков или текста в компьютерных файлах. Получив полное описание, VFX-дизайнеры должны создать компьютерную модель — представление на компьютере реальных ситуаций и процессов, чтобы, в конечном итоге, преобразовать файлы описаний в реальные изображения (например, в файлы JPEG, с которыми многие, возможно, хорошо знакомы).
Самый простой способ смоделировать сложные формы, посредством компьютерной графики, это использовать многоугольники, например, треугольники и квадраты. Все сложные формы в сцене разбиваются на очень маленькие треугольники, обычно миллиарды полигонов на изображение. Кроме того, одной из самых больших проблем реалистичного рендеринга является правильная симуляция освещения. Самый простой способ смоделировать свет в виртуальном мире — предположить, что лучи света движутся по прямым линиям. Чтобы правильно моделировать свет, используется техника, называемая трассировкой лучей. Это метод, используемый при рендеринге, для определения освещения сцены путём моделирования поведения света, в котором отслеживаются пути световых лучей в виртуальной сцене, чтобы выяснить, как должно выглядеть освещение этого изображения.
Чтобы определить яркость и цвет каждого пикселя, отслеживаются пути лучей, исходящих от источника света, и воспроизводится в модели, как они отражаются от поверхностей, на которые попадают. Учитывается, как отражённое, так и прямое освещение, при котором свет отражается прямо в глаз или камеру. Более сложной проблемой является непрямое освещение, например, когда солнечный свет, отражаясь от стен или потолка, освещает другие объекты. Примером также может являться рассеянное естественное освещение, при котором солнечный свет отражается от облаков и атмосферы.
Каждый прямой источник света в сцене, будь то Солнце или лампа накаливания, даже если его не видно, но предполагается, что свет исходит именно от него, излучает световые лучи. Эти лучи путешествуют в пространстве, пока не достигают поверхности какого-либо объекта и не рассеиваются. Каждый материал рассеивает свет по-своему, в зависимости от конкретных свойств его поверхности (например, от того, насколько она гладкая и прозрачная). Большая часть работы специалиста по визуальным эффектам сосредоточена на исследовании компьютерной графики с последующим моделированием того, как различные материалы (например, камень, ткань или кожа) рассеивают свет от различных источников. Для каждого материала, в конечном итоге, находится/подбирается математическая функция, описывающая, как именно этот материал рассеивает свет. Этот элемент так и называется — функцией рассеяния материалов.
Один из способов смоделировать эту функцию — представить поверхность материала в компьютере так, как будто она состоит из множества маленьких зеркал, направленных в разные стороны. Когда лучи света падают на идеальное зеркало, они отражаются под тем же углом отражения, равным углу падения. Это многие помнят из школьного курса физики. Создание модели рассеяния материала, как случайного распределения зеркал на его поверхности, может хорошо работать только для некоторых глянцевых материалов, но для многих природных субстанций (особенно с матовой или полуматовой фактурой) требуются более сложные построения. Сначала, путём прямых измерений специальным оборудованием, определяется степень рассеивания светового потока этой поверхностью.
Такие измерения проводятся многократно в различных направлениях от находящегося источника. Вся эта информация сохраняется в таблицах или массивах данных на специальных выделенных серверах. Потом можно будет использовать эту информацию для моделирования конкретного материала на компьютере. Иногда к этим измерениям подгоняются некоторые комбинированные физические модели, а уже вычислительные мощности центров обработки данных выдают, по запросу, необходимый результат. Для упрощённого понимания — просто представьте себе кожаную куртку с замшевыми вставками, где разная фактура кожи, особенно в местах состыковки этих материалов, даст комбинированный оптический эффект.
Одной из самых интересных проблем, над которыми работают VFX-дизайнеры — это наиболее реалистичное моделирование кожи. В ранних фильмах, в которых использовался рендеринг, кожа выглядела довольно нездоровой и искусственной. Неудивительно, ведь она, по сути, моделировалась как пластик! Здоровая кожа обладает особым сиянием, которое делает ее живой. Не было тогда ещё банка знаний по физике рассеяния света, объясняющих, почему кожа выглядит таким образом. Причём надо заметить, что оттенков кожи даже у одного человека может быть множество. И в разное время дня у кожи может быть разная фактура. Но тут, к счастью, разработчики ПО нашли два подходящих источника информации, которые помогли разгадать эту загадку. Первым был мануал по рабочему моделированию атмосфер планет (таких как Венера, Марс или Юпитер), в которых достаточно подробно было объяснено, почему планеты выглядят так, как они выглядят. Планеты часто имеют особое свечение вокруг себя, как и кожа. Эти модели атмосфер планет содержат твёрдое ядро (планету), окружённое сравнительно тонким слоем различных газов, составляющих атмосферу.
Вторая подсказка обнаружилась в книге по истории искусств. Там рассказывалось, как великий художник Рембрандт рисовал кожу, которая на его картинах выглядит очень реалистично. Он накладывал пигменты и масла друг на друга, чтобы придать коже живое сияние. Рембрандт не был знаком со строением кожи, но он каким-то образом интуитивно уловил тот факт, что кожа имеет несколько слоёв. Рисунки, объясняющие его технику рисования, показывают, как лучи света проникают в слои кожи и в конечном итоге отражаются обратно не только от верхнего слоя. Используя эти две подсказки, были разработаны первые математическую модели функции рассеяния кожи, которые были основана на процессе, называемом подповерхностным отражением. Метод воспроизводит, в виртуальном представлении, такой тип рассеяния, при котором свет проникает в материал в одной точке, рассеивается под его поверхностью и выходит в другой точке. К нему был добавлен эффект, при котором свет проникает через поверхность кожи, попадает во внутренние, подповерхностные слои, рассеивается и затем возвращается обратно на хрусталик глаза. Эта модель получилась удачной, так как довольно хорошо имитировала кожу, Конечно, в то время ещё не всё получалось идеально, но был выработан правильный подход.
Но при первом, достаточно примитивном подходе, структура коже не выглядела гладкой. Со временем были разработаны более продвинутые схемы, что усложнило математические расчёты модели, но оно того стоило — кожа наконец стала гладкой! Причина, по которой она изначально выглядела неровной, заключалась в том, что если на небольшом участке есть одна освещённая сторона и одна тёмная сторона, то это будет выглядеть как выпуклость. Но если свет, поступающий с освещённой стороны, рассеивается внутри кожи и выходит на тёмную сторону, то она тоже подсвечивается, хоть и не так явно. Другими словами, подповерхностное отражение распределяет свет таким образом, что кожа выглядит гладкой.
Ещё одним интересным опытом стала разработка метода моделирования волос. Вначале волосы также выглядели нереалистично на рендерах. Оказалось, что представление волос в виде цветных прозрачных цилиндров работает очень хорошо. У людей на голове около 100 000 волос, и в современных фильмах каждый волос моделируется индивидуально с помощью цилиндрической модели. Конечно, волосы бывают разные, поэтому человеческие волосы моделируются иначе, чем, например, мех животных. Потребовалось время, но дизайнеры компьютерной графики в конце концов поняли, как моделировать каждый тип.
Для моделирования света требуется математика, потому что необходимо найти и использовать правильные функции рассеяния, чтобы отслеживать движение световых лучей в виртуальных сценах. Но есть ещё одно важное применение математики в компьютерном графическом моделировании. В каждую сцену реального мира проникает практически бесконечное количество световых лучей. Каждый луч попадает на объекты и рассеивается бесконечное количество раз, прежде чем достигнет наблюдателя. Чтобы реалистично смоделировать это свойство в виртуальной сцене, специалисты должны просуммировать все пути, по которым свет может достичь определённой точки, чтобы понять, сколько света должно быть в этой точке. Аналитически выполнить такое суммирование невозможно. Для этого используется математический метод, который изначально применялся для прогнозирования поведения случайно отскакивающих частиц, называемый моделированием Монте-Карло, использующий случайную выборку для расчёта результата неопределённого события.
Сегодня в каждый пиксель смоделированного киноизображения попадает около 1000 световых лучей, которые беспорядочно отражаются. В каждом изображении миллиарды пикселей, поэтому приходится отслеживать необычайно большое количество лучей для каждого кадра в каждой сцене. Это требует большого количества вычислений и стоит очень дорого. Самые быстрые компьютеры/сервера в мире используются для выполнения вычислений, при создании компьютерных фильмов и игр. Небольшие компании арендуют выделенные сервера в дата-центрах под эти задачи. А крупные студии и разработчики строят свои мощные современные ЦОД (центры обработки данных). В типичном фильме для расчёта одного изображения фильма требуется около 30 часов вычислений несколькими серверами. Это может означать, что некоторым фильмам потребуется до миллиона часов компьютерного времени! Но оно было бы на порядки больше, если бы не был разработан математический метод и шаблоны под него, что значительно сократило количество необходимых вычислений.
Наш повседневный мир становится совершенно волшебным, если мы посмотрим на него с точки зрения специалиста по информатике. Поэтому, когда вы, в следующий раз посмотрите сцену в фильме, созданную компьютером, вы сможете по-новому оценить количество исследовательских усилий и компьютерных ресурсов, затраченных на её создание!