渲染循环在相机平截头体的第一次“接触”时临时冻结多个网格

时间:2015-06-02 09:57:02

标签: performance three.js

我有一个基本的场景,我正在使用JSONLoader加载对象。物体本身的占地面积非常小,例如:牛奶纸箱:560kb带纹理,34kb json文件。

渲染时,让我们说10个新对象,如果我绕着相机运行它们进入视野,动画循环会冻结一秒左右。在第一次冻结之后,无论有多少物体,摄像机都能平稳地运行。动态加载对象将是一个解决方案,但对于我的特定用例,我仍然需要在首次加载时加载至少50个对象。

更新 - 我添加了我在生产项目中使用的预加载功能,并且我还添加了21种不同的模型来说明我的具体方案。我尝试了以下解决方案:

  • 预加载json文件,
  • 阅读纹理的源路径,
  • 使用纹理加载器加载它们,
  • 使用预加载的纹理覆盖json材质对象的地图,
  • 最终将对象释放到场景中。再次发生相同的行为。

尝试点击setCamera链接以了解它有多滞后。我需要将这个滞后时间减少到0毫秒。感谢您的支持!

工作演示: http://demo.adrianmoisa.ro/flexikom-loader/首先尝试上下环绕相机,检查它是否正常工作,然后左右。任何建议都非常感谢!

2 个答案:

答案 0 :(得分:0)

查看您的代码,我看到您正在加载相同的对象10次,创建10个完全相同的网格。全部使用相同的几何形状和相同的材料。这就是你的滞后所在。从加载(对服务器的异步请求)和对象创建。

您需要做的是加载一个对象并创建一个您将分配给该对象的材质。然后你clone()对象10次,为每个克隆对象分配你想要的不同位置。

答案 1 :(得分:0)

Gaitat是正确的,您不应该加载相同的对象10次。但我认为滞后与纹理直接相关 你应该在循环之外加载纹理 现在怎么样,当你只是加载2时,你在gpu上加载30个纹理(至少我认为这是它的工作原理)。
对页面进行概要分析表明texture2D需要花费大量时间 我几乎可以肯定这会阻止滞后。