Привет всем. Я хотел знать, знает ли кто-нибудь о сложности функций выборки текстур HLSL, таких как tex2d и эквивалент DX10/11. Если текстура содержит массив пикселей, доступ к пикселю будет иметь постоянную сложность, но для доступа к пикселю он использует UV, поэтому тогда я не знаю сложности функции. Кто-нибудь знает?
Сложность типовых методов HLSL. О(1), О(n)?
Ответы (1)
O(1)
Я не знаю, как сэмплирование HLSL работает внутри, но недавно я создал свои собственные (рабочие) сэмплеры для пользовательского класса сетки. Разница в производительности вызвана выбором метода интерполяции:
Точечный пробоотборник
Семплер точек использует интерполяцию ближайшего соседа. Этот алгоритм, конечно, очень эффективен, так как UV просто округляются до ближайших целочисленных индексов пикселей.
Линейный сэмплер
Этот тип дает более хорошие результаты, так как он использует линейную интерполяцию. Предположим, что ваши UVs указывают на место между четырьмя пикселями. Затем выполняется lerp для верхних пикселей в квадрате, еще один для нижних пикселей и третий для результатов. Поскольку этот вид фильтрации включает четыре пикселя и 12 интерполяций с плавающей запятой, он не такой быстрый, как точечная выборка.
Анизотропный сэмплер
Анизотропный фильтр дает результаты (на данный момент) самого высокого качества. Это самый медленный из доступных типов.