Що таке фрагмент у програмуванні 3D графіки?


37

Що таке фрагмент у фрагменті шейдера? У Вікіпедії сказано, що:

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

Так це текстури, вершини чи щось інше?

Відповіді:


31

У комп’ютерній графіці фрагмент - це дані, необхідні для генерування значення одного пікселя малюнка примітиву в буфері кадру.

Ці дані можуть включати, але не обмежуються ними:

  • растрові положення
  • глибина
  • інтерпольовані атрибути (колір, текстурні координати тощо)
  • трафарет
  • альфа
  • ідентифікатор вікна

По мірі того, як намальована сцена, примітивні малюнки розбиваються на фрагменти, які текстуровані та поєднуються з існуючим буфером кадрів. Як фрагмент поєднується з даними, які вже є в буфері кадру, залежить від різних налаштувань. У типовому випадку фрагмент може бути відкинутий, якщо він знаходиться далі, ніж піксель, який уже знаходиться в цьому місці (відповідно до глибини буфера). Якщо він ближче до існуючого пікселя, він може замінити те, що вже є, або, якщо використовується альфа-змішування, колір пікселя може бути замінений сумішшю кольору фрагмента та наявного кольору пікселя, як у випадку з малювання напівпрозорого предмета.

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

З вікіпедії


6

Фрагмент - це просто дані, які отримують із внеску трьох вершин навколо пікселя, який ви затінюєте.

У вершинній шейдері ви виводите деякі дані на вершину (колір, текстурні координати, ...). Потім в шейдері фрагмента для кожного пікселя ви отримуєте середньозважене середнє значення цих значень, яке ви потім використовуєте для створення остаточного кольору пікселя.


Піксель та всі інші дані про невидимі буфери, як згадувалося вище.
StarWeaver

4

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


Вибачте, але це неправильно, не згадуючи слова "растаризація" та інтерполяції.
Нотабене

Ще гірше, що це говорить пікселі - які відрізняються від фрагментів, особливо коли задіяні багатоцільові операційні цілі відображення AA, охоплення альфа чи будь-якої з інших ситуацій - я би відмовився від голосування, якби мав відповідь
jheriko

4

Що таке фрагмент у фрагменті шейдера

Єдине чітке, про що можна сказати, - це визначення входів і виходів фрагмента шейдера.

Оскільки це було зроблено / є занадто широким, я зупинюсь на інтуїтивно-візуальній його стороні.

Фрагмент - растровий вихід

Вікі OpenGL говорить:

Фрагмент - це сукупність значень, вироблених Растеризатором.

Що має сенс, оскільки шейдер фрагмента надходить після растризатора, який виробляє його вхід.

І це візуальне зображення виводу растризатора:

Джерело зображення .

Вхід растризатора - це трикутник тривимірного і точки зору, а вихід - це набір пікселів, які можуть з’являтися на екрані (якщо їх не заблокують інші).

Кожен з цих маленьких квадратів (які закодовані як один піксель) - це шматок трикутника, а фрагмент - лише інша назва шматка.


Скажімо, поясніть, щоб я міг вивчити та вдосконалювати контент ;-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Інформація у верхній відповіді, змішана з вашими зоровими поясненнями, була б найкращою.
StarWeaver
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.