Хороший ресурс по структуре подразделений тесселяции
У меня есть необходимость реплицировать тесселяцию 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:
- Чарльз Луп - (кстати, автор другого алгоритма subdiv), чисто математический материал
- Hugues Hoppe - Ищите "прогрессивные сетки", гораздо ближе к программному обеспечению
Еще ближе к коду.
Вы можете найти некоторые библиотеки в Интернете. Когда я искал некоторое время назад, там была дюжина библиотек, которые реализовали подразделение на CPU. Я не особо их выглядел, потому что был заинтересован в реализации GPU. Ключевое слово для поиска "subdivision lib" =)
Наиболее интересным является OpenSubdiv от Pixar. Посмотрите на их код.
Также ознакомьтесь с примером "NVIDIA Instanced Tessellation" ( DirectX, OpenGL). Они реализовали тесселяцию pipelne в шейдерах Vertex и Geometry.
Надеюсь, поможет!