【问题标题】:Threejs Loads of the same Plane MeshThreejs 加载同一个平面网格
【发布时间】:2018-04-02 12:26:23
【问题描述】:

我使用 Threejs 编写了一个简单的 3D 地牢生成器,但是由于我在地牢中使用了很多聚光灯作为火炬,我开始获得 FPS 下降。

我知道光线是问题,但在我解决光线问题之前,我认为可以优化关卡。该关卡仅使用具有墙壁纹理的 200x200 平面制作。我读过实例化,这是我在这种情况下想要的吗?墙壁不会移动。如果它们移动,我可以为移动的网格制作单独的网格。

对于我使用 LambertMaterial 的灯,应该是最快的,但除此之外,我没有做任何事情来提高性能。我尝试使用 https://github.com/mem1b/lightbaking 将房间灯光烘焙到纹理中,但失败了。

那么最后,是实例化优化关卡多边形的方法吗?我读了一点,它不能完全理解。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    假设您有 100 个火炬分布在平坦的墙上。它们中的每一个几乎只影响它最接近的墙的一部分,从面积上讲,这将是墙的 1/100。

    现在如果你把这堵墙分成一个结构wall segment + torch。与其为全局场景提供所有 100 个灯光,不如为每个灯光段提供一个局部灯光。

    太棒了,现在如果你渲染整面墙,你会得到 100 盏灯,而代价是……计算上,但你也引入了 100 次绘制调用而不是 1 次。

    实例化在这里会有所帮助。您可以实例化您的墙段几何体,然后为每个实例设置一个灯光属性而不是制服。

    这样,您可以在一次绘制调用中在 100 个灯段上绘制 100 个灯。这比绘制 100 次要快得多。

    【讨论】:

    • 这看起来是个不错的方法,有没有关于如何进行划分的示例?
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多