Пример карты нормали и результаты ее применения на простом блоке показаны на цветном рис. 19. Отдельные компоненты нормалей могут располагаться в диапазоне [-1,1 ]. Карта нормали изображена синим цветом, так как вектор изменений по умолчанию (0, 0, 1) занесен в карту нормали как (0,5, 0,5, 1,0). Поддержка текстур со значениями с плавающей запятой, с 16 битами на каждый компонент появляется все в большем количестве графических акселераторов, но еще не считается используемой повсеместно, Если для хранения нормали выбран формат
Процедурные текстурные шейдеры
текстуры с плавающей запятой, это улучшает качество изображения (например, снижает «полосатость» при отражении освещения). Но при этом производительность может пострадать, так как здесь используется 16 бит на компонент вместо 8.
Вершинный шейдер будет таким же, как описанный в разделе 11.4.2. Фрагаен-тный шейдер - почти таким же, как описанный ранее, за исключением того, что изменяющая нормаль не вычисляется, а считывается из карты нормали, находящейся в текстурной памяти.
11.5. Итоги Искусный фокусник может создать иллюзию того, как из простого воздуха получается нечто. С помощью процедурных текстур вы как создатель шейдера можете превращать простые серые поверхности в цветные, узорчатые, бугристые или зеркальные. Все, что для этого нужно, - лишь придумать алгоритм, описывающий свойства воображаемой текстуры. Закодировав этот алгоритм как OpenGL-шей-дер, вы тоже можете создать нечто из воздуха.
В этой главе мы лишь коснулись того, что можно сделать с помощью процедурных текстур. Нами разработан шейдер полосок, и теперь создание разного рода сеток, шахматных досок и узоров «в горошек» не должно представлять для вас никаких трудностей. Мы нарисовали игрушечный мячик со звездой, но это мог быть и пляжный мяч со снежинками. С помощью шейдеров можно добавлять или скрывать части объектов, а также создавать холмы или выемки. В следующей главе будет показано, как с помощью нерегулярных функций (шума) и процедурных текстур можно получать различные эффекты. Шейдеры, генерирующие текстуры по сложным математическим функциям (множества Мандельброта и Джулии), а также создающие не фотореалистичные эффекты, также будут описаны далее в этой книге.