Что более эффективно: новая сетка с клонированным материалом или клонированная сетка с клонированным материалом?

#three.js

#three.js

Вопрос:

Для большого количества объектов (узлов графа в моем случае), которые имеют одинаковую геометрию, но разного цвета, что более эффективно:

1) создание сетки, а затем клонирование сетки и материала сетки (с помощью mesh.traverse ) для каждого узла

2) создайте новую сетку с клонированным материалом для каждого узла

Ответ №1:

Единственное различие между созданием объекта с помощью new и .clone() заключается в том, что последний также копирует все свойства исходного объекта. Если вам это не нужно, лучше просто создать свои сетки с помощью new оператора.

Поскольку у вас большое количество объектов, вы можете рассмотреть возможность использования инстанцированного рендеринга, чтобы уменьшить количество вызовов отрисовки в вашем приложении. Прямо сейчас вам нужно нарисовать каждый узел отдельно. При инстанцированном рендеринге узлы отображаются все сразу. Есть несколько примеров, демонстрирующих инстанцированный рендеринг с three.js :

https://threejs.org/examples/?q=instancing

Использование инстанцированного рендеринга не является обязательным, но может быть полезно, если у вас возникнут проблемы с производительностью. Другой вариант, который проще реализовать, но менее гибкий, — объединить все сетки в большую единую геометрию и использовать цвета вершин. У вас будет единый объект геометрии, материала и сетки, но дополнительный атрибут цвета вершин гарантирует, что ваши узлы будут окрашены по-разному.

three.js R103

Комментарии:

1. Спасибо за комментарий. Возможно, я должен упомянуть, что я использую библиотеку js ( github.com/vasturiano/3d-force-graph ), который зависит от three.js и, таким образом, я не могу реально повлиять на то, когда и как можно рисовать узлы. Я могу указать только сетку для каждого узла. Основываясь на вашем комментарии, я просто создам новую сетку с клонированным материалом.