Как улучшить Люди Окклюзия в ARKit 3.0 - PullRequest
6 голосов
/ 07 октября 2019

Мы работаем над демонстрационным приложением, использующим окклюзию людей в ARKit. Поскольку мы хотим добавить видео в финальную сцену, мы используем SCNPlane s для рендеринга видео, используя SCNBillboardConstraint, чтобы убедиться, что они смотрят правильно. Эти видео также частично прозрачны, с использованием пользовательского шейдера на SCNMaterial, который мы применяем (таким образом, проигрывая 2 видео одновременно).

Теперь у нас есть некоторые проблемы, когда окклюзия людей очень сомнительна (см. Изображение). Видео, которое мы используем для тестирования, - это женщина с темными брюками и юбкой (если вам интересно, что такое черный цвет на изображении).

Проблемы, с которыми мы сталкиваемся, заключаются в том, что окклюзия не всегда совпадает счеловек (как видно на картинке), и что чьи-то волосы не всегда правильно определяются.

Теперь наш вопрос, что вызывает эти проблемы? И как мы можем улучшить проблемы, пока они не будут выглядеть как this ? В настоящее время мы изучаем, связаны ли проблемы с тем, что мы используем самолет, но простое использование SCNBox не решает проблему.

enter image description here

1 Ответ

6 голосов
/ 10 октября 2019

Я считаю, что вы не можете улучшить People Occlusion функцию в модуле ARKit 3.0. Возможно, вы можете сделать это в ARKit 4.0 или выше. Но теперь это возможно только при использовании Metal, и, поверьте мне, это нелегко.

Почему эта проблема возникает, когда вы используете People Occlusion?

Это все из-заприрода пятого канала - ZDepth канал. Все мы знаем, что визуализированное изображение 3D-сцены может содержать 5 основных каналов для цифрового композитинга - Red, Green, Blue, Alpha и ZDepth.

enter image description here

Есть, конечно, другие полезные рендерыпроходы (также известные как AOV) для композитинга: MotionVectors, IDs, AmbientOcclusion, Specularity, Deep, Normals, PointPosition, UVs, Reflection, Refraction, SubSurfaceScattering, Disparity и т. Д.

Но здесь мы в основном заинтересованы в первых пяти, особенно в ZDepth.

Однако у канала ZDepth есть три серьезных недостатка в ARKit.

Проблема 1. Нет сглаживания для ZDepth .

Визуализация канала ZDepth в любом программном обеспечении класса High-End (например, NUKE, Fusion, Maya или Houdini), в большинстве случаев приводит к появлению артефактов краев (называемых псевдонимы ребер ). Не исключение и для игровых движков - SceneKit, RealityKit, Unity, Unreal, Stingray или Metal.

Можно сказать, что перед рендерингом мы должны включить функцию под названием Anti-aliasing. И, да, он прекрасно работает почти для всех каналов, но не для ZDepth. Этот канал не имеет псевдонимов вообще. Откровенно говоря, есть одно современное решение для надежного композитинга, устраняющее проблему ZDepth - вам нужно использовать Deep channel вместо ZDepth channel. Но ни один игровой движок не поддерживает его, потому что Deep channel огромен. Столь глубокий канальный комп не предназначен ни для игровых движков, ни для ARKit.

enter image description here

Пожалуйста, прочитайте о Deep Comositing против Depth Comositing здесь .

Проблема 2. Разрешение изображения ZDepth .

Обычный ZDepth канал должен отображаться в 32-битный , даже если оба канала RGB и Alpha являются 8-битными . Глубина цвета в 32-битных файлах является тяжелым бременем для процессора и графического процессора. И помните о разрешении изображения ARKit - здесь приведена комбинация символов переднего плана поверх трехмерной модели и фона. Вам не кажется, что это слишком много для вашего устройства, особенно в высоком разрешении? Однако, рендеринг ZDepth канала в 16-бит или 8-бит compresses глубина вашей реальной сцены.

Чтобы уменьшитьНагрузка на процессор и графический процессор, а также для экономии заряда аккумулятора инженеры Apple решили использовать уменьшенное изображение ZDepth на этапе захвата, а затем масштабировать визуализированное изображение ZDepth до Full-Res и умножить его на альфа-канал (он же сегментация). Таким образом, это привело нас к таким неприятным артефактам, которые мы можем видеть на вашей фотографии.

enter image description here

enter image description here

Пожалуйста, посмотрите Презентационные слайды pdf изBringing People into AR здесь .

Задача 3. Частота кадров ZDepth .

Третья проблема связана с тем, чтоARKit работает на 60 кадров в секунду . Снижение только разрешения изображения ZDepth не решает проблему полностью. Итак, следующий логичный шаг для инженеров Apple - снизить частоту кадров до 15 кадров в секунду . Это приводит нас и к артефактам (например, задержка fps для канала ZDepth).

Вы не можете изменить качество своего окончательного составного изображения при использовании свойства типа:

static var personSegmentationWithDepth: ARConfiguration.FrameSemantics { get }

, потому чтоэто свойство gettable, и в ARKit нет настроек качества ZDepth.

PS

Я полагаю, что кто-то может улучшить функции компоновки ZDepth в ARKit 3.0 с помощью разработки с использованием модуля Metal, но сейчас это настоящее испытание!

Вы должны посмотреть пример кода People Occlusion in Custom Renderers app здесь .

...