【问题标题】:Hiding nodes performance隐藏节点性能
【发布时间】:2017-01-17 13:35:25
【问题描述】:

隐藏节点时,如果使用较大的 IFC HVAC 模型(80000 个节点及以上),性能似乎会降低很多。在标准计算机上,这需要将近 10 秒。我有两个模型,想隐藏其中一个。目前这是通过 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);

当显示同一文件的部分时,有几千个节点,这似乎要快得多。尽管节点是一一显示的。

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

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    所以您是说第二种方法比第一种方法快得多......在这种情况下,是什么阻止您使用第二种方法而不是第一种方法?您可以从 rootId 遍历模型结构以确定所有节点,然后使用第二种方法,还是我遗漏了什么?

    我猜想更快的方法是将自定义 ShaderMaterial 影响到模型的每个片段并控制着色器代码的可见性,但是遍历模型以影响材质也需要时间,但操作可能在较早的阶段进行。

    您也可以使用 viewer.impl.unloadModel(model) 从场景中完全卸载模型,显然如果您以后需要恢复它需要时间。

    【讨论】:

    • 卸载模型是不行的,因为隐藏后,我们需要显示部分节点。在平均计算机上,在 Chrome 上隐藏 79658 个节点需要 5668 毫秒。在 Internet Explorer 上隐藏相同数量的节点需要 31514 毫秒。为什么在 Internet Explorer 上隐藏这么慢?有什么技巧可以加快速度吗?从 rooId 隐藏时,两个浏览器的性能并不比一个一个隐藏节点快。有没有更快的隐藏模型?看来 vm.hide(rootId) 应该比仅仅一个一个地隐藏节点要快得多?
    • 如果您查看 viewer3D.js 源代码,您会看到“viewer.hide”调用“VisibilityManager.prototype.setVisibilityOnNode”,为了隐藏顶级节点,代码需要递归地沿着子节点向下,所以它最终会变慢。我想一种更快的方法是只隐藏叶节点,这些叶节点实际上包含可见的几何图形。它可以更快,尤其是在您拥有深度嵌套的模型结构的情况下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多