Так как рисунок привязывается к координатам объекта х и у в модельном пространстве, изображение может выглядеть нереалистичным на сложных объектах (см. рис. 6.4). Используя только х- и //-координаты объекта, будет сложно работать, например, с бесконечно глубокими объектами. Кирпичный рисунок выглядит хорошо на передней грани объектов, но на боковых гранях глубина кирпичиков выглядит несоразмерно большой. Для того чтобы шейдер был по-иастоящему трехмерным, в процедуру вычисления нужно добавить третье измерение и использовать 2-компоненту координат в модельном пространстве, чтобы определить цвет точки в измерении z.

Если рассмотреть рисунок при увеличении, можно увидеть неровности вдоль границы между кирпичом и промежутком. Они появляются из-за резкого изменения значения функции step (с 0 до 1,0) при переходе от кирпичика к промежутку. Созданный нами шейдер может выбирать для каждого фрагмента лишь один из двух цветов, и неровности появляются из-за того, что частота семплинга слишком низкая. Чтобы избежать этого, вместо функции step можно использовать встроенную функцию smoothstep. Она похожа на step, за исключением того, что переход от 0 к 1,0 у нее плавный. Это дает эффект размывания границ между кирпичом и промежутком, отчего деформированный край становится не таким заметным. Метод аналитического сглаживания описан в разделе 14.4.5.

Несмотря на отмеченные недостатки, описанные шейдеры - хороший пример работы Open GL-шейдеров, иллюстрирующий некоторые интересные особенности языка шейдеров OpenGL.

6.5. Итоги

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

6.6. Ссылки

Шейдер кирпичной стенки, приведенный в данной главе, очень похож на один из шейдеров на языке RenderMan, написанный Дарвином Пичи (Darwyn Peachey) в 2002 г. и представленный в книге [2]. Этот и другие шейдеры можно найти на веб сайте компании 3Dlabs, предназначенном для разработчиков. Код OpenGL-щейдеров также доступен.

1. 3Dlabs. Веб-сайт для разработчиков (http://www.3dLabs.com/support/deveLoper).

2. Texturing and Modeling: A Procedural Approach. 3rd ed./D. S. Ebert, J. Hart, B. Mark, at al. San Francisco: Morgan Kaufmann Publishers, 2002 ( http://www.tex-turingandmodeling.com).

3. Kessenich J., Baldwin D., Rost R. The OpenGL Shading Language, Version 1.051 ./BDlabs. 2003 (http://www.3dlabs.com/support/developer/ogL2).


⇐ вернуться назад | | далее ⇒