Opengl es 剔除不带几何体着色器的实例化网格
剔除实例网格的有效方法是什么 (f.e.2000棵树,每棵树约有17个三角形)而不使用几何体着色器?Opengl es 剔除不带几何体着色器的实例化网格,opengl-es,glsl,vertex-shader,frustum,culling,Opengl Es,Glsl,Vertex Shader,Frustum,Culling,剔除实例网格的有效方法是什么 (f.e.2000棵树,每棵树约有17个三角形)而不使用几何体着色器? 不幸的是,我的软件只支持OpenGL ES 3.0,因此必须在顶点着色器或其他地方进行消隐。 另一个解决方案是在每个帧中重新安排实例缓冲区。如果不能有效地进行GPU剔除,那么它是没有意义的;毕竟,这就是在GPU上进行筛选的全部意义 高效的GPU剔除需要以下几点: 从着色器有条件地将数据写入GPU内存的一种方法,格式可控 一种基于完全存储在GPU内存中的数据执行渲染命令的方法,无需CPU/GPU同
不幸的是,我的软件只支持OpenGL ES 3.0,因此必须在顶点着色器或其他地方进行消隐。
另一个解决方案是在每个帧中重新安排实例缓冲区。如果不能有效地进行GPU剔除,那么它是没有意义的;毕竟,这就是在GPU上进行筛选的全部意义 高效的GPU剔除需要以下几点:
因此,除非CPU消隐比执行完整的GPU/CPU同步更昂贵(几乎肯定不是),否则最好只在CPU上执行消隐。由于网格非常小,您不需要消隐来达到超精确,因此为了降低测试2000个边界卷的CPU成本,您可能希望将它们粗略地存储到空间卷中,并根据平截头体测试每个箱子的容积。如果整个垃圾箱都没有射出,则无需测试其中的单个树木。