Vertex to Pixel Shader TEXCOORD вопросы точности интерполяции

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

Моя сцена состоит из нескольких очень больших треугольников (длина ребер до 5000 единиц, и текстовых координат в диапазоне от 0 до 5000 единиц, так что текстура выложена мозаикой около 5000 раз), и у меня есть камера, которая смотрит очень близко к одному из этих треугольников (камера может быть настолько близко, что ее видовой экран покрывает только пару метров больших треугольников). Когда я перемещаю камеру по плоскости треугольника, текстура запаздывает и скачет. Я думаю, что я испытываю недостаток точности в интерполированных текстовых координатах.

Есть ли способ повысить точность интерполяции texcoords?

Первым делом я хотел, чтобы texcoord u хранился с двойной точностью в xy-компонентах, а texcoord v в zw-компонентах. Но я думаю, что это не сработает, так как интерполяция шейдеров предполагает, что есть 4 отдельных 8-битных компонента, а не 2 16-битных компонента?

Если на стороне шейдера нет решения, я думаю, мне просто придется тесселить треугольники на более мелкие кусочки? Я бы не хотел этого делать только из-за этой проблемы. Есть идеи?

РЕДАКТИРОВАТЬ: Проблема также видна при печати texcoords в виде цветов на экране, без какой-либо фактической выборки текстуры вообще.

1 ответ

Решение

Вы правы, это похоже на проблему точности. Если ваша карта поддерживает это, вы действительно можете использовать поплавки двойной точности для интерполяции. Просто объявите переменные как dvec2, и это должно работать.

Шейдерная интерполяция не предполагает наличия 4 отдельных 8-битных компонентов. В последних картах каждый скаляр (т.е. компонент в vec) интерполируется отдельно как число с плавающей запятой (или двойное число). Старые карты, которые могли только интерполировать vec4s, также работали с полными числами с плавающей запятой (но эти, вероятно, не поддерживают двойные).

Другие вопросы по тегам