Что такое фрагмент в программировании трехмерной графики?

37

Что такое фрагмент во фрагментном шейдере? Википедия говорит, что:

В общем случае фрагмент можно рассматривать как данные, необходимые для затенения пикселя, плюс данные, необходимые для проверки того, сохранился ли фрагмент, чтобы стать пикселем (глубина, альфа, трафарет, ножницы, идентификатор окна и т. Д.)

Так это текстуры, вершины или что-то еще?

Альбус Дамблдор
источник

Ответы:

31

В компьютерной графике фрагмент - это данные, необходимые для генерации примитива рисования на один пиксель в буфере кадров.

Эти данные могут включать, но не ограничиваются:

  • растровая позиция
  • глубина
  • интерполированные атрибуты (цвет, координаты текстуры и т. д.)
  • трафарет
  • альфа
  • идентификатор окна

Когда сцена рисуется, примитивы рисования растеризуются в фрагменты, которые текстурируются и объединяются с существующим буфером кадра. То, как фрагмент объединяется с данными, уже находящимися в буфере кадра, зависит от различных настроек. В типичном случае фрагмент может быть отброшен, если он находится дальше, чем пиксель, который уже находится в этом месте (согласно буферу глубины). Если он ближе, чем существующий пиксель, он может заменить то, что уже есть, или, если используется альфа-смешение, цвет пикселя может быть заменен смесью цвета фрагмента и существующего цвета пикселя, как в случае рисование полупрозрачного объекта.

В общем случае фрагмент можно рассматривать как данные, необходимые для затенения пикселя, плюс данные, необходимые для проверки того, сохранился ли фрагмент, чтобы стать пикселем (глубина, альфа, трафарет, ножницы, идентификатор окна и т. Д.)

Из википедии

concept3d
источник
6

Фрагмент - это просто данные, полученные от вклада трех вершин вокруг пикселя, который вы заштрихуете.

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

XGouchet
источник
Пиксель и все остальные данные о невидимых буферах, как указано выше.
StarWeaver
4

Точно так же, как вершинный шейдер действует на вершины, фрагментный (или пиксельный) шейдер будет действовать только на пиксели.

Коммунистическая утка
источник
Извините, но это не правильно без упоминания слова «растаризация» и интерполяции.
Notabene
Еще хуже то говорит пикселей - которые отличаются от фрагментов, особенно когда мультисэмплинг AA Render Targets участвуют, охват в альфа, или любой из ряда других ситуаций , - я бы вниз голосования , если у меня была репутация
jheriko
4

Что такое фрагмент в фрагментном шейдере

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

Так как это было сделано / слишком широко, я сосредоточусь на интуитивной визуальной стороне этого.

Фрагмент растрового выхода

OpenGL вики говорит:

Фрагмент - это набор значений, созданных Rasterizer.

Это имеет смысл, так как фрагментный шейдер идет после растеризатора, который производит его ввод.

И это визуальное представление вывода растеризатора:

Источник изображения .

Вход растеризатора - это трехмерный треугольник и точка обзора, а выход - набор пикселей, которые могут появиться на экране (если они не заблокированы другими).

Каждый из этих маленьких квадратиков (которые закодированы как один плексел), является частью треугольника, а фрагмент - это просто другое название для части.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
Downvoters, пожалуйста, объясните, чтобы я мог изучать и улучшать контент ;-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Информация в верхнем ответе, смешанная с вашими визуальными объяснениями, была бы лучшей.
StarWeaver