Знакомство с вершинными шейдерами

Ответы@vecachamro.tk: Шейдеры. Что такое шейдеры в играх? Это трава?

знакомство с вершинными шейдерами

Такданные избуферного объекта передаются в вершинный шейдер В этом после знакомства сосновными приемами передачи вершинному шейдеру . А они вопше сильно влияют на качество картинки?. ехtensions for Visual Studiо „NЕТ— средство отладки для вершинных и пиксельных шейдеров. Первое знакомство спрофайлером РIXforИVindоvs

Рассмотрим результаты второго теста текстурных выборок из вершинных шейдеров. Сложность геометрии изменяется аналогично предыдущему тесту. Скоростные показатели всех GeForce в этом тесте ниже производительности решений конкурента, и все же новая модель GeForce GTX показывает скорость на уровне нынешнего топового решения конкурента Radeon R9 Fury X. Впрочем, R9 X оказался быстрее их обоих. Рассмотрим второй вариант этой же задачи: С усложнением задачи во втором тесте текстурных выборок скорость всех решений стала ниже, и видеокарты Nvidia пострадали несколько.

А уж ее предшественница GTX так и вовсе отстала в полтора раза. Если сравнивать с Radeon R9 Fury X, то оба решения близки друг к другу в двух подтестах из трех. Зато самая старая из видеокарт Radeon снова впереди планеты. Feature тесты из этого тестового пакета обладают поддержкой DirectX 10, до сих пор актуальны и интересны тем, что отличаются от наших. При анализе результатов новейшей видеокарты GeForce GTX в этом пакете мы сделаем какие-то новые и полезные выводы, ускользнувшие от нас в тестах из пакетов семейства RightMark.

Texture Fill Первый тест измеряет производительность блоков текстурных выборок. Используется заполнение прямоугольника значениями, считываемыми из маленькой текстуры с использованием многочисленных текстурных координат, которые изменяются каждый кадр. Эффективность видеокарт AMD и Nvidia в текстурном тесте компании Futuremark достаточно высока и итоговые цифры разных моделей близки к соответствующим теоретическим параметрам.

Разница в скорости между GeForce GTX Ti и GTX оказалась почти полуторакратной в пользу свежего решения на базе чипа архитектуры Pascal, и это явно больше теоретической разницы — вероятно, сказываются какие-то оптимизации. А уж GTX и вовсе отстала почти вдвое, хотя по теории разница в скорости текстурирования не превышает полутора. Что касается сравнения скорости текстурирования новой топовой видеоплаты от Nvidia с имеющимися на рынке решениями конкурента, то новинка все же уступает видеокарте верхнего ценового диапазона R9 Fury X, имеющей очень много блоков TMU, а вот R9 X отстал от них обеих.

Результаты этого теста показывают, что видеокарты компании AMD с текстурированием справляются весьма неплохо, но с выпуском GTX конкурент подобрался к лучшей из них совсем близко. Color Fill Вторая задача — тест скорости заполнения.

В нем используется очень простой пиксельный шейдер, не ограничивающий производительность. Интерполированное значение цвета записывается во внеэкранный буфер render target с использованием альфа-блендинга. Используется битный внеэкранный буфер формата FP16, наиболее часто используемый в играх, применяющих HDR-рендеринг, поэтому такой тест является вполне своевременным.

Цифры из второго подтеста 3DMark Vantage показывают производительность блоков ROP, без учета величины пропускной способности видеопамяти. Рассматриваемая нами сегодня плата GeForce GTX заметно опередила все остальные видеокарты сравнения.

Лучшая из остальных плат Nvidia отстала не так уж сильно, примерно на треть, а прямая предшественница и вовсе более чем в полтора раза медленнее новинки. Это также лучше теоретических показателей для GP, так что на тест явно влияет и эффективность работы блоков ROP.

Если сравнивать скорость заполнения сцены новой видеокартой GeForce GTX с решениями компании AMD, то рассматриваемая нами сегодня плата в этом тесте показывает втрое! Сказалось достаточно большое количество блоков ROP и эффективные оптимизации по сжатию данных в буфере кадра. Parallax Occlusion Mapping Один из самых интересных feature-тестов, так как подобная техника давно используется в играх.

В нем рисуется один четырехугольник точнее, два треугольника с применением специальной техники Parallax Occlusion Mapping, имитирующей сложную геометрию.

Используются довольно ресурсоемкие операции по трассировке лучей и карта глубины большого разрешения. Также эта поверхность затеняется при помощи тяжелого алгоритма Strauss. Это тест очень сложного и тяжелого для видеочипа пиксельного шейдера, содержащего многочисленные текстурные выборки при трассировке лучей, динамические ветвления и сложные расчеты освещения по Strauss.

Этот тест из пакета 3DMark Vantage отличается от проведенных нами ранее тем, что результаты в нем зависят не исключительно от скорости математических вычислений, эффективности исполнения ветвлений или скорости текстурных выборок, а от нескольких параметров одновременно. Для достижения высокой скорости в этой задаче важен верный баланс GPU, а также эффективность выполнения сложных шейдеров.

GPU Cloth Четвертый тест интересен тем, что рассчитывает физические взаимодействия имитация ткани при помощи видеочипа. Используется вершинная симуляция, при помощи комбинированной работы вершинного и геометрического шейдеров, с несколькими проходами.

Используется stream out для переноса вершин из одного прохода симуляции к другому. Таким образом, тестируется производительность исполнения вершинных и геометрических шейдеров и скорость stream out.

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

То есть, сильные стороны чипов Nvidia должны проявляться, но увы — мы снова отмечаем странные результаты. В этом тесте очередная новая видеокарта Nvidia показала низкую скорость, даже немного уступив в нем своей прямой предшественнице GTX Впрочем, GTX Ti ведет себя в этом тесте еще хуже Неудивительно, что в таких условиях сравнение с платами Radeon в этом тесте для новинки не самое радостное.

Несмотря на теоретически меньшее количество геометрических исполнительных блоков и отставание по геометрической производительности у чипов AMD, по сравнению с конкурирующими решениями, платы Radeon в этом тесте работают весьма и весьма эффективно, обгоняя все видеокарты GeForce, представленные в сравнении. GPU Particles Тест физической симуляции эффектов на базе систем частиц, рассчитываемых при помощи видеочипа. Также используется вершинная симуляция, каждая вершина представляет одиночную частицу.

Stream out используется с той же целью, что и в предыдущем тесте. Рассчитывается несколько сотен тысяч частиц, все анимируются отдельно, также рассчитываются их столкновения с картой высот. Аналогично одному из тестов нашего RightMark3D 2.

Но тест больше всего загружает шейдерные блоки вершинными расчетами, также тестируется stream out. В этот раз новая GeForce уже показывает максимальные результаты, обогнав как платы соперника, так и решения архитектуры Maxwell.

Сравнение новинки от Nvidia с конкурирующими видеокартами компании AMD в этот раз довольно позитивное — первая плата семейства Pascal показала результат лучше, чем у обеих одночиповых видеокарт компании-соперника. Удивительно, как получилась такая большая разница в двух вроде бы похожих тестах. Perlin Noise Последний feature-тест пакета Vantage является математически-интенсивным тестом для GPU, он рассчитывает несколько октав алгоритма Perlin noise в пиксельном шейдере.

Каждый цветовой канал использует собственную функцию шума для большей нагрузки на видеочип. Perlin noise — это стандартный алгоритм, часто применяемый в процедурном текстурировании, он использует много математических вычислений. Наконец-то мы увидели математический тест, в котором производительность решений хоть и не полностью соответствует теории, но очень близка к тому, что должна быть, исходя из пиковых показателей. В математическом тесте из пакета компании Futuremark, показывающем пиковую производительность видеочипов в предельных задачах, мы видим распределение результатов, сильно отличающееся по сравнению со схожими тестами из нашего тестового пакета.

И это можно назвать отличным результатом, учитывая сложность этих GPU, у Nvidia наконец-то получилось столь производительное решение с точки зрения вычислений. Понятно, что если сравнивать новинку с предыдущими моделями компании из семейства GeForce GTXто в этом тесте разница просто огромна.

Это очень хорошие показатели, предвещающие сильные выступления GeForce GTX в игровых приложениях. Вычислительные шейдеры Чтобы протестировать выпущенное сегодня решение компании Nvidia в задачах, использующих такие возможности DirectX 11, как тесселяция и вычислительные шейдеры, мы хотели воспользоваться примерами из пакетов для разработчиков SDK и демонстрационными программами компаний Microsoft, Nvidia и AMD.

Увы, но многие из привычных для нас тестов, использующие вычислительные шейдеры и тесселяцию, на тестовой системе с DirectX 12 под управлением операционной системы Windows 10 работают некорректно.

знакомство с вершинными шейдерами

Времени на исправление ошибок у нас не было, так что в этот раз придется довольствоваться одним тестом вычислительных шейдеров и одним — тесселяции. Тест вычислительных шейдеров был взят из Microsoft DirectX SDK, в нем показана расчетная задача гравитации N тел N-body — симуляция динамической системы частиц, на которую воздействуют такие физические силы, как гравитация.

В этом вычислительном тесте чаще всего отмечается упор в скорость исполнения сложных математических вычислений, обработки геометрии и эффективность выполнения кода с ветвлениями. И, как вы можете видеть, в данном DXтесте расклад сил между графическими процессорами двух разных компаний получился совершенно иной, по сравнению с любым другим тестом из предыдущих — в этот раз он явно в пользу видеоплат GeForce.

Эта задача весьма эффективно выполняется на графических процессорах архитектуры Maxwell, как мы отмечали в ранних материалах, но на первом же GPU семейства Pascal она получила еще большую производительность.

Впрочем, последняя недалеко ушла по скорости от GTX В любом случае, за столь сильные результаты новинку можно лишь похвалить. Производительность тесселяции Вычислительные шейдеры очень важны, но еще одним важным нововведением в Direct3D 11 считается аппаратная тесселяция. Мы очень подробно рассматривали ее в своей теоретической статье про Nvidia GF В некоторых из них тесселяция используется для моделей персонажей, в других — для имитации реалистичной водной поверхности или ландшафта.

Существует несколько различных схем разбиения графических примитивов тесселяции. Например, phong tessellation, PN triangles, Catmull-Clark subdivision. Зов Припяти, а в Metro — Phong tessellation. Эти методы сравнительно быстро и просто внедряются в процесс разработки игр и существующие движки, поэтому и стали популярными. Увы, но единственным тестом тесселяции из трех, который запустился на новой тестовой системе, стала демонстрационная программа Nvidia Realistic Water Terrain, также известная как Island.

В этой демке используется тесселяция и карты смещения displacement mapping для рендеринга реалистично выглядящей поверхности океана и ландшафта. Тест Island интересен тем, что он не является чисто синтетическим тестом для измерения исключительно геометрической производительности GPU, он содержит и сложные пиксельные и вычислительные шейдеры в том числе, и такая нагрузка ближе к реальным играм, в которых используются все блоки GPU, а не только геометрические. Хотя основной все равно остается именно нагрузка на блоки обработки геометрии, но на результат в этом тесте влияет и та же ПСП и способность эффективно выполнять шейдеры различных типов.

Мы тестируем все видеоплаты при четырех разных коэффициентах тесселяции — в данном случае настройка называется Dynamic Tessellation LOD. При первом коэффициенте разбиения треугольников, скорость не ограничена производительностью геометрических блоков, поэтому топовая видеокарта Radeon показывает довольно высокий результат, близкий к показателям GeForce GTX Ti.

Но уже на следующих ступенях геометрической нагрузки производительность платы Radeon снижается, и все решения Nvidia выходят. Это необходимо для OpenGL, так как всё существует в трехмерном пространстве. Если мы хотим что-то нарисовать, то мы сначала должны создать поверхность, где мы будем рисовать.

Вот так выглядит стандартный вершинный шейдер на GPUImage: Для каждой вершины передаются свои атрибуты — положение в пространстве, текстурные координаты как текстура будет отображаться на фигуруцвет, нормаль и.

Varying-переменные представляют собой связь между вершинным и фрагментым шейдерами. Переменные данного типа объявляются и инициализируются в вершинном шейдере и затем передаются во фрагментный. Но, так как фрагментный шейдер оперирует точками на всей фигуре — то данные значения линейно интерполируются. Например, если вершины левой половины фигуры имеют белый цвет, а правой — черный, то цвет фигуры будет представлять градиент от белого к черному.

Uniforms — переменные необходимы для связи шейдера с внешним миром самой программой. Они одинаковые для всех вершин и фрагментов. В GPUImage мы передаем два набора координат — это координаты самой плоскости и текстурные координаты. Как правило, заботиться об этом нам не придется, поэтому не будем углубляться в подробности. Мы не будем включать вершинный шейдер в наш разрабатываемый фильтр, а будем использовать стандартный шейдер из класса GPUImageFilter.

Вы можете оставить или убрать галочку со storyboards и ARC. Затем нам следует добавить некоторые фреймворки и библиотеки, показанные на скриншоте: Теперь всё готово и мы можем приступать к написанию собственного фильтра! Мы собираемся создать шейдер polar pixellate и расширить его, добавив скручивание и возможность постеризации уменьшение количества отображаемых цветов на экране.

Фильтр Polar Pixellate Posterize Наш фильтр будет использовать полярную систему координат для пикселизации входящего изображения. Переменная centerUniform — это точка, откуда берет начало полярная система координат — по умолчанию это 0.

Система координат в OpenGL колеблется от 0. И хотя GPUImageFilter берет на себя ответственность за настройку OpenGL и создания необходимых фреймбуферов, нам все же необходимо написать сам шейдер и передать в него необходимые uniform-переменные. Наш первый шейдер Добавьте следующий код перед строкой implementation: Несколько слов о типах данных и операциях в GLSL.

знакомство с вершинными шейдерами

Основные используемые типы данных это int, float, vector vec2, vec3, vec4 и матрицы mat2, mat3, mat4. Кроме того, разрешены операции по умножению вектора на число int или floatк примеру: Еще можно использовать обращение: Полный список поддерживаемых типов можно найти.

Давайте разберемся, что же здесь происходит. Varying textureCoordinate типа vec2 поступает к нам из вершинного шейдера по умолчанию.

Ответы@vecachamro.tk: Что такое вершинные и пиксельные шейдеры?

Uniform — переменные center и pixelSize — являются переменными, которые мы передаем из нашего класса-фильтра. И, наконец, у нас есть переменная inputImageTexture типа sampler2D.

Эта uniform — переменная устанавливается у суперкласса, GPUImageFilter, и представляет собой двухмерную текстуру изображения, которое мы хотим обработать. Возможно, вы обратили внимание, что мы все время используем классификатор highp. Это делается для того чтобы сказать GLSL об уровне точности наших типов данных. Как вы можете предположить, чем выше точность, тем больше будет точность у наших типов данных.

Но это не всегда является актуальным — для простого рендера на экран сгодится и меньшая точность, что позволит производить вычисления немного быстрее. Классификаторы точности бывают lowp, mediump, highp.

Глава 17. Знакомство с вершинными шейдерами

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

знакомство с вершинными шейдерами

Данный цвет в нашем случае берется из исходного изображения по координатам normCoord.