【问题标题】:How sprites works in three.js?sprites 如何在 three.js 中工作?
【发布时间】:2018-05-17 05:35:25
【问题描述】:

我有一个场景有很多精灵和非常糟糕的帧速率。我试图降低精灵分辨率,将相机限制设置为渲染距离,但无济于事。还有另外两种方法:创建面向相机或粒子系统的板,但是这个精灵使用很多纹理,所以这个方法会调用很多绘制调用(对于每个纹理)。那么你能解释一下精灵何时以及如何在场景中绘制,它们如何使用绘制调用以及可能有任何性能技巧吗?

我有大约 2500 个精灵和 200 个纹理 (256x256)。

抱歉重复了我的question,但我不敢相信 sprite 在three.js 中的效果如此糟糕

【问题讨论】:

标签: javascript three.js


【解决方案1】:

精灵的绘制方式与其他所有内容相同,它们只是旋转以面向相机的四边形。

使用三个,确保您没有重新创建相同的对象 - 材料、纹理等等 - 当您可以制作一个并重复使用它时。

我认为问题可能在于大量不同的纹理。使用纹理图集可能会更好。

【讨论】:

  • 非常感谢您的回答!关于纹理图集。它应该与 sprites 或 PlaneGeometries 一起使用吗?正如我对精灵的理解,它只能通过texture.repeat和texture.offset选择纹理图集的一部分,这需要为每个部分提供单独的材料并且不保存绘制调用。对于飞机,可以使用 uv 映射,但我不明白如何一次调用,如果我要合并所有飞机,我将没有机会将它们中的每个人都旋转到相机
  • 好点。是的,你必须制作新材料来改变纹理偏移并重复,这很奇怪。虽然它可能会被优化,但我会测试它。如果您想尝试使飞机表现得像精灵,请查找“广告牌矩阵”。我认为理论上可以用一个合并的几何体来做,但你必须在顶点着色器中做所有的旋转。
  • 谢谢,我会试试的,我正在考虑使用粒子系统和 ShaderMaterial(我已经测试过,它完美地绘制了大约 20 万个精灵,它还会自动将精灵旋转到相机),但我发现我对在其中使用 uv 映射的着色器很不满意
猜你喜欢
  • 2011-02-25
  • 2011-03-27
  • 2023-04-09
  • 2015-12-31
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多