netlib.narod.ru< Назад | Оглавление | Далее >

Еще шейдеры

Карты нормалей великолепны, но существует еще много способов улучшить визуальное качество трехмерных объектов. В игре Rocket Commander вы будете счастливы с небольшим наложением параллакса и некоторыми крутыми постэкранными шейдерами. Если в своих играх вы более амбициозны, то, возможно, захотите реализовать шейдер для стекла, эффект отражения, крутой шейдер для водной поверхности и многое другое. В этом разделе дан краткий обзор возможных шейдеров, которые вы можете написать для вашего графического движка XNA. Еще больше примеров доступно в сети и в книгах, посвященных шейдерам. Хорошие примеры есть на сайтах Nvidia и www.shadertech.com и в сериях книг «GPU Gems» (издаваемой Nvidia), Game Programming Gems (издательство Charles River Media) или Shader X (издательство Charles River Media, под редакцией Вольфганга Энджела). Вы многое узнаете из этих книг, но в конце, скорее всего, будете писать свой код шейдера, если не найдете кого-то, кто сделает это за вас.

Наложение смещения

Иногда наложением смещения (offset mapping) называют наложение параллакса, поскольку меняется наложение точек, но обычно наложение смещения означает поднятый на новый уровень эффект наложения параллакса, выполняемый в пиксельном шейдере с использованием нескольких слоев высот. Другим популярным названием наложения смещений является поэтапное наложение параллакса (steep parallax mapping), берущее свое начало из опубликованной в апреле 2005 года статьи Моргана и Макса МакГуиров. Игра F.E.A.R — видный пример этой техники. Она использует наложение параллакса с, возможно, двумя или тремя уровнями, и результат точно настроен и выглядит очень хорошо.

Подход с поэтапным наложением параллакса более сложен и обычно требует 20 и более шагов по высоте, прежде чем результат не будет выглядеть по-настоящему хорошо. Преимущество в том, что вы также вычисляете самозатенение (рис. 7.22), что выглядит действительно невероятно, если учесть, что все происходит в пиксельном шейдере и здесь нет никакой настоящей трехмерной геометрии — все сплошная имитация.


Рис. 7.22

Рис. 7.22


Главная проблема этой техники — ее высокая стоимость. Вы не только тратите больше времени на реализацию техники и попытки обеспечить правильную работу, но и, что более важно, она обойдется вам в безумное количество мощности блока пиксельных шейдеров при выполнении. Шейдер будет примерно в 20 раз медленнее, чем обычный шейдер наложения параллакса, и хотя в демонстрациях можно создавать действительно шикарно выглядящие сцены с несколькими полигонами, для реальной игры надо нечто большее, чем один крутой эффект. Возможно, это вариант на будущее для усовершенствования существующих игр или способ сделать игровую графику выглядящей еще лучше при работе на высокопроизводительном графическом оборудовании.

Шейдер стекла

Имитация стекла не так проста, по крайней мере, если вы пытаетесь сделать ее правильно. При работе со стеклом главную проблему создают две вещи: стекло отражает вашу сторону сцены и преломляет мир за стеклом. Отражение означает, что свет, падающий на стекло со стороны зрителя отражается, как от зеркала, и зритель видит его, в том числе и себя, если зритель находится перед стеклом и условия освещения соответствующие. Преломление означает, что мир за стеклом (например, если вы смотрите на улицу через окно) немного искажается, в зависимости от толщины стекла, его рельефа и даже цвета стекла. Это особенно справедливо, если поверхность стекла рельефная (как у стекол в окнах ванной).

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

Поскольку у вас нет целой жизни, чтобы досконально разобраться во всем, и вы только хотите, чтобы все работало, обычно то, что не является действительно важным, отбрасывается и при этом все еще остается замечательно выглядящий эффект (рис. 7.23). Вы найдете больше информации о машинах и шейдерах в последней части этой книги.


Рис. 7.23

Рис. 7.23


Отражение и вода

Для стекла вам может хватить реализации простого шейдера отражения, который отражает в стекле небесный куб (подробнее о небе мы поговорим в следующей главе). Для более блестящих металлических поверхностей или зеркал простого отражения неба может оказаться недостаточно. Вы можете подумать об отражении мира вокруг конкретного объекта для более реалистичного эффекта. Это ни легко ни просто, поскольку для полного отражения окружения простого трехмерного объекта вы должны визуализировать кубическую карту отражений, показывающую мир в каждом направлении от отражающего материала. В Direct3D 10 это можно визуализировать за один шаг, но вам все равно потребуется быстрая видеокарта для подобных динамических изменений материалов в вашем движке. В DirectX 9 или XNA это, скорее всего, в большинстве случаев будет работать очень медленно, поскольку вам надо визуализировать сцену шесть раз для каждой грани куба и это только для кубической карты отражений одного материала.

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


Рис. 7.24

Рис. 7.24



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz