processingThread

* картинка взята из документации к Autodesk MotionBuilder 7.5

При написании плагина шейдера вебкамеры столкнулся с таким противоречием: с одной стороны необходимо обрабатывать каждый кадр веб камеры без влияния на общую производительность MoBu сцены, а с другой — правило создания плагинов под MoBu гласит, что добавление своих потоков может только ухудшить производительность, мол не делайте так, а используйте то что уже есть. Вот цитата из документации: Any extra threads or processes running parallel to MotionBuilder might seriously slow down performance or even prevent MotionBuilder from running at all.

Но я не нашел места, где можно было бы выполнять все вычисления по обработке кадров веб камеры в MoBu. Плагин шейдера имеет только вызов внутри рисования кадра, а если там производить обработку, то начнет тормозить дико вся сцена целиком. Это не годится. Пробовал подставить обработку кадров в UI поток MoBu, но тоже провально — ведь ui обрабатывается для шейдера только в активном режиме. Если выйти из интерфейса, вычисления проводится не будут, а кадры обрабатывать нужно постоянно. Пробовал переписать OnIdle события FBSystem, тоже не помогло, тормозит сцена.

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

Вычислительный поток плагина шейдера
Метки:                

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *