2008-10-13 5 views
1

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

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

ответ

0

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

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

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

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