Для чего на самом деле используется функция fwidth glsl? - PullRequest
12 голосов
/ 23 июля 2011

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

Чтение документов это: abs (dFdx (p)) + abs (dFdy (p)).

Так что это не классический выбор mip, который является максимальным (dx, dy). Это для альтернативного выбора MIP? Но я не могу найти случай, когда abs (dx) + abs (dy) были бы лучше. Должна быть какая-то бумага для подписи или общий алгоритм, который я полностью упускаю, который использует эту функцию. И это должно быть действительно популярно, потому что это вошло в GLSL. Единственное, о чем я могу думать, это какой-то пост-фильтр, который мне не хватает.
Но что? Я уверен, что кто-то здесь знает, и как только вы увидите это, это очевидно. Итак: Какой алгоритм использует abs (dx) + abs (dy)?

Ответы [ 2 ]

9 голосов
/ 24 июля 2011

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

Примерами могут служить сглаживание, обнаружение контуров, анизотропная фильтрация. Я уверен, что есть еще примеры, которые можно придумать.

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

4 голосов
/ 25 февраля 2012

это полная производная для функции DF = dF / dx * dx + dF / dy * dy. См. Сходство?fWidth> = DF или в словах fWidth - максимально возможное изменение в фрагментной переменной F между любыми текущими фрагментами соседних пикселей.т.е. 8 окружающих пикселей в районе 3х3.

...