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

Упражнение: пишем шейдер обнаружения граней

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

Все, что вам надо, — создать простой фильтр обнаружения граней. Основная идея здесь — брать отдельные пиксели из оригинальной карты сцены и сравнивать их с соседними пикселями. В шейдерной модели 1.1 вы можете использовать только четыре входных текстуры, а в шейдерной модели 2.0 только восемь, следовательно вы ограничены в том, сколько пикселей можно использовать в пиксельном шейдере. Выполнять сравнение не так уж и просто, и это не слишком подходит для пиксельных шейдеров 1.1. Вместо этого просто возьмите центральную точку, умножьте ее на 2, и затем вычтите две соседние точки (верхнюю и нижнюю, и левую и правую). Затем получите значение градации серого с помощью функции Luminance и в результате вы получите ваши края.

Ниже приведен базовый код пиксельного шейдера; если вы работаете с шейдерной моделью 2.0, то можете делать больше выборок текстуры. Если вы не уверены в том, как расширить этот шейдер, посмотрите на шейдер обнаружения граней в Nvidia FX Composer. Тем не менее, вы должны попытаться создать законченный шейдер в FX Composer, а затем разработать класс C#, чтобы импортировать его в ваш движок. Переменные col1, col2, col3 и col4 — это четыре цвета из карты сцены, взятые из четырех координат текстур, передаваемых вами в пиксельный шейдер.

return Luminance(
  // Горизонталь
  (col1*2.0f-col2-col3)+
  // Вертикаль
  (col2*2.0f-col1-col4));

Если вы сумеете заставить ваш шейдер работать, то должны увидеть нечто, похожее на рис. 8.24.


Рис. 8.24

Рис. 8.24



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

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