1

次のコードを使用して小さな PLY ファイル (4 ~ 10 MB) をロードした場合:

this.loader.load('assets/data/GuyFawkesMask.ply', function (geometry) {
      var bufferGeometry = new THREE.BufferGeometry().fromGeometry( geometry );

      console.log(bufferGeometry);

      // Create object
        let object =
            new THREE.Mesh(bufferGeometry,
            new THREE.MeshPhongMaterial(
                {
                    color: 0xFFFFFF,
                    //vertexColors: THREE.VertexColors,
                    shading: THREE.FlatShading,
                    shininess: 0
                })
            );

        _this.add(object);
    });

すべて正常に動作します。

50MB 以上の大きなファイルをロードすると、ブラウザがクラッシュしたり、モデルが正常にロードされた場合に、一部のコンピュータで軌道制御を使用したオブジェクトとのやり取りが非常に遅くなります。

3D モデルが複雑な獣であることは理解していますが、メモリ使用量を最適化する方法、ファイルをデシメートせずに THREE js にモデルをロードする方法、重要な情報を失うことなく実行できない操作があるかどうか知っていますか?

4

1 に答える 1

1

より大きなモデルでも同様の問題がありました。私が提案するのは、モデルを小さなチャンク (一度に 1MB など) でストリーミングしてロードすることです。
問題は、Three.js がチャンク モデルのロードをサポートしていないことです。
私が自分で行ったことは、ローダーを書き直して、データのチャンクを処理し、チャンクから内部表現を構築することでした。

もう 1 つの方法は、シーンを小さな断片にエクスポートし、ロード後にそれらを再結合することです。

モデルが単純に非常に複雑であるという 3 番目の可能性もあります。

編集:さて、私は少し遊んで、ファイルをバイナリ STL に変換すると、同じ頂点数を維持しながら、少しうまく機能し、chrome をクラッシュさせません。変換された 2 つのファイルへのリンクをここに含めます。1 つはデシメートされたバージョン (頂点数が 70% 削減) で、もう 1 つは元のファイルの変換です。どちらもうまくいきました。

于 2017-04-25T19:47:14.100 に答える