В какой момент вступают в силу ограничения MaxTextureRepeat?

#directx #direct3d #textures #hlsl #shader

Вопрос:

При выполнении шейдера пикселей в Direct3D становятся ли ограничения на координаты текстур, введенные MaxTextureRepeat, проблемой только во время вызовов функций поиска текстур, таких как tex2D (), или они вступают в действие в любое время, когда координаты текстур доступны в шейдере?

Я хочу знать, можно ли избежать ограничения MaxTextureRepeat, вызвав что-то вроде frac() для координат текстуры, прежде чем передавать их в функцию поиска текстуры.

Ответ №1:

Координаты текстуры имеют собственную точность интерполятора. На оборудовании с поддержкой пиксельного шейдера 2.0 это по крайней мере 24 бита с плавающей запятой (или, возможно, 32 бита, не уверен). Внутренне вычисления в пиксельном шейдере должны быть не менее 24 бит с плавающей запятой. Большинство современных графических процессоров работают с 32-битной точностью с плавающей запятой.

MaxTextureRepeat-это возможность аппаратного обеспечения для выборки текстур.

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

Однако там, где frac поворачивается от 0 до 1, вы получите большие градиенты, поэтому в этих местах графический процессор захочет использовать уровень mip с очень низким разрешением. Конечно, это может не быть проблемой в зависимости от вашей ситуации; но это одна из потенциальных проблем.