我在建筑行业工作,我们正在尝试使用Unity和Oculus Rift来可视化我们的项目。
基本上,我们所有的模型都是使用Revit创建的,我们将它们导出到fbx,然后将它们带到Unity中。对于我们拥有的每个模型(电气、机械、建筑、立面...)我们在Revit中生成fbx并将其带入Unity。
这些模型大约有3,000到60000个对象(网格)和大约300到4,000万个多边形。当我们尝试在Unity中可视化模型时,我们得到了非常低的FPS,大约2到3 fps,批量绘制调用大约15000到20000。
我认为问题是我们所有的模型都很复杂,我们把这些模型放在一起放到Unity中。我想知道是否有任何方法可以优化它,我已经尝试了抽取,禁用阴影,遮挡,但似乎什么都不起作用。将模型折叠到单个对象中不是一个选项,因为我们必须允许用户选择和检查单个元素。
发布于 2019-01-25 20:59:18
我正在做一些类似的工作,我可以与许多顶点或网格分享一些类似任务的经验。我正在尝试在Unity中可视化点云,这是一项非常具有挑战性的任务。然而,在我的例子中,我自己创建了点云,并且我没有对它们进行三角测量。这是有帮助的,但我仍然需要应用优化。
根据我的经验,如果你在一帧中渲染的顶点超过1000万,你就会出现fps问题。当然,这可能会根据您的硬件而有所不同。此外,我相信这将是更糟糕的三角网格。我所做的优化工作如下:
IsVisibleFrom
的函数,它是Renderer
的extension,如下所示:使用UnityEngine;
GeometryUtility.CalculateFrustumPlanes(camera);静态类RendererExtensions { public static bool IsVisibleFrom(此渲染器渲染器,摄像头){ Plane[] planes = public return GeometryUtility.TestPlanesAABB(planes,renderer.bounds);} }
然后,可以像这样使用它,方法是遍历所有已有的网格:
Renderer grid;
IEnumerator RenderVisibleGameObject()
{
for (int i = 0; i < PointCloud.transform.childCount; i++)
{
grid = PointCloud.transform.GetChild(i).GetComponent<Renderer>();
if (!grid.IsVisibleFrom(cam))
{
grid.gameObject.SetActive(false);
}
else
{
grid.gameObject.SetActive(true);
}
if (i == (PointCloud.transform.childCount - 1))
yield return null;
}
StartCoroutine(RenderVisibleGameObject());
}
第二个选项是
发布于 2019-01-26 17:45:14
您还可以找到感兴趣的Forge Unity AR/VR工具包:
正如您可能知道的,Forge针对大型CAD模型的专业可视化进行了高度优化。
https://stackoverflow.com/questions/54365389
复制相似问题