Javascript 与对象数量相关的Three.js性能
我最近在WebGL中做了一个项目,使用Javascript和3D library three.js 然而,它的性能非常差,开始时速度很慢,充其量接近正常 我游戏的对象是:1辆车,6个桔子,161个樱桃,1张桌子,1把叉子,6支蜡烛Javascript 与对象数量相关的Three.js性能,javascript,three.js,Javascript,Three.js,我最近在WebGL中做了一个项目,使用Javascript和3D library three.js 然而,它的性能非常差,开始时速度很慢,充其量接近正常 我游戏的对象是:1辆车,6个桔子,161个樱桃,1张桌子,1把叉子,6支蜡烛 你可以像在比赛中一样控制汽车(WASD或方向键),你可以在cheerios限制的赛道上驾驶。汽车由几个3.js几何体(长方体、圆环体、圆柱体、球体)组成。如果一个桔子与汽车相撞,玩家返回赛道的起点并失去1条生命 所有的橙子都以匀速直线运动,如果它们与汽车相撞,可能会导
如果您需要有关该问题的更多具体信息,请告诉我。我猜您多次调用昂贵(计算能力方面)的three.js方法可能有点类似。我会首先分析你们的游戏,确定问题是cpu限制还是gpu限制 除了6个点光源外,还有环境光和1个点光源 平行光,都是用three.js创建的 每个像素的照明计算都很昂贵,必须对每个像素进行照明计算。考虑减少光源。 每次爆炸可以有几个粒子(至少100个),每个粒子 粒子是一个非常小的平面,具有类似广告牌的行为
我希望这是通过布告牌粒子系统完成的,而不是作为单个平面。否则,三个js可能会对每个平面执行一个draw调用 创建一个几何体。然后创建cheerios网格。创建网格后,不要将其添加到场景中,而是将其与几何体合并
var globalCheeriosGeometry = new THREE.Geometry();
// create 161 cherios meshes and add them to global geometry
globalCheeriosGeometry.mergeMesh( cheeriosMesh );
因此,您将创建一个包含场景中所有切里欧的几何体。然后使用该几何体创建一个网格并将其添加到场景中。这将显著减少场景中的绘制调用数。是否将cheerios放置在容器对象中?我不确定你的性能到底有什么问题,但也许你可以将cheerios上的一些计算作为一个单独的项目进行批处理。你在使用物理吗?你好吗。我猜问题不在于three.js,而在于你的碰撞和物理系统。关闭所有碰撞,然后查看它是否运行得很快。然后检查你的粒子系统。@gman我目前正在使用蛮力碰撞检查(我们的老师要求某种类型的碰撞检测,并建议使用AABB算法)。因此,每次我更新游戏时,我也会检查所有可能的碰撞,这显然没有通过任何更先进的碰撞技术进行优化(不幸的是,我们在课程中没有处理这些问题)。这确实有所帮助,而且可能是多次实例化同一网格的答案,但程序似乎仍然很慢,最有可能是因为我实现了粒子爆炸。至少有一点帮助=)它是作为单个平面完成的。你能告诉我如何使用公告牌粒子系统吗?试试threejs.org/examples/#webgl\u points\u dynamic,threejs.org/examples/#webgl\u gpu particle\u system