Хороший ресурс по структуре подразделений тесселяции

У меня есть необходимость реплицировать тесселяцию GPU на ЦП (т.е. получить те же координаты uvw на стороне ЦП, которые я получу на GPU от тесселлятора). Причина этого довольно сложна, но, проще говоря, у меня есть алгоритм, который хранит данные для каждой точки тесселяции, и для вычисления в первую очередь мне нужны координаты uvw на ЦП.

Я много гуглил для точных деталей паттерна тесселяции, но я нахожу только очень расплывчатые тексты, говорящие об этом в общих чертах, лучший из которых - этот: http://fgiesen.wordpress.com/2011/09/06/a-trip-through-the-graphics-pipeline-2011-part-12/

Является ли причиной отсутствия текстов по этому поводу то, что это зависит от поставщика, или я просто не нашел нужную страницу?

Меня интересуют тексты как по реализации OpenGL, так и по DX11, если они отличаются.

1 ответ

Решение

Я также был очень заинтересован тесселяцией, и, в частности, подразделением поверхностей некоторое время назад. Это очень сложная тема. Он был исследован с начала 70-х годов и до сих пор находится в стадии исследования.

Неясно, хотите ли вы повторно реализовать весь конвейер тесселяции шейдеров (который, я думаю, потребует годы для одного программиста), или только один алгоритм подразделения (или даже алгоритм, который не является подразделением).

В любом случае, есть несколько ссылок о подразделении:

теория

Обычно мы реализуем поверхности деления в шейдерах тесселяции с использованием алгоритма поверхности деления Catmull-Clark. Вы можете найти некоторые статьи от оригинальных авторов в Google. Есть главное:

" Рекурсивно порожденные B-сплайновые поверхности на произвольных топологических сетках" (1978 год, PDF)

Ближе к коду

Проверьте документы этих крутых парней из Microsoft Research:

Еще ближе к коду.

Вы можете найти некоторые библиотеки в Интернете. Когда я искал некоторое время назад, там была дюжина библиотек, которые реализовали подразделение на CPU. Я не особо их выглядел, потому что был заинтересован в реализации GPU. Ключевое слово для поиска "subdivision lib" =)

Наиболее интересным является OpenSubdiv от Pixar. Посмотрите на их код.

Также ознакомьтесь с примером "NVIDIA Instanced Tessellation" ( DirectX, OpenGL). Они реализовали тесселяцию pipelne в шейдерах Vertex и Geometry.

Надеюсь, поможет!

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