0

ノードを非表示にすると、大規模な IFC HVAC モデル (80000 ノード以上) ではパフォーマンスが大幅に低下するようです。標準的なコンピュータでは、これには約 10 秒かかります。2 つのモデルがあり、そのうちの 1 つを非表示にしたいと考えています。現在、これは rootId で行われています。これを高速化するために行う変更はありますか?すべてのノードを非表示にする最速の方法は何ですか?

var vm = new Autodesk.Viewing.Private.VisibilityManager(viewer.impl, viewer.model);
var instanceTree = viewer.model.getData().instanceTree;
var rootId = instanceTree.getRootId();
vm.hide(rootId);
vm.setNodeOff(rootId, true);

同じファイルの一部を表示する場合、ノード数が数千の場合、これはかなり高速に見えます。ノードは1つずつ表示されますが。

var totalNodes = nodesToIsolate.length;
for (var i = 0; i < totalNodes; i++) {                          
   vm.show(nodesToIsolate[i]);
   vm.setNodeOff(nodesToIsolate[i], false); // True = hide completely                            
}
4

1 に答える 1

1

つまり、2 番目のアプローチは最初のアプローチよりもかなり高速であると言っています...その場合、最初のアプローチよりも 2 番目のアプローチを使用できない理由は何ですか? rootId からモデル構造をトラバースしてすべてのノードを特定し、2 番目のアプローチを使用できますか、それとも何か不足していますか?

モデルの各フラグメントにカスタム ShaderMaterial を適用し、シェーダー コードからの可視性を制御するのがより高速なアプローチであると推測していますが、モデルをトラバースしてマテリアルに影響を与えるのにも時間がかかりますが、操作は次の場所で実行できる可能性があります。より早い段階。

また、 viewer.impl.unloadModel(model)を使用してシーンからモデルを完全にアンロードすることもできますが、後で復元する必要がある場合は明らかに時間がかかります。

于 2016-09-09T14:23:20.470 に答える