将ARFaceGeometry的实时AR数据捕获到自定义的金属管道

时间:2018-11-30 00:58:29

标签: ios arkit metal

我有一条金属管道在工作。
我正在渲染活脸几何图形,
是从iPhone X上的TrueDepth相机捕获的。

我每帧都从ARFaceGeometry抓取ARSessionDelegate
我将数据传递到框架中的金属管道中。

渲染速度为2.5fps ...

以下是渲染管道:PixelsRender.swift

数据:xyz的uv和索引数组。 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

更新(已解决)

我误以为是三角形的实例!

它在主抽奖功能中。 (感谢Ken Thomases抓住了这个机会)

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

新GPU时间:

[2.769ms] GPU

1 个答案:

答案 0 :(得分:1)

您无意使用实例化工程图,为此参数instanceCount:传递了一个大于1的值。这基本上使GPU要做的渲染工作量成倍增加。因此,如果您实际上不需要/不需要实例化图纸,请在此处传递1。