Отклонения от всех вершин во фрагментном шейдере без интерполяции.Почему бы и нет? - PullRequest
0 голосов
/ 18 декабря 2018

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

  • . С помощью интерполяции: гладкая, неперспективная или центроид - не имеет значения.Если мы пропустили 3 поплавка (по одному на вершину) на этапе геометрии, мы получим только один смешанный поплавок на этапе фрагмента.
  • Отбрасыванием.При выполнении flat интерполяции аппаратное обеспечение отбрасывает все значения, кроме одного, из провоцирующей вершины.

Почему OpenGL не поддерживает такую ​​функциональность:

Вершинный шейдер:

// nointerp is an interpolation qualifier I would like to have
// along with smooth or flat.
nointerp out float val;

main()
{
    val = whatever;
}

Фрагмент шейдера:

nointerp in float val[3];
// val[0] might contain the value from provoking vertex,
// and the rest of val[] elements contain values from vertices in winding order.

main()
{
    // some code
}

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

Сложно ли это реализовать на аппаратном уровне или это не так широко используется шейдерными кодерами?Или я не в курсе?

1 Ответ

0 голосов
/ 18 декабря 2018

Сложно реализовать на аппаратном уровне или это не так широко используется шейдерными кодерами?

Обычно это просто не требуется в типичных алгоритмах затенения.Традиционно для каждого фрагмента была проведена автоматическая (более или менее) интерполяция.Вероятно, это не так сложно реализовать в оборудовании текущего поколения, потому что по крайней мере современные настольные графические процессоры обычно используют «интерполяцию по модели вытягивания» (см. статью блога Фабиана Гизена ), то есть фактическая интерполяция выполняется вшейдер уже, фиксированная функция hw просто обеспечивает коэффициенты интерполяции.Но это скрыто от вас водителем.

Или я не знаю об этом?

Ну, в нерасширенном GL в настоящее время (GL 4.6) такой функции нет.Однако есть два связанных расширения GL:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...