Я считаю, что вы не можете улучшить People Occlusion
функцию в модуле ARKit 3.0. Возможно, вы можете сделать это в ARKit 4.0 или выше. Но теперь это возможно только при использовании Metal, и, поверьте мне, это нелегко.
Почему эта проблема возникает, когда вы используете People Occlusion?
Это все из-заприрода пятого канала - ZDepth
канал. Все мы знаем, что визуализированное изображение 3D-сцены может содержать 5 основных каналов для цифрового композитинга - Red
, Green
, Blue
, Alpha
и ZDepth
.
Есть, конечно, другие полезные рендерыпроходы (также известные как 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.
Пожалуйста, прочитайте о Deep Comositing против Depth Comositing здесь .
Проблема 2. Разрешение изображения ZDepth .
Обычный ZDepth канал должен отображаться в 32-битный , даже если оба канала RGB и Alpha являются 8-битными . Глубина цвета в 32-битных файлах является тяжелым бременем для процессора и графического процессора. И помните о разрешении изображения ARKit - здесь приведена комбинация символов переднего плана поверх трехмерной модели и фона. Вам не кажется, что это слишком много для вашего устройства, особенно в высоком разрешении? Однако, рендеринг ZDepth канала в 16-бит или 8-бит compresses
глубина вашей реальной сцены.
Чтобы уменьшитьНагрузка на процессор и графический процессор, а также для экономии заряда аккумулятора инженеры Apple решили использовать уменьшенное изображение ZDepth на этапе захвата, а затем масштабировать визуализированное изображение ZDepth до Full-Res и умножить его на альфа-канал (он же сегментация). Таким образом, это привело нас к таким неприятным артефактам, которые мы можем видеть на вашей фотографии.
Пожалуйста, посмотрите Презентационные слайды 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 здесь .