Почему Т-образные соединения в сетках приводят к трещинам?

19

Я слышал от многих источников, что иметь T-переходы в трехмерных сетках - плохая идея, потому что это может привести к трещинам во время рендеринга. Может кто-нибудь объяснить, почему это происходит, и что можно сделать, чтобы избежать их?

ap_
источник

Ответы:

20

Ответ lhf хорош с точки зрения тесселяции, но это может произойти в более простых случаях использования треугольной сетки.

Возьмите этот тривиальный пример трех треугольников на экране , ABC, ADE и DBE ...

введите описание изображения здесь

Хотя математически предполагалось, что точка E должна находиться точно на отрезке линии AB, конвейер не будет использовать полностью точные значения, такие как рациональные числа (например, https://gmplib.org/ ). Вместо этого он, вероятно, будет использовать числа с плавающей запятой, и поэтому будет введено некоторое приближение / ошибка. Результат, вероятно, будет примерно таким:

введите описание изображения здесь

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

Тогда вы можете подумать, что с плавающей точкой введенная ошибка будет незначительной, но в средстве визуализации значения вершин экранного пространства (X, Y) почти всегда представлены числами с фиксированной точкой, и поэтому смещение из идеального местоположения будет обычно будет намного больше. Кроме того, поскольку аппаратное обеспечение рендеринга «интерполирует» линейный сегмент пиксель за пикселем с собственной внутренней точностью, существует еще больше шансов, что оно отклонится от закругленного положения E.

Если Т-образный переход «удален», скажем, также путем деления треугольника ABC на два, то есть AEC и EBC, проблема исчезнет, ​​поскольку сдвиги, вызванные ошибками, будут согласованными.

Теперь вы можете спросить, почему рендереры (особенно HW) используют математику с фиксированной точкой для координат XY вершины? Почему они не используют с плавающей точкой, чтобы уменьшить проблему? Хотя некоторые из них (например, Sega's Dreamcast) могут привести к другой проблеме, когда математика установки треугольников становится катастрофически неточной, особенно для длинных тонких треугольников, и они изменяют размер неприятными способами.

Саймон Ф
источник
2
Когда вы говорите «значения вершин (X, Y) почти всегда представлены числами с фиксированной точкой», я предполагаю, что вы имеете в виду координаты вершин экранного пространства в растеризаторе, верно? Не оригинальные вершины модельного пространства.
Натан Рид,
2
@NathanReed Да. Просто экранное пространство X & Y (и, возможно, на некоторых графических процессорах Z). Я отредактирую это, чтобы сделать это яснее.
Саймон Ф
9

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

В более общем смысле, Т-переходы в треугольных сетках, вероятно, приведут к разрывам интерполированных атрибутов, таких как цвет и нормали.

введите описание изображения здесь введите описание изображения здесь

LHF
источник
4

Ошибка округления с плавающей точкой.

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

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

Это может быть исправлено отсутствием Т-образного соединения.

чокнутый урод
источник
3

Простой способ избежать этого - убедиться, что все ваши вершины сварены

Вы сталкиваетесь с тем, что у вас есть разрезы по краям с вершиной, но у вас нет соответствующей вершины на соседнем крае, чтобы сварить / соединить ее, если вы думаете, что это как кнопка на рубашке, вы сшили на кнопка к краю, но не дал ему отверстие, чтобы ткань была открыта.

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

введите описание изображения здесь

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

MephistonX
источник