#directx #direct3d #textures #hlsl #shader
Вопрос:
При выполнении шейдера пикселей в Direct3D становятся ли ограничения на координаты текстур, введенные MaxTextureRepeat, проблемой только во время вызовов функций поиска текстур, таких как tex2D (), или они вступают в действие в любое время, когда координаты текстур доступны в шейдере?
Я хочу знать, можно ли избежать ограничения MaxTextureRepeat, вызвав что-то вроде frac() для координат текстуры, прежде чем передавать их в функцию поиска текстуры.
Ответ №1:
Координаты текстуры имеют собственную точность интерполятора. На оборудовании с поддержкой пиксельного шейдера 2.0 это по крайней мере 24 бита с плавающей запятой (или, возможно, 32 бита, не уверен). Внутренне вычисления в пиксельном шейдере должны быть не менее 24 бит с плавающей запятой. Большинство современных графических процессоров работают с 32-битной точностью с плавающей запятой.
MaxTextureRepeat-это возможность аппаратного обеспечения для выборки текстур.
Так что да, если вы не сталкиваетесь с ограничениями точности с плавающей запятой, то ограничение диапазона перед выборкой-один из способов избежать ограничений на повторение текстуры.
Однако там, где frac поворачивается от 0 до 1, вы получите большие градиенты, поэтому в этих местах графический процессор захочет использовать уровень mip с очень низким разрешением. Конечно, это может не быть проблемой в зависимости от вашей ситуации; но это одна из потенциальных проблем.