NURBS на DirectX 11?
Можете ли вы визуализировать NURBS на GPU с DirectX 11? Я читал о современных тенденциях рендеринга поверхностей, подобных этим, но я ничего не вижу в NURBS.
Я нашел несколько связанных ссылок, но ничего твердого... типа "Приближение поверхностей подразделения Кэтмулла-Кларка с бикубическими пятнами" Чарльза Лупа и Скотта Шефера.
- -
2 ответа
В DirectX SDK есть 2 демонстрации; SubD10, SubD11 для DirectX 10/11, соответственно реализации методов, описанных в этой статье.
Быстрый ответ - нет. NURBS довольно сложны, и было бы сложно написать эффективный шейдер, который мог бы отображать их на GPU. Я думаю, что это возможно, но обычно это не делается, потому что есть лучший способ.
Лучшим способом является рендеринг патчей Bézier непосредственно на GPU, поскольку любой NURBS может быть преобразован в связанный набор патчей Bézier. Чтобы сгенерировать патчи, вы выполняете вставку узла в каждый узел, пока он не достигнет той же кратности, что и степень; Например, на кубическом NURBS вы должны выполнять вставку узлов в каждый узел, пока каждый узел не станет тройным узлом. Контрольные точки NURBS можно затем рассматривать как связанную сетку Безье.
С этим связана проблема, характерная для шейдеров: когда вы триангулируете свои патчи Безье, очень важно, чтобы патчи, имеющие общую границу, также имели одинаковые параметры тесселяции, иначе на поверхности NURBS будут трещины из-за несоответствия тесселяции. Если вы используете фиксированные параметры тесселяции, это не проблема, но если вы используете тесселяцию, зависящую от вида, то вам нужно убедиться, что у каждой границы патча есть "тезеляция, зависящая от вида", рассчитанная независимо, так, чтобы соседние патчи совпадали.