首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型3D场景流

大型3D场景流
EN

Stack Overflow用户
提问于 2014-09-13 21:32:26
回答 2查看 1.5K关注 0票数 4

我正在开发一个3D引擎,适用于非常大的场景显示。除了渲染本身(锥体剔除、遮挡剔除等)之外,我想知道场景管理的最佳解决方案是什么。

数据是以3D网格的巨大列表形式给出的,它们之间没有关系,所以我不能生成门户,我认为……

主要目标是能够在低RAM (500MB-1 1GB)的系统上运行此引擎,并且加载到其中的场景非常大,可以包含数百万个三角形,这会导致非常密集的内存使用。实际上,我现在正在使用一个松散的八叉树,在加载时构建,它在中小型场景中工作得很好,但许多场景太大了,无法完全放入内存中,所以我的问题来了:

你将如何处理动态加载和卸载块的场景(理想情况下是无缝的),以及你将基于什么来确定是否应该加载/卸载块?如果需要,我可以创建自定义文件格式,因为场景是使用已知3D创作工具上的自定义导出器导出的。

重要信息:许多场景不能被有效遮挡,因为它们的构造。例如:一个非常大的管网,所以没有太多的遮挡,但有非常多的元素。

EN

回答 2

Stack Overflow用户

发布于 2014-09-19 07:47:27

我认为最好的解决方案将是“解决方案包”,一组不同的技术。

如果未加载未使用的级别,

  • 详细等级(LOD)可以减少内存占用。通过在新旧细节之间使用alpha混合,可以或多或少地无缝地更改它。当对象被上传到图形处理器(设备)时,最简单的控制器将使用网格距离来camera.
  • Freeing主机内存(内存),并且明显地释放所有未占用的内存(也包括OpenGL资源)。
  • 使用低质量的网格并使用镶嵌来提高视觉质量。
  • 使用VBO索引,这应该会减少VRAM的使用并增加Valgrind使用的网格,如果可能的话,地形可以使用高度图来渲染。有些东西可以是程序上的generated.
  • Use凹凸贴图或/和法线贴图。这将提高质量,然后您可以减少顶点count.
  • Divide这些“管道”到不同的网格。
  • 伪造3D网格与2D图像:顶替者,天顶...
票数 0
EN

Stack Overflow用户

发布于 2014-09-19 17:40:46

如果纹理要使用大量的ram,则可以使用商业软件包,例如GraniteSDK,它使用虚拟纹理缓存提供无缝的基于详细等级的纹理流。参见http://graphinesoftware.com/granite。或者,您可以查看http://ir-ltd.net/

事实上,你可以使用相同的技术从着色器中的纹理数据中动态构建多边形,但这将会有点复杂。

对于体素,有一种技术可以完全在GPU内存中构建oct树,并对您真正需要的部分进行分页。然后可以使用光线投射来完成渲染。请看这篇文章:Use octree to organize 3D volume data in GPUhttp://www.icare3d.org/research/GTC2012_Voxelization_public.pdfhttp://www.cse.chalmers.se/~kampe/highResolutionSparseVoxelDAGs.pdf

它归结为场景的静态程度,由此,您可以根据您的可视化需求预焙数据的程度。如果你可以预先确定可见性约束(例如google潜在的可视性集)并组织它,这样你就可以根据请求流式传输它,这已经很有帮助了。由于可视化工具会有一定的限制,因此您总是会采用一种策略,尽可能快速而准确地将一部分数据放入GPU内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25823729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档