gpt4 book ai didi

swift - 在 SceneKit 中加速渲染

转载 作者:IT王子 更新时间:2023-10-29 05:37:32 25 4
gpt4 key购买 nike

因此,我正在使用 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 的性能?我使用具有相同数据量的 Three.js 和 WebGL 完成了同一个项目,并且能够很好地使用轨道摄像机,所以我不敢相信场景工具包至少不能与之竞争。我可以调整和关闭哪些功能以加快性能?我使用三角形基元类型,allowsCameraControl = true 用于轨道相机,金属用于 SCNView。

对于那些好奇的人,我努力构建的模型生成了 231,900 个顶点和 347,850 个面索引(11.1312 MB 的顶点数据(位置和法线)和 1.3914 MB 的面数据(基本上只是顶点的索引位置,以便三角形。 ))

最佳答案

1) 如果你“站在”你生成的表面的中心,那么你的问题可能是你在屏幕外画了很多(没有截锥体剔除)并且你需要将你的表面(单个节点)分成子表面(子节点),因此仅绘制在相机 View 空间中可见的节点。

也就是说,231,900 个顶点确实不多,我在 OSX 上使用 SceneKit Metal 渲染器(比使用 OpenGL 渲染器快 20%)绘制了数百万 @60fps。

2) 如果您从远处观察表面并且性能不佳,请检查您在创建 SCNGeometrySource 时输入的 bytesPerComponent: 的数量。在 GeForce GTX 上使用 CGFloat( double )而不是普通浮点时,我的性能大幅下降(但在集成英特尔显卡上还不错)。

关于swift - 在 SceneKit 中加速渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com