【发布时间】:2018-11-30 00:58:29
【问题描述】:
我的金属管道正在工作。
我正在渲染实时面部几何,
从 iPhone X 上的原深感摄像头拍摄。
我每帧都从ARSessionDelegate 中抓取ARFaceGeometry。
我将数据传递到我的框架到金属管道中。
渲染速度为 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 上缓存内存空间?
我有很多需要优化的地方,我敢肯定,但我缺少任何明显的东西?
这是我朋友的脸:
更新(已解决)
我把实例误认为是三角形!
它在主绘图功能中。 (感谢 Ken Thomases 捕捉到这一点)
commandEncoder.drawPrimitives(type: vertices.type,
vertexStart: 0,
vertexCount: vertices.vertexCount,
instanceCount: 1 /* previously triangle count of 2304 */)
新的 GPU 时间:
[2.769ms] GPU
【问题讨论】:
-
vertecies.instanceCount是不是除了 1 以外的任何东西?如果是这样,您真的是要进行实例渲染吗?似乎很多人误解了该参数,并有效地告诉 GPU 执行 n^2 他们认为的工作量。无论如何,2304 个三角形并不是一个很大的数字。ARFaceGeometry文档明确指出,至少在给定的程序运行中,这始终是相同的。 -
vertecies.instanceCount当前确实设置为 2304 .. 所以我一直在渲染整个地理 2304 次? x) -
就是这样!现在快了 100 倍!!