
- •Содержание
- •Очистка буферов графического устройства
- •Избирательная очистка буферов
- •Устранение скрытых дефектов приложения
- •Общие сведения о примитивах
- •Введение в hlsl
- •Типы данных hlsl
- •Функции и семантики hlsl
- •Техники, проходы и профили hlsl
- •IncludeHandler – объект, используемый для обработки директив #include в fx-файле. Так как наш файл не содержит директив #include, мы будем использовать значение null
- •Визуализация объекта, использующего эффект
- •Запускающее приложение
Введение в hlsl
Для программирования вершинных и пиксельных процессоров GPU служит язык HLSL (High Level Shader Language - язык высокого уровня для программирования шейдеров). Его разработала Microsoft в 2002 году. Программа для вершинного процессора называется вершинным шейдером ( VS ), а для пиксельного процессора - пиксельным шейдером ( PS ) . Классы библиотеки XNA Framework при работе с шейдерами на платформе Windows в значительной степени опирается на функциональность DirectX.
Язык HLSL хотя и тесно связан с архитектурой графического процессора, но является управляемым C -подобным языком программирования для некоторого виртуального процессора, приближенного к некоторому реальному прототипу. Такой подход напоминает применение промежуточного языкаIL в .NET. Компиляция шейдера в систему команд физического процессора происходит непосредственно перед загрузкой шейдера в GPU. Это позволяет несколько абстрагироваться от аппаратной части процессора, генерируя при компиляции промежуточный байт-код, и таким образом расширить семейство видеокарт, на которых может работать графическое приложение.
На первой ступени вершины обрабатываются вершинным процессором по программе, называемой вершинным шейдером. На выходе из вершинного процессора получаются так называемые трансформированные (преобразованные) вершины. К вершинам могут быть "привязаны" различные параметры: цвет вершины, текстурные координаты и так далее. Координаты трансформированных вершин задаются в логической системе однородных координат, называемой clip space.
Однородные координаты вершины определяются четырьмя числами: (x, y, z, w). Перевод однородных координат в обычные геометрические осуществляется путем деления первых трех компонентов на четвертый компонент w: (x/w, y/w, z/w). Например, вершине с однородными координатами (1, 2, 3, 4) в трехмерном пространстве соответствует точка с координатами (1/4, 2/4, 3/4). Использование четвертого компонента обусловлено рядом особенностей алгоритмов визуализации трехмерных изображений, используемых в 3D -графике.
При визуализации двухмерных изображений компонент w обычно полагают равным 1. В этом случае нижнему левому углу клиентской области формы соответствует точка с координатами (-1, -1, 0, 1), правому верхнему углу клиентской области - (1, 1, 0, 1), а центру клиентской области - соответственно (0, 0, 0, 1).
На второй ступени графического конвейера видеокарта производит преобразование координат вершины из логической системы координат в оконную. По умолчанию координаты трансформируются таким образом, чтобы растянуть изображение на всю поверхность элемента управления. Managed DirectX через код XNA позволяет программисту задавать координаты вершин в оконных координатах. В этом случае, при вызове методаdevice.DrawUserPrimitives() вершины сразу поступают на третью стадию графического конвейера, минуя первую и вторую стадии.
На третьей ступени идет сборка примитивов. На этой стадии вершины объединяются в примитивы. Тип примитивов определяется первым параметром метода device.DrawUserPrimitives(). Так при использовании параметра PrimitiveType.TriangleStrip вершины трактуются, как опорные точки полосы треугольников. При этом каждый треугольник из полосы является независимым примитивов и обрабатывается независимо от других треугольников этой полосы.
На четвертой ступени происходит растеризация примитивов – преобразование каждого примитива в набор пикселей экрана. Параметры внутренних пикселей примитива (например, цвет) определяются путем интерполяции соответствующих параметров вершин вдоль поверхности примитива. Благодаря этой интерполяции при закраске треугольника с разноцветными вершинами образуются красивые цветовые переходы - градиенты цвета.
На пятой ступени происходит обработка пикселей пиксельным процессором с использованием программы, называемой пиксельным шейдером. На вход пиксельному процессору подаются параметры пикселя (цвет, текстурные координаты и т.д.), полученные путем интерполяции соответствующих вершинных параметров вдоль поверхности примитива. После обработки входных параметров, пиксельный процессор возвращает цвет пиксела, который заносится в кадровый буфер. При этом возможно выполнение некоторой простой дополнительной обработки изображения вроде смешивания цветов при эффекте полупрозрачности.
Самой крупной логической единицей HLSL является эффект ( Effect ), хранящийся в отдельном текстовом файле с расширением .fx. В принципе, эффект можно считать аналогом материала в 3DS MAX. Каждый эффект состоит из одной или нескольких техник ( technique ). Техника – это способ визуализации материала. Например, эффект визуализации мраморного материала может содержать три техники: технику High для получения изображения наивысшего качества при низкой производительности, Medium для получения изображения среднего качества, и Low – максимальная производительность при низком качестве изображения.
Каждой технике сопоставлен пиксельный и вершинный шейдер, при этом несколько техник могут использовать общий шейдер. Количество техник и их названия могут быть произвольными.
Известным инструментом для разработки шейдеров является RenderMonkey компании AMD. Этот продукт можно скачать по адресу (http://developer.amd.com/gpu/rendermonkey/Pages/default.aspx).