用于服务器端3D渲染的API

时间:2020-03-05 18:53:51  来源:igfitidea点击:

我正在开发一个需要在服务器上快速渲染简单3D场景,然后通过HTTP将其作为JPEG返回的应用程序。基本上,我希望能够通过执行以下操作来简单地在HTML页面中包含动态3D场景:

<img src="http://www.myserver.com/renderimage?scene=1&x=123&y=123&z=123">

我的问题是关于使用什么技术进行渲染。在桌面应用程序中,我很自然地会使用DirectX,但恐怕对于可能要为数十个甚至数百个用户创建图像的服务器端应用程序来说,它可能不是理想的选择。有人对这个有经验么?是否有适合该应用程序的3D API(最好是免费提供)?从头开始编写软件渲染器更好吗?

我对使用DirectX或者OpenGL的主要担心是,它在虚拟化服务器环境中能否正常运行,以及在典型的服务器硬件(我对此几乎没有控制权)上是否有意义。

解决方案

回答

我想说最好的选择是在服务器上运行Direct3D / OpenGL应用程序(不间断)。然后,使服务器页面将请求发送到渲染应用程序,然后让渲染应用程序发送jpg / png /任何其他内容。

  • 如果Direct3D / OpenGL要减慢在硬件中渲染场景的速度,那么任何软件解决方案都将变得更糟。
  • 通过保持渲染应用程序运行,我们避免了创建/销毁纹理,后缓冲区,顶点缓冲区等的开销。我们可以潜在地每秒渲染100次简单场景。

但是,许多服务器没有图形卡。 Direct3D在软件中毫无用处(有Ms提供的模拟设备,但它仅对测试效果有好处),从未在软件中尝试过OpenGL。

回答

与其说是API,不如说是渲染器。 Povray?似乎还存在一个http界面...

回答

只有当场景由大量对象组成时,服务器端渲染才有意义,以至于将数据集下载到客户端以进行客户端渲染的速度将太慢,并且预计渲染不会是实时的。如果我们使用jogl之类的方法并结合渐进式场景下载(即下载前景对象并进行渲染,然后根据距视点的距离增量下载对象并进行重新渲染),则客户端渲染并不是太困难。

如果我们确实要进行服务器端渲染,则可能需要将Web服务器部分和渲染部分分离到两台计算机上,每台计算机都针对其任务进行了最佳配置(渲染器具有OpenGL卡,最小的HD和足够的RAM,服务器具有很多快速磁盘,大量ram,备份且没有OpenGL)。我非常怀疑我们是否能够在虚拟服务器上进行硬件渲染,因为该服务器可能没有GPU。

回答

Yafaray(http://www.yafaray.org/)可能是考虑进行常规3D渲染的不错的首选。这相当快,结果看起来不错。它可以在其他软件中使用,例如Blender 3D建模器。许可证是LPGL。

如果服务器端软件恰好是用Python编写的,并且所需的3D场景是科学数据的可视化,请查看MayaVi2 http://mayavi.sourceforge.net/;如果不是,请访问http: //www.vrplumber.com/py3d.py

那些建议广受欢迎的POV-Ray的人需要意识到它不是提供API的库或者任何种类的实体。服务器端进程将需要编写文本场景文件,执行新进程以使用正确的选项运行POV-Ray,并获取生成的图像文件。如果对于特定的应用程序来说这很容易设置,并且与POV-Ray相比,我们比其他渲染器拥有更多的专业知识,那就去吧!

回答

我们还可以查看Java3D(https://java3d.dev.java.net/),如果服务器体系结构已经基于Java,这将是一个很好的解决方案。

如果我们可以尝试破坏大量服务器进程,这些服务器进程都对3D渲染硬件提出并发需求,那么我也建议我们尝试放弃纯软件渲染解决方案,这听起来像是很多工作。

回答

心理图像的RealityServer专门用于执行此处描述的操作。产品页面(包括可下载的Developer Edition)上提供了更多详细信息。

RealityServer文档