HLSL tex2D () - откуда берется градиент? - PullRequest
4 голосов
/ 20 декабря 2011

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

Есть функция tex2Dgrad(), которая позволяет мне вводить информацию о градиенте вручную, и tex2Dlod(), которая позволяет мне выбирать mipmap вручную, но если я просто вызываю tex2D(), то откуда берется дополнительная информация о градиенте?

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

Я хочу использовать текстуру в качестве таблицы поиска в пиксельном шейдере, используя вычисленные U и V координаты, но я не хочу, чтобы в 10101 * происходило неожиданное 'волшебство' .

Нужно ли использовать tex2Dlod(), чтобы избежать этого? Я читал, что tex2Dlod() медленнее, чем tex2D().

1 Ответ

1 голос
/ 29 декабря 2011

Графические процессоры закрашивают «четверку» по 4 пикселя за раз, а градиенты, используемые для выборок текстур, получены из конечных разностей, рассчитанных из соседних пар пикселей.Таким образом, графический процессор может генерировать частичные производные даже для произвольных выражений в пиксельном шейдере.Функция tex2Dgrad может быть полезна, если вы можете вычислить более точные аналитические производные для значений, которые вы передаете в качестве координат текстуры.

...