Тема № 2 - Использование шейдеров и создание на их основе пост эффектов.
Я думаю, что бессмысленно рассказывать о пользе и мощности такого инструмента, как шейдеры. Quad Engine, несмотря на то, что это инструмент для 2d графики, изначально разработан для простого использования шейдеров. Что никак не ограничивает сложность самих шейдеров и возможностей по их использованию.
В данном уроке мы рассмотрим самый простой вариант шейдеров - постэффекты. Их много и они разные, но объединяет их способ получения - все изображение рисуется в одну или несколько полноэкранных текстур, а на них при помощи информации о цвете и дополнительных параметров (масок, информации о глубине, дополнительных текстур и т.д.) накладывается определенный эффект, изменяющий картинку.
Соответственно для того, чтобы воспользоваться шейдером в движке, нужно написать и скомпилировать сам шейдер, подключить его к движку и задать необходимые параметры.
Написание шейдеров выходит за рамки данной статьи, и предполагается, что читатель с этим знаком. Совместно с движком разрабатывается и QuadShade - инструмент для создания и
компиляции DX шейдеров. Для удобства можно использовать шаблон шейдера, идущий вместе с QuadShade.
Тут стоит отметить особенности - Quad Engine по умолчанию может передавать в шейдер несколько дополнительных параметров, которые можно использовать для более сложных сцен.
Собственно к делу.
Подключить шейдер очень просто:
var
//регистрируем переменную для шейдера
Shader: IQuadShader;
...
//Создаем и загружаем шейдер в начале программы
QuadDevice.CreateShader(Shader);
Shader.LoadPixelShader(PAnsiChar('shaders/ps_blur.bin'));
...
//При отрисовке включаем шейдер
Quad.BeginRender;
Shader.SetShaderState(True);
// и рисуем сцену
Texture.Draw(0, 0);
Shader.SetShaderState(False);
Quad.EndRender;
Вот тут можно посмотреть примеры. Представлены очень простые шейдеры, и все параметры для них зашиты в код шейдера. Естественно в реальном проекте обычно так не делают - создаются параметры, которые управляют шейдером из кода основной программы. Об этом будет следующий урок.
В примерах использован код для предварительной отрисовки сцены в текстуру - для создания постэффекта.
Обычно полноэкранные эффекты требуют только пиксельный шейдер, но естествено можно подключить и вершинный шейдер или оба одновременно.
Это делается соответственно командами Shader.LoadPixelShader и Shader.LoadComplexShader.
Так же в примерах использованы очень простые шейдеры, не использующие дополнительных параметров.
Странно, скачал последнюю версию движка, начал с первого урока, вроде всё по мануалу сделал - делфа ругается, что не знает, что такое IQuadDevice. Если беру QuadEngine.pas из демок с шейдерами - вылетает Access violation на строчке QuadDevice.CreateRender(Quad);
ОтветитьУдалитьСтарые уроки уже не актуальны?
Извиняюсь за два сообщения подряд, а можно следующий урок про ввод с клавиатуры/мыши? Или у QuadEngine нет собственного функционала по инпуту?
ОтветитьУдалитьДень добрый. Относительно уроков, автор должен был указать что использовал версию 0.4, на сайте же только стабильная 0.3.
ОтветитьУдалитьК сожалению, а точнее к счастью, несколько поменялась архитектура движка, и да, появились новые интерфейсы.
Возможно тут на блогспоте не очень видно и красиво выделены ссылки, потому что каждый урок снабжен архивом, где есть и заголовочные файлы и dll.
Как раз таки эти уроки актуальнее всего. Дело в том, что всё, что я хотел реализовать в 0.4, я не успел в ней доделать. Поэтому она и не лежит на сайте, а лишь более старая 0.3. Обещаю исправить это недоразумение до нового года, честно-честно (отвёл взгляд в сторону и прикусил губу).
Касательно второго вопроса - нет, у Quad еще ничего такого нет. В этом отношении я решил идти по пути наименьшего сопротивления. Сначала графика, потом все остальное. Будет и клавиатура и мышь, и даже геймпад. Но позже, много позже.
Спасибо за проявленный интерес!