PN-треугольники



PN треугольники (англ. curved point-normal triangles, PN triangles) — способ геометрического представления трёхмерных объектов для их визуализации.

Созданы для улучшения визуального качества триангулированных геометрических (как правило, трёхмерных) фигур. Делают поверхность визуализируемого объекта более гладкой.

Каждый PN треугольник представляет собой кубический треугольник Безье, основанный на трёх вершинах (b300, b030, b003) и трёх нормалях (n200, n020, n002) этих вершин исходного плоского («базового») треугольника. Основная идея метода заключается в использовании информации о вершинах и нормалях базового треугольника в создании кубического треугольника Безье для каждого такого исходного треугольника, а также в возможности генерирования любого количества треугольников из треугольника Безье.

Математические модели

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

Примечание: в данной статье рассматривается квадратичная функция распределения нормалей, но возможно также использование линейной функции, что тоже даёт хорошие результаты.

Модель поверхности криволинейного треугольника

Здесь u, v и w — барицентрические координаты. u, v, w ≥ 0; w = 1 — u — v.

Коэффициенты bijk вычисляются следующим образом:

Здесь Pk — это вектор координат исходной вершины k, k=1,3.
Nk — это вектор координат нормали исходной вершины k, k=1,3.

Модель распределения нормалей криволинейного треугольника






Здесь u, v и w — барицентрические координаты. u, v, w ≥ 0; w = 1 — u — v.

Коэффициенты bijk вычисляются следующим образом:











Здесь Pk — это вектор координат исходной вершины k, k=1,3.
Nk — это вектор координат нормали исходной вершины k, k=1,3.

Функции с конкретными коэффициентами

Подстановкой координат вершин исходного плоского треугольника, а также значений нормалей в этих вершинах, в модели 1.1 и 1.2 получаются функции с конкретными коэффициентами. Каждая пара таких функций описывает отдельно взятый криволинейный треугольник визуализируемого объекта.

Детализация

Для улучшения визуального качества исходного объекта, состоящего из плоских треугольников, входящим в его состав треугольникам придают криволинейную форму, что делает объект более гладким. Также для исходных треугольников задают некоторый уровень детализации. Чем выше уровень детализации, тем, соответственно, более гладким выглядит визуализируемый объект. Именно благодаря детализации «запускается» механизм PN треугольников.

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

Разбиение треугольника осуществляется в барицентрических координатах. В результате, каждый «маленький» треугольничек получает свои барицентрические координаты u, v и w, уникальные в пределах ограничивающего его исходного треугольника.

В реальной модели объекта, состоящей из исходных плоских треугольников, каждому их «маленькому» треугольничку впоследствии будет соответствовать ровно один «новый маленький» треугольничек («поднятый» над поверхностью исходного плоского треугольника), имеющий свои три вершины (и их абсолютные координаты) и свои три нормали. Вычисляются они через функции с конкретными коэффициентами, выведенные из моделей 1.1 и 1.2 отдельно для каждого исходного «большого» треугольника. Барицентрические координаты u, v и w (w = 1 — u — v) вершин всех «маленьких» треугольничков, полученные относительно внешнего для них исходного треугольника, поочерёдно подставляются в эти функции. Как было сказано выше, эти функции должны быть определены для каждого исходного плоского треугольника. Сами эти функции есть формулы и остаются неизменными. Детализация криволинейного треугольника реализуется именно через подстановку в эти формулы координат u и v, поскольку барицентрические координаты каждой отдельно взятой точки на криволинейном треугольнике идентичны барицентрическим координатам соответствующей ей точки на исходном «большом» треугольнике. В результате подстановки для каждой вершины всякого «нового маленького» треугольничка получаются её абсолютные координаты и её нормаль, что впоследствии позволит «отправить» такие треугольнички на визуализацию.

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

Сравнение с другими методами

На рисунке изображение слева получено закрашиванием по модели Гуро исходного объекта, состоящего из плоских треугольников. Изображение в центре получено с помощью механизма PN треугольников, но здесь для вычисления нормалей НЕ используется отдельная функция. А изображение справа получено по представленному в данной статье механизму PN треугольников, где вычисление нормалей происходит квадратично и независимо от функции вычисления координат.

Производительность

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