Three.jsで.objモデルをロードし、面から独立したメッシュを作成して本当に面白いアニメーションを作成します。しかし、この問題は、あまりにも多くのメッシュでは非常に悪いパフォーマンスです。10000メッシュのThree.jsパフォーマンスの最適化
実際、10000面の単一メッシュは美しく機能します。しかし、分離された10000メッシュ(これらの面から作成されたもの)は、アニメーションなしであっても、静的シーンであってもひどく機能します。
このようなアニメーションを保存してパフォーマンスを最適化するにはどうすればよいですか?
リンク:ここhttp://intelligence-group.ru/test.html
は、コードの作成メッシュです:
` obj_loader.load(
'/assets/models/zeus.obj',
function(object) {
var material = new THREE.MeshPhongMaterial({
color: "#eeeeee",
shading: THREE.FlatShading,
metalness: 0,
roughness: 0.5,
refractionRatio: 0.25
});
var face = new THREE.Face3(0, 1, 2);
for (var i = 0; i < object.children.length; i++) {
var child = object.children[i];
var geometry = new THREE.Geometry().fromBufferGeometry(child.geometry);
for (var i = 0; i < geometry.faces.length; i++) {
var new_geometry = new THREE.Geometry();
var a = geometry.faces[i].a;
var b = geometry.faces[i].b;
var c = geometry.faces[i].c;
new_geometry.vertices.push(geometry.vertices[a]);
new_geometry.vertices.push(geometry.vertices[b]);
new_geometry.vertices.push(geometry.vertices[c]);
new_geometry.faces.push(face);
new_geometry.computeFaceNormals();
var mesh = new THREE.Mesh(new_geometry, material);
group.add(mesh);
}
full_orig_array(group); //animation function - not the reason of bad optimization!
}
scene.add(group);
}
);`
重要:アニメーションが完了した後、私は1つのメッシュ(ローダーからオリジナルのオブジェクト)で10の000メッシュを置き換える - そして、あなたパフォーマンスの大幅な向上が見られます。それはアニメーションではありません - 私はそれをチェックしました:アニメーションなしでも10 000メッシュは同じ悪い性能を持っています。
私が理解するように、それは各メッシュの異なるジオメトリについてです。しかし、私は(
をこの問題を解決する方法がわからない私は、ジオメトリを複製していないことを考慮に入れてください - 。!各メッシュのジオメトリは一意であることが問題である
https://threejs.org/examples/?q=buffer#webgl_buffergeometry_instancing – gaitat
[three.js内の多くのsphereGeometryのレンダリングを最適化する方法]の複製が可能です(https://stackoverflow.com/)。質問/ 22028288/3-jsで球形化を多面的に行う方法の最適化) –