10

我正在开发一个应用程序,该应用程序需要在服务器上快速渲染简单的 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 的主要担忧是,它是否能在虚拟化服务器环境中正常运行,以及它是否适用于典型的服务器硬件(我几乎无法控制)。

4

8 回答 8

7

心理图像的 RealityServer 旨在精确地执行此处描述的操作。产品页面上提供了更多详细信息(包括可下载的开发人员版)。

RealityServer 文档

于 2009-08-12T15:36:22.173 回答
4

我说你最好的选择是在服务器上运行 Direct3D/OpenGL 应用程序(不停止)。然后让服务器页面向渲染应用程序发送请求,并让渲染应用程序发送 jpg/png/whatever 返回。

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

然而,许多服务器没有显卡。Direct3D 在软件中基本上没用(有一个来自 Ms 的模拟设备,但它只对测试效果有好处),从未在软件中尝试过 OpenGL。

于 2008-09-15T16:13:36.633 回答
2

您可以包装 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在这里可用。

您可以使用 Jinja2 之类的模板语言来插入您自己的相机坐标。

于 2012-10-10T13:38:45.507 回答
0

与其说是 API,不如说是渲染器;波夫雷?似乎还存在一个http接口......

于 2008-09-15T16:26:15.307 回答
0

服务器端渲染只有在场景包含大量对象时才有意义,这样将数据集下载到客户端以进行客户端渲染会太慢,并且预计不会实时渲染。如果您使用类似jogl和渐进式场景下载(即下载前景对象并渲染,然后根据与视点的距离增量下载对象并重新渲染),客户端渲染并不太难。

如果你真的想做服务器端渲染,你可能想将 Web 服务器部分和渲染部分分开到两台计算机上,每台计算机都针对它们的任务进行了最佳配置(渲染器有 OpenGL 卡,最小的 HD 和足够的 RAM,服务器有很多快速磁盘、大量内存、备份且没有 OpenGL)。我非常怀疑您是否能够在虚拟化服务器上​​进行硬件渲染,因为该服务器可能没有 GPU。

于 2008-09-15T16:27:34.600 回答
0

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 的专业知识比其他渲染器更多,那就去吧!

于 2008-09-16T02:55:40.083 回答
0

您还可以查看 Java3D ( https://java3d.dev.java.net/ ),如果您的服务器架构已经基于 Java,这将是一个优雅的解决方案。

如果可以的话,我还建议尝试使用纯软件渲染解决方案——尝试处理大量对 3D 渲染硬件提出并发需求的服务器进程听起来像是很多工作。

于 2008-09-24T01:27:18.613 回答
-2

查看wgpu.net

我认为这很有帮助。

于 2013-11-04T20:23:07.713 回答