7994420702;horizontal

Проблемы трассировки лучей — из будущего в реальное время, часть 3

Преимущества традиционной растеризации  

Этот раздел можно было так же назвать «недостатки метода трассировки лучей», ибо в конкурентной борьбе методов недостатки одного являются достоинствами другого и наоборот. Растеризация позволяет тривиально и дёшево, во всех смыслах, рисовать частицы и полупрозрачные спрайты и с их помощью, приближенно, изображать всякие сложные объекты и эффекты. Спрайты во всю применяются в графике для рисования веток, листьев, кустов и пучков травы. Ими можно целые поля изобразить достаточно похоже, опять используя модель рассеянного освещения.

Но даже более важно, что можно легко изображать спрайтами всякие нетривиальные объекты, как, например, бушующие пламя. Если его рисовать более физически корректным методом трассировки лучей, с учетом некоторого коэффициента прозрачности огня, то потребуется, по грубой оценке, в 100 раз больше вычислительной мощности. А уровень реализма повысится, по субъективной оценке большинства геймеров, не в сто раз. Можно сказать, большинство геймеров не будут готовы переплачивать в 100 раз за более физически корректно нарисованное пламя.

А частицы позволят легко рисовать довольно похожие на настоящие дым, облака тумана и многое другое. Опять-таки, освещение в этом дыму или тумане считается «идеально» рассеянным. А что может предложить трассировка лучей с точки зрения рисования тумана? Только сложности. Даже не совсем понятно, как его рисовать. Реальная модель освещения, распространения света, его рассеяния в реальном тумане, невероятно сложна. И физически корректное приближение потребует, опять-таки, невероятных ресурсов. Свет будет рассеиваться частичками тумана, из-за этого все тени будут нечеткими с изменяющимся коэффициентом затенения. Сам туман полупрозрачный, где-то светлый, где-то темный.

Рэйтрейсинг и идеология современных игр  

Многие современные высокобюджетные и кассовые игры строятся на основе принципов, используемых в кино. В графике это выражается так: есть декорации фона, переднего плана, объекты текущей сцены, актеры, эффекты и обязательный пост-процессинг. И каждая часть рисуется отдельно, можно сказать, сама по себе, независимо. А потом из частей составляется общая картинка. Так фильмы снимают. Снимут, допустим, актеров на белом фоне, а картинку заднего плана снимут отдельно и совместят при монтаже. Это точно как внутри игры формируется изображение. Для каждого объекта и эффекта есть отдельный прием рисования. Что-то рисуется спрайтами, что-то частицами, где-то тени проекционным методом отображаются, где-то с помощью метода теневых объемов или буфера шаблонов (stencil).

А игрок «играет роль» героя фильма. Так считается.

Хотя, на самом деле, игрок играет роль не героя фильма, а актера. Он выполняет свою, заложенную сценарием, роль в сюжете этого компьютерного фильма. А эти промежутки между пунктами сохранения игры, между которыми героя десять раз убивают, но потом он все-таки проходит и получает возможность сохраниться, это как дубли. Вы можете оценить, какая это трудная работа. Сколько нужно усилий, чтобы сыграть правильно и геймерам, на самом деле, надо бы платить за прохождение таких игр. Актеры ведь даже из массовки, не говоря уже о главных ролях, получают неплохие гонорары.

Но применительно к графике, этот геймер-актер ограничен в действиях. Заглянув не за тот угол, он окажется за декорацией, не в продолжении фильма, а на съемочной площадке. Потому что он окружен декорациями, он не в компьютерном мире, а в компьютерном кино. Там даже выбор метода рисования теней каждый раз задается в зависимости от сценария, какой больше подходит для конкретной сцены. Смотрится, например, какое время дня или ночи и, в зависимости от этого, выбирается способ освещения сцены.

А метод трассировки лучей универсален. Он предполагает единообразный способ рисования всей сцены, передних и задних планов, эффектов, актеров. И поэтому априори больше подходит для рисования некоторых компьютерных миров. Для графического движка на методе трассировки лучей требуется просто задать сцену, он все нарисует. В то время, как растеризационному движку надо постоянно указывать — что, кого и как рисовать. Ему самому трудно понять.

Однако, можно понять, что универсальный метод будет также априори и более вычислительно затратным. Но он получается не очень востребованным в большинстве современных игр. Прежде всего, речь идет об однопользовательских играх. Таким образом, рейтрейсинг выходит не очень нужным и дорогим. Такой универсальный метод мог бы быть востребован в онлайновых играх, где существуют целые игровые вселенные, по которым могут свободно разгуливать толпы обитателей. Но бизнес-модель онлайн-игр не очень благоприятствует внедрению метода трассировки лучей.

Дело в том, что для создателей и владельцев этих миров самое важное — привлечь как можно больше людей в свой мир. Поэтому игровой клиент должен работать на как можно большем количестве систем. Но когда трассировка лучей станет возможной в реальном времени, сначала это случится на системах верхнего уровня или специализированных ускорителях. А когда она спустится на самый нижний уровень, на уровень мобильных систем, пройдет ещё больше времени. А до этого консервативные издатели игр и не подумают тратиться на движок для, допустим, 10% пользователей.

И, может быть, такие высокомощные системы, способные осуществлять трассировку лучей в реальном времени с хорошим качеством, вообще в обозримом будущем не спустятся в нижний массовый сегмент и ноутбуки. Ибо сейчас, для всё большего количества пользовательских задач, хватает мощности современных процессоров. Борьба будет вестись за длительную работу ноутбуков, за дешевизну процессоров для них, а мощность будет вторым параметром. Так они и не будут приспособлены к тяжёлым вычислениям по экономическим причинам, хотя могли бы.

Для использования в игре движка на основе трассировки лучей надо изначально ориентироваться на него и только него. Нельзя сделать так, что один рендер через OpenGL, другой через DirectX, а третий через RayTrace. Это ещё одна причина, по которой рейтрейсинг не будет востребован в онлайновых многопользовательских играх. Даже когда, в принципе, технические возможности будут позволять. Да и суть онлайновых игр не в графике, а во взаимодействии между игроками. Сейчас популярны броузерные игры вообще в полном 2D. Хотя картинки оттуда, какие-то космические или средневековые стратегии, можно было бы рисовать рэйтрейсингом в реальном времени.

Но для того, чтобы в принципе можно было говорить о применении рэйтресинга в многопользовательских онлайновых играх и в играх в целом, метод трассировки лучей надо приспособить для рисования людей. А с этим есть проблемы.

Рэйтрейсинг и люди  

Можно сказать, человекоподобные существа — одни из наименее удобных объектов для трассировки. Потому, что это невероятно высокополигональные объекты без всякой регулярной структуры. В демонстрационных программах трассировки лучей вы найдете машины, здания, или просто сферы, которые отражаются друг в друге, но людей придется поискать. Собственно, только недавно появилась демонстрация от Intel:

где рисуется человек методом трассировки лучей. Но только потребовалась совокупность систем большой мощности, притом, что практически такую же картинку можно получить стандартными средствами на видеоускорителе верхнего уровня. Да и модель человека не особенно впечатляет.

С реалистичным изображением людей пока что трудности у всех методов, причем и в трёхмерных редакторах при скорости рендеринга, далёкой от реального времени. Люди просто выглядят как неживые куклы. Одной из причин является особенность человеческой кожи частично пропускать свет и рассеивать его в поверхностном слое. Этим живая человеческая плоть отличается, допустим, от пластмассы. Это очень сложно имитировать.

Вторая причина — небольшие волоски и неровности кожи. Они тоже создают трудновоспроизводимый эффект настоящей кожи. Волосы вообще рисовать очень сложно. Потому, что они очень тонкие, их огромное количество и они все формируют модель. Если изображать все волосы, потребуются сотни миллионов треугольников, а если не все, то человек будет выглядеть некрасиво. Если изображать меньшее количество более толстых волос, то тоже ничего хорошего не получится. Можно сказать, что проще нарисовать целый город со всеми домами и деревьями, чем реалистично изобразить причёску. Потребуется меньше треугольников и проще решить проблему освещения. Ибо при изображении копны волос опять большое значение имеет непрямой свет, который рассеивается среди сотен тысяч волос.

Очевидно, честно рассчитывать распространение света среди густого «леса» волос в реальном времени не представляется возможным в обозримом будущем. Поэтому, для изображения людей и их причесок применяются искусственные методы на основе растеризации, которые позволяют нарисовать что-то похожее на человека. И рэйтрейсинг тут не помощник. Потому что это общий, универсальный метод и корректно создавать изображение человека с помощью метода трассировки лучей слишком долго, а что-то приближенное можно и так прекрасно и быстро нарисовать традиционными средствами.

Автор предполагает, что в играх для реалистичного изображения людей будет применяться скорее технология примерно такого плана: записывается видео головы реального человека со всех точек зрения и с различной мимикой, а потом оно как-то монтируется в реальном времени для получения изображения в игре. Благо, объем памяти растет, видео в небольшом разрешении можно будет обрабатывать на шейдерных процессорах. Аналогично существующей технологии, используемой для эффектов в клипах, когда картинка останавливается и сцена поворачивается. То есть, мы как бы из двумерного изображения получаем трёхмерное. Так лицо можно снять множеством способов и вставить в игру. Будут актеры не только в кино сниматься, но и в играх.

Снова можно отметить, что методы в стиле трассировки лучей в данном случае не будут востребованы. Вот если бы попытки некоторых законодателей и обществ провести постановления, ограничивающие жестокость и насилие в играх, увенчались успехом, то это бы сильно улучшило перспективы рэйтрейсинга. Вместо высокополигональных человекоподобных созданий, людей в противогазах, полуголых женщин-зомби и так далее, в играх можно было бы использовать удобные для рэйтрейсинга низкополигональные модели каких-нибудь роботов или абстрактных существ. Они бы отбрасывали длинные тени от динамических источников света и отражались в зеркалах. Но пока тема убийства гуманоидов является доминирующей в играх. И самое главное — это получше нарисовать объект, чтобы он был как можно более реалистичным. А тени и отражения от него, это уже дело десятое. Не в них суть.

Но что же можно тогда изображать с помощью метода трассировки лучей? Пора перейти к конкретным примерам.