three.js - Marchingcube星球植被;大量网格性能
问题描述
我想询问一些关于以最佳性能渲染大量网格的见解。
我正在研究包含行进立方体块状地形的生成式可开采行星。目前我正在尝试添加植被/岩石来修饰行星表面(明白吗?)。我正在使用实际的块加载(在地形旁边)还加载较小的岩石和一些草料。这运行得很好。我遇到了树木和巨石的问题(在整个星球表面上都可以看到,但显然是 LODed)。
测试不同的方法使我走上了这条道路;
根据相机距离进行材质裁剪的自定义着色器;对于由 2 个垂直平面(合并到一个单独的 bufferGeometry)制成的大约 50 万棵树来说,工作正常。但那些“模型”还不够好。
三.LOD's; 这会像疯了一样吸收 fps,以减慢大量网格的速度。
三.InstancedMesh 的;效果很好,但是我必须禁用 frustumCulling,因为植被的原点并不总是在屏幕上。这使得它效率低下。
THREE.InstancedGeometry 与自定义裁剪着色器相结合;我对此寄予厚望,它在使用实际模型时提供了最佳性能。但它仍然吃掉了一半的帧率。顶点着色器仍然必须处理所有顶点以确定它是否在裁剪范围内。同样的 frustumCulling 问题也适用。
Material.clippingPlanes?结合InstancedMeshes;这就是我现在正在尝试的,没有任何运气,仍在试图弄清楚它是如何工作的..
有没有人有渲染大量网格的经验或对我有一些建议?有没有我还不知道的技术?
在多个 InstancedMeshes 中拆分树会有所帮助吗?clippingPlanes 会给我更好的性能吗?
解决方案
推荐阅读
- python-3.x - Python Matplotlib Wordcloud 显示空白
- spring - 麋鹿连接失败
- node.js - 我们可以在 mongoose virtuals 中使用 Query 吗?
- react-native - 华为设备在 react-native-share 中不返回承诺成功或错误
- python - 如何将两个 UUIDv4 字符串组合成一个唯一的 UUIDv4 字符串
- linux - 如何为 docker rootless 安装 uidmap 包
- javascript - 如何在水平滚动上触发交叉点观察者?
- python - 在以多个数据框列为条件的数据框中添加一列
- python - 如何从张量中获取前 3 个最大数字
- python - 如何知道一个进程当前是否被用户使用