Я слышал от многих источников, что иметь T-переходы в трехмерных сетках - плохая идея, потому что это может привести к трещинам во время рендеринга. Может кто-нибудь объяснить, почему это происходит, и что можно сделать, чтобы избежать их?
Я слышал от многих источников, что иметь T-переходы в трехмерных сетках - плохая идея, потому что это может привести к трещинам во время рендеринга. Может кто-нибудь объяснить, почему это происходит, и что можно сделать, чтобы избежать их?
Ответы:
Ответ lhf хорош с точки зрения тесселяции, но это может произойти в более простых случаях использования треугольной сетки.
Возьмите этот тривиальный пример трех треугольников на экране , ABC, ADE и DBE ...
Хотя математически предполагалось, что точка E должна находиться точно на отрезке линии AB, конвейер не будет использовать полностью точные значения, такие как рациональные числа (например, https://gmplib.org/ ). Вместо этого он, вероятно, будет использовать числа с плавающей запятой, и поэтому будет введено некоторое приближение / ошибка. Результат, вероятно, будет примерно таким:
Обратите внимание, что все вершины могут иметь неточности. Хотя в приведенном выше примере показана трещина, Т-образный переход может вместо этого привести к перекрытию по краю, в результате чего пиксели будут прорисованы дважды. Это может показаться не таким уж плохим, но может вызвать проблемы с прозрачностью или трафаретными операциями.
Тогда вы можете подумать, что с плавающей точкой введенная ошибка будет незначительной, но в средстве визуализации значения вершин экранного пространства (X, Y) почти всегда представлены числами с фиксированной точкой, и поэтому смещение из идеального местоположения будет обычно будет намного больше. Кроме того, поскольку аппаратное обеспечение рендеринга «интерполирует» линейный сегмент пиксель за пикселем с собственной внутренней точностью, существует еще больше шансов, что оно отклонится от закругленного положения E.
Если Т-образный переход «удален», скажем, также путем деления треугольника ABC на два, то есть AEC и EBC, проблема исчезнет, поскольку сдвиги, вызванные ошибками, будут согласованными.
Теперь вы можете спросить, почему рендереры (особенно HW) используют математику с фиксированной точкой для координат XY вершины? Почему они не используют с плавающей точкой, чтобы уменьшить проблему? Хотя некоторые из них (например, Sega's Dreamcast) могут привести к другой проблеме, когда математика установки треугольников становится катастрофически неточной, особенно для длинных тонких треугольников, и они изменяют размер неприятными способами.
При моделировании параметрических поверхностей с сеткой в области параметров, Т-образные соединения, скорее всего, будут появляться в виде разрывов на поверхности. Они будут отображаться как пробелы в рендеринге. См. ниже.
В более общем смысле, Т-переходы в треугольных сетках, вероятно, приведут к разрывам интерполированных атрибутов, таких как цвет и нормали.
Ошибка округления с плавающей точкой.
После того, как вы трансформируете Т-образную точку, точка Т может закругляться от края.
Тогда может случиться так, что фрагмент, который выбирается для пикселя, лежит в промежутке между двумя поверхностями.
Это может быть исправлено отсутствием Т-образного соединения.
Простой способ избежать этого - убедиться, что все ваши вершины сварены
Вы сталкиваетесь с тем, что у вас есть разрезы по краям с вершиной, но у вас нет соответствующей вершины на соседнем крае, чтобы сварить / соединить ее, если вы думаете, что это как кнопка на рубашке, вы сшили на кнопка к краю, но не дал ему отверстие, чтобы ткань была открыта.
На рисунке ниже красные точки представляют правильно сваренные вершины, все синие точки нуждаются в дополнительной вершине, чтобы врезаться в соседний край.
Вообще говоря, хорошей практикой является сохранение вашего моделирования в четырехугольниках, это помогает облегчить эту проблему, поскольку у вас всегда должна быть соответствующая вершина для сварки. Это также помогает придерживаться четырехугольников, если вы планируете использовать какие-либо методы деления на сетке.