Урок 9. Шейдеры в Direct3D11
В этом уроке вы узнаете: какая архитектура шейдеров; какую роль выполняют шейдеры в DirectX приложении; что такое язык HLSL и для чего он предназначен, ознакомитесь со базовыми принципами программирования HLSL. Шейдеры Из предыдущих уроков вы уже знакомы с шейдерами и применяли их практически. В данном уроке мы не будем использовать их как дополнение к приложению, а взглянем на сами шейдеры и на их код. Сейчас шейдеры являются ключевым аспектом DirectX приложения. Фактически, трудно что-нибудь сделать без их использования. Вся графика игр, многочисленные спецэффекты, и тот реализм, который на сегодняшний день достигла графическая часть игр – это всё получилось благодаря использованию шейдеров. Взглянем лишь на некоторые примеры использования шейдеров:
На самом деле, данный список можно продолжать, кажется бесконечно. Существует слишком много примеров применения шейдеров, чтобы даже их просто перечислить. Запустите любую новую игру и существующий список применения шейдеров может быть пополнен несколькими, а то и десятками новых применений шейдеров. Особенности компиляции и загрузки шейдера Хотя шейдер является очень низкоуровневой структурой – он должен выполняться очень быстро, но вы можете его писать на языке, подобном C++, этот язык называется HLSL. Это потому, что шейдер на ходу компилируется в машинный код видеоускорителя. Кроме того, не нужен специальный компилятор. Язык HLSL является стандартным и его компиляция осуществляется на ходу любой 3d системой, например DirectX или OpenGL. Таким образом, вы просто указываете на исходный файл формата .fx и он автоматически загружается, компилируется и выполняется непосредственно в вашем 3d приложении. Язык HLSL Взглянем на пример шейдера с точки зрения программирования. Посмотрим на типичный код шейдера:
Вы видите, что весь код шейдера может быть разбит на три ключевых раздела. Это: объявления глобальных переменных – констант шейдера представленных в виде константного буфера, код вершинного шейдера, и наконец, код пиксельного шейдера. В дальнейших разделах мы поэтапно рассмотрим структуру языка HLSL. Типы данных HLSL В каждом языке существуют различные встроенные типы данных. В языке HLSL типы данных носят некоторый математический оттенок, то есть в нем много типов данных наподобие векторов и матриц. Итак, таблица типов данных HLSL:
Рассмотрим эти типы данных. Тип данных Scalar определяет скалярную величину и может быть одним из следующих:
Тип данных Vector и Matrix обозначается добавлением количества компонент к типу данных scalar. Например, Float4 определяет четырехкомпонентный вектор. Для матрицы, например Float4x4 добавляется NxN, то есть указывается размеренность матрицы. Пример определения вектора и матрицы:
Типы Sampler используется для описания типа фильтрации текстуры. Тип Texture для указания на используемую текстуру. Примеры определений для этих типов данных, тип данных Sampler и Texture:
ТипданныхTexture:
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|