Объединение мешей снижает FPS

Я объединил около 2500 мешей (каждый из которых имеет свой набор цветов), но FPS ниже, чем если бы я не объединял.

Согласно ЭТОМУ, слияние — это правильный путь, если вы хочу поднять фпс.

Я что-то упустил здесь?

var materials = new Array();
var new_geo = new THREE.Geometry();

for (var i = 0; i < AllMeshes.length; i++) {
    materials.push(AllMeshes.children[i].material);
    THREE.GeometryUtils.merge(new_geo, AllMeshes.children[i], i);
}

var mesh = new THREE.Mesh(new_geo, new THREE.MeshFaceMaterial(materials));

person Yenza    schedule 09.05.2014    source источник


Ответы (1)


Под капотом использование MeshFaceMaterial разбивает сетку на отдельные сетки для каждого материала — поэтому, если у вас есть отдельный материал для каждой дочерней сетки, Three.js должен снова разделить вашу объединенную сетку на части. В результате ваша якобы объединенная геометрия на самом деле не отправляется в GPU одним пакетом.

person IceCreamYou    schedule 10.05.2014
comment
Это имеет смысл. Знаете ли вы, можно ли объединить все меши, включая их соответствующий материал, чтобы они отправлялись одним пакетом? Или я должен задать это в другом вопросе? - person Yenza; 12.05.2014
comment
Что ж, вы, вероятно, могли бы сделать это, если бы вы могли построить одну гигантскую текстуру, содержащую все ваши материалы в правильном расположении, чтобы обернуть изначально независимые сетки, но нет встроенного способа сделать это. Учтите, что если бы это было улучшением, Three.js, вероятно, сделал бы это по умолчанию для всего в сцене. Большие текстуры в любом случае не очень хороши для графического процессора, потому что они могут не поместиться в его встроенной памяти. - person IceCreamYou; 13.05.2014
comment
Хм, хорошо, думаю, мне нужно найти другой способ сделать это. - person Yenza; 13.05.2014
comment
Если вы просто меняете цвета, вы, вероятно, можете обойтись без использования цветов вершин вместо разных материалов. - person IceCreamYou; 15.05.2014
comment
Вместо этого я исправил это с помощью шейдера фрагментов;) Проверьте это здесь: stackoverflow.com/questions/23632908/ - person Yenza; 15.05.2014