所以,我正在使用SceneKit来渲染一组参数曲面(它们的总和构成一个对象)。为了将它们显示在屏幕上,我通过采样点并创建三角形来创建自定义几何体。以下是我如何操作的概述。
Loop through the collection of surfaces
Generate a random color C
For each surface calculate a grid of N x N points (both positions and normals)
Assign all vertexes for that surface the color C
Add groups of 3 vertexes from this surface to the face index list
看起来这很有效。获取所有这些数据后,我将其转换为正确的结构(SCNGeometrySource和SCNGeometryElement),并像这样创建SCNGeometry
SCNGeometry(sources: [vertexSource, normalSource, colorSource], elements: [element])
这样做可以将我的表面显示在屏幕上,但是我遇到了一个问题,我正在尝试处理一些非常复杂的对象,当我移动相机查看对象时速度变得非常慢。渲染时间约为500毫秒,这使我的帧率和体验感变得非常糟糕。
因此,问题是,我应该采取哪些措施来加速SceneKit性能?我使用了三个参数:三角形原语类型、allowsCameraControl=true (用于旋转相机),以及SCNView的金属特性。我在WebGL中使用Three.js完成了同样数量的数据的相同项目,并且可以很好地使用旋转相机,因此我不相信Scene Kit无法至少与其竞争。我可以调整和关闭哪些功能以加速性能呢?对于那些好奇的人,我正在努力处理的模型生成了231,900个顶点和347,850个面索引(11.1312MB的顶点数据(位置和正常)和1.3914MB的面数据(基本上只是三角形中顶点的索引位置)。)
svnView.debugOptions = .ShowWireframe
。 - lock