Студия Pixar открыла код системы распределённого рендеринга поверхностей

На конференции SIGGRAPH 2012 анимационная студия Pixar объявила об открытии кода проекта OpenSubdiv, включающего инструментарий и библиотеки с реализацией метода Subdivision для высокопроизводительного кусочного построения гладких поверхностей и кривых на массово параллельных системах с большим числом CPU и GPU. Реализация оптимизирована для отрисовки деформирующихся поверхностей со статической топологией.

Код OpenSubdiv открыт под свободной лицензией Microsoft Public License, одобренной OSI и допускающей как некоммерческое, так и коммерческое использование, но не совместимой с GPL. Поддерживается сборка для Windows, Linux и Mac OS X. Отмечается, что представленный открытый проект идентичен рабочему коду, непосредственно используемому в Pixar для создания анимационных фильмов. В качестве мотива открытия кода называется желание развития открытых средств для высокопроизводительной и качественной Subdivision отрисовки. Для демонстрации производительности OpenSubdiv приводится пример преобразования поверхности персонажа с сеткой из 30 тысяч многоугольников на следующий уровень кусочного разбиения из 500 тысяч многоугольников. Системы Maya и Pixar Presto тратят на эту операцию примерно 100 мс, в то время как OpenSubdiv справляется за 3 мс.

OpenSubdiv состоит из трёх базовых компонентов:

  • hbr (hierarchical boundary rep) - низкоуровневая библиотека с реализацией структур данных для хранения рёбер, граней и вершин subdivision-поверхности. Для каждой вершины и грани выделяются отдельные объекты с указанием связи с соседними вершинами и углами;
  • far (feature-adaptive rep) - надстройка над hbr для создания и кэширования рабочих структур данных для формирования таблиц преобразования вершин и кубических участков поверхности. Предоставляется API с реализацией нескольких типов Subdivision-преобразований;
  • osd (Open Subdiv) - клиентский код для организации параллельного преобразования заданных наборов мешей. Поддерживается несколько режимов: однопоточная и многопоточная обработка, задействование glsl, OpenCL и CUDA.

    ©  OpenNet