Итак, я использую SceneKit для рендеринга коллекции параметрических поверхностей (сумма которых создает объект). Чтобы поместить их на экран, я создаю настраиваемые геометрии, пробирая точки и создавая треугольники. Вот краткий обзор того, как я это делаю.Ускорение рендеринга в 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? Я сделал этот же проект с WebGL, используя Three.js с таким же объемом данных и смог использовать камеру с орбитальной камерой, поэтому я не могу поверить, что набор сюжетов не мог по крайней мере конкурировать с этим. Какие функции я могу настроить и отключить, чтобы ускорить работу? Я использую примитивный тип треугольника, allowCameraControl = true для орбитальной камеры и металл для SCNView.
Для тех, кому интересно, модель, с которой я борюсь, генерирует 231,900 вершин и 347,850 индексов для лиц (11,1312 МБ данных вершин (положение и нормаль) и 1,3914 Мб данных лица (по существу, просто позиции индекса вершин для треугольников .))
На iPad 3 или ранее это приближается к пределам вершин. Добавьте к этому, однако, большую скорость заполнения, которую вы используете, и вы, вероятно, будете изо всех сил пытаться получить 60 кадров в секунду, но не должны быть далеко. 500 мс действительно ненормально. – Confused
Мои старые 4-х используются для обработки таких чисел со скоростью 20 кадров в секунду или около того. Ваш псевдо-код кажется прекрасным, вот как я создаю свою геометрию. В разное время я получал индексы, испорченные, что приводило к гранью беспорядка на экране. Это действительно поразило бы частоту кадров, я отложил ее на шейдер фрагмента, чтобы сделать намного больше работы. Я бы дважды проверял сетку, возможно, сделал ее полупрозрачной и включил каркас 'svnView.debugOptions = .ShowWireframe'. – lock
Как изменить скорость заполнения вручную? – Red