Оперативный сбор AR-данных ARFaceGeometry в пользовательский конвейер Metal - PullRequest
0 голосов
/ 30 ноября 2018

У меня работает металлический конвейер.
Я рендеринг геометрии живого лица,
, снятый с камеры TrueDepth на iPhone X.

Я беру ARFaceGeometry изARSessionDelegate каждый кадр.
Я передаю данные своей структуре в металлический конвейер.

То есть рендеринг выполняется со скоростью 2,5 кадра в секунду ...

Вот конвейер рендеринга: PixelsRender.swift

Данные: uv's xyz & массив индексов.ARFaceGeometry состоит из 2304 треугольников.

Я рассчитал конвейер рендеринга:

[1.086ms] Command Buffer    
[0.006ms] Input Texture     
[0.054ms] Drawable          
[0.110ms] Command Encoder    
[0.123ms] Uniforms          
[0.006ms] Uniform Arrays    
[0.009ms] Fragment Texture  
[68.015ms] Vertices         
[0.002ms] Vertex Uniforms   
[0.000ms] Custom Vertex Texture
[0.027ms] Draw              
[0.036ms] Encode            
[80.207ms] All CPU
[346.936ms] GPU
[431.035ms] All CPU + GPU
[434.100ms] Total

Это все вершины, которые рендерится так долго.
Есть ли способкешировать пространство памяти на GPU или что-то в этом роде?
У меня есть что оптимизировать, я уверен, что-нибудь очевидное, что мне не хватает?

Вот лицо моего друга:

Luma Face

Обновление (решено)

Я ошибочно принимал примеры за треугольники!

Это былов основном розыгрыше(Спасибо Кену Томассу за то, что он поймал это)

commandEncoder.drawPrimitives(type: vertices.type,
                              vertexStart: 0,
                              vertexCount: vertices.vertexCount,
                              instanceCount: 1 /* previously triangle count of 2304 */)

Новое время GPU:

[2.769ms] GPU

1 Ответ

0 голосов
/ 30 ноября 2018

Вы непреднамеренно использовали создание экземпляра, передав значение больше 1 для параметра instanceCount:.Это в основном умножает объем рендеринга, который должен выполнять GPU.Итак, если вам на самом деле не нужно / не нужно рисовать экземпляры, пройдите туда 1.

...