Страница 1 из 11
Форум » Мастерская » Разработка аддонов и карт » Материалы и текстуры » Понятие Shader
Понятие Shader
Среда, 22.03.2017, 11:25
1
Пользователь
Прежде чем разбираться с материалами необходимо понять вообще что в них описывается и о чем идет речь. Лично для меня они в свое время были непонятны, поэтому начну разбираться с азов и рассказывать вам.

Начнем с понятия Shader. В файле Rvmat описывается два типа Shader-ов:
Pixel shaders: - пиксельные шедеры  и  Vertex shaders: вертексные шедеры - попробую объяснить что это за звери и с чем их едят 

Пиксельные шейдеры

Пиксельные шейдеры - это программы, выполняемые видеочипом во время растеризации для каждого пикселя изображения, они производят выборку из текстур и/или математические операции над цветом и значением глубины (Z-buffer) пикселей. Все инструкции пиксельного шейдера выполняются попиксельно, после того, как операции с трансформированием и освещением геометрии завершены. Пиксельный шейдер в итоге своей работы выдает конечное значение цвета пикселя и Z-значение для последующего этапа графического конвейера, блендинга. Наиболее простой пример пиксельного шейдера, который можно привести: банальное мультитекстурирование, просто смешение двух текстур (diffuse и lightmap, например) и наложение результата вычисления на пиксель.

Вертексные шейдеры

Вершинные шейдеры - это программы, выполняемые видеочипами, которые производят математические операции с вершинами (vertex, из них состоят 3D объекты в играх), иначе говоря, они предоставляют возможность выполнять программируемые алгоритмы по изменению параметров вершин и их освещению (T&L - Transform & Lighting).
Каждая вершина определяется несколькими переменными, например, положение вершины в 3D пространстве определяется координатами: x, y и z. Вершины также могут быть описаны характеристиками цвета, текстурными координатами и т.п. Вершинные шейдеры, в зависимости от алгоритмов, изменяют эти данные в процессе своей работы, например, вычисляя и записывая новые координаты и/или цвет. То есть, входные данные вершинного шейдера - данные об одной вершине геометрической модели, которая в данный момент обрабатывается. Обычно это координаты в пространстве, нормаль, компоненты цвета и текстурные координаты.
Результирующие данные выполняемой программы служат входными для дальнейшей части конвейера, растеризатор делает линейную интерполяцию входных данных для поверхности треугольника и для каждого пикселя исполняет соответствующий пиксельный шейдер. Очень простой и грубый (но наглядный, надеюсь) пример: вершинный шейдер позволяет взять 3D объект сферы и вершинным шейдером сделать из него зеленый куб smile

Примеры где можно применять такие шейдеры:
Скининг (skinning). Matrix pallete skinning для скелетной анимации персонажей с большим количеством "костей.
Деформация объектов. Как самый явный и эффектный пример - создание реалистичных волн в динамике.
Анимация объектов. Например, травы и деревьев в одном из первых применений.
Toon shading/Cel shading. Используется в некоторых играх для создания специального эффекта "мультяшного" изображения.
Имитация ткани (Cloth Simulation) - для имитации поведения подобных ткани материалов.

Если резюмировать вышесказанное пиксельные шейдеры в большей степени отвечают за текстуру модели, а вертексные то, как будет выглядеть анимация и деформация модели, теней и тд.

Арма 3 предлагает возможность использовать в материалах следующие шейдеры:

Пиксельные:


Вертексные:



Каждый конкретный тип материала использует фиксированную комбинацию вершинного и пиксельного шейдеров с фиксированными номерами стадий и типом текстуры. Знания об этом можно получить только опытным путем, поэтому самая правильная рекомендации пользоваться темплейтами либо изучать .rvmat материалы на примерах доступных моделей BIS.

В файле rvmat шейдеры определяются в разделах
Код
PixelShaderID = ".....";
VertexShaderID = ".....";

Каждый из шейдеров использует специфический класс-этап Stage
Код
class StageX

Каждый из "этапов" определяет параметры для расчета шейдера, обычно в виде ссылок на битовые карты эффектов.
Код
texture = ...; // (имя и путь к эффекту bitmap текстуры).Filter = “Anisotropic”;//по умолчанию используется анизотропный фильтр (Anisotropic), но он может быть также Point,Linear,Trilinear
Код
uvSource = “tex”; // данный параметр может быть - none, tex, tex1 (second UV set)
Код
class uvTransform; // данный параметр определяет Смещение, деформацию или повторение текстуры в // заданном UV-наборе.
Прикрепления: 8974090.png(38Kb) · 9415924.png(29Kb)

 
Форум » Мастерская » Разработка аддонов и карт » Материалы и текстуры » Понятие Shader
Страница 1 из 11
Поиск:


Правила чата
Мини-чат
+Мини-чат
0