Может ли шейдер сэмплировать блок / область пикселей в текстуре? - PullRequest
1 голос
/ 15 декабря 2011

Существуют ли способы, с помощью которых шейдер может запрашивать сумму / среднее значение блока пикселей при считывании текстуры, вместо поиска одного значения?Я работаю в Cg, но любые примеры и поисковые запросы приветствуются.

Я специально имею в виду встроенные способы, НЕ зацикливая вручную в моем шейдере.

1 Ответ

4 голосов
/ 15 декабря 2011

Не совсем.

Лучшее, что вы можете сделать, это расширение ARB_texture_gather (ядро в GL 4.0 +) / Функция сбора D3D10.1 .

Это позволяет вам выбирать из блока 2x2 текселей, но вы одновременно получаете только один компонент этой текстуры. Кроме того, версия с чистым расширением / D3D10.1 может только получить красный компонент текстуры. Версия GL 4.0 / D3D11.0 может извлекать любой из четырех компонентов, но каждый вызов только извлекает один.

Конечно, вы должны самостоятельно усреднить блок 2x2.

Единственная действительно жизнеспособная альтернатива - это делать то, что сказал Лит: генерировать мипмапы для вашей текстуры и сэмплировать их. Функции доступа к текстуре могут быть извлечены из определенного mipmap, которое представляет среднее значение для определенного диапазона пикселей. И, конечно, они тоже ограничены.

...