我正在开发一个需要在服务器上快速渲染简单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的主要担心是它是否能在虚拟化服务器环境中运行良好,以及它是否适用于典型的服务器硬件(我无法控制)。
答案 0 :(得分:5)
mental images的RealityServer旨在完全按照此处的描述进行操作。产品页面上提供了更多详细信息(包括可下载的开发人员版本)。
答案 1 :(得分:4)
我想你最好的选择是在服务器上运行Direct3D / OpenGL应用程序(不停止)。然后让服务器页面向渲染应用程序发送请求,并让渲染应用程序暂时移动jpg / png /。
然而,许多服务器没有显卡。 Direct3D在软件中是无用的(有一个来自Ms的模拟设备,但它只对测试效果很有用),从未在软件中尝试过OpenGL。
答案 2 :(得分:1)
你可以包装Pov-ray(这里使用POSIX和Windows版本)。 PHP示例:
<?php
chdir("/tmp");
@unlink("demo.png");
system("~janus/.wine/drive_c/POV-Ray-v3.7-RC6/bin/pvengine-sse2.exe /render demo.pov /exit");
header("Content-type: image/png");
fpassthru($f = fopen("demo.png","r"));
fclose($f);
?>
demo.pov
可用here。
您可以使用像Jinja2这样的模板语言来插入自己的相机坐标。
答案 3 :(得分:0)
答案 4 :(得分:0)
只有当场景包含大量对象时,服务器端渲染才有意义,因此将数据集下载到客户端进行客户端渲染的速度太慢,并且预计渲染不是实时的。如果使用jogl加上渐进式场景下载(即下载前景对象和渲染,然后根据距视点的距离逐步下载对象并重新渲染),客户端渲染并不太难。
如果您真的想要进行服务器端渲染,您可能希望将Web服务器部件和渲染部件分离到两台计算机上,每台计算机都针对其任务进行了最佳配置(渲染器具有OpenGL卡,最小HD和足够的RAM,服务器有很多快速磁盘,大量的RAM,备份和没有OpenGL)。我非常怀疑你能否在虚拟化服务器上进行硬件渲染,因为服务器可能没有GPU。
答案 5 :(得分:0)
Yafaray(http://www.yafaray.org/)可能是一般3D渲染的首选。它的速度相当快,结果看起来很棒。它可以在其他软件中使用,例如Blender 3D建模器。许可证是LPGL。
如果服务器端软件碰巧是用Python编写的,并且所需的3D场景是科学数据的可视化,请查看MayaVi2 http://mayavi.sourceforge.net/,如果没有,请在{{3}进行浏览}
那些建议广受欢迎的POV-Ray需要意识到它不是一个库或任何提供API的实体。服务器端进程需要编写文本场景文件,执行新进程以使用正确的选项运行POV-Ray,并获取生成的图像文件。如果这对于特定的应用程序来说很容易设置,并且如果你对POV-Ray的专业知识比其他渲染器更多,那就去吧!
答案 6 :(得分:0)
您还可以查看Java3D(https://java3d.dev.java.net/),如果您的服务器架构已经基于Java,这将是一个优雅的解决方案。
如果可以的话,我还建议尝试使用纯软件渲染解决方案 - 试图纠缠一大堆服务器进程,这些进程都会对3D渲染硬件产生并发需求听起来像很多工作。
答案 7 :(得分:-2)
查看wgpu.net。
我认为这非常有帮助。