2008-09-15 26 views
7

我正在研究需要在服務器上快速呈現簡單3D場景的應用程序,然後通過HTTP將它們作爲JPEG返回。基本上,我希望能夠簡單地包含在HTML頁面中的動態3D場景,通過執行類似:用於服務器端3D渲染的API

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

我的問題是關於什麼技術用來做渲染。在桌面應用程序中,我很自然地會使用DirectX,但是恐怕它可能不適合服務器端應用程序,它將爲幾十甚至數百個用戶一起創建圖像。有人對這個有經驗麼?是否有一個3D API(最好是免費提供的),對於這個應用程序來說是理想的?從零開始編寫軟件渲染器會更好嗎?

我主要關注的是使用DirectX或OpenGL,它是否能在虛擬服務器環境中正常工作,以及它是否適合典型的服務器硬件(我無法控制)。

回答

5

mental images的RealityServer被設計來完成這裏描述的內容。更多細節可在產品頁面上找到(包括可下載的開發版)。

RealityServer docs

+1

鏈接已死亡。 – Soviut 2013-01-31 22:23:31

4

我說你最好的選擇是在服務器上運行Direct3D/OpenGL應用程序(不停止)。使服務器頁面向渲染應用程序發送請求,並讓渲染應用程序發出一個jpg/png /無論什麼迴應。

  • 如果的Direct3D/OpenGL是減緩渲染硬件的情景,那麼任何軟件解決方案會更糟糕
  • 通過不斷渲染的應用程序運行,系統會避免創建/銷燬紋理,backbuffers的開銷,頂點緩衝區等等。您可以潛在地渲染一個簡單的場景,每秒100次。

但是很多服務器沒有顯卡。 Direct3D在軟件中是無用的(有一個來自Ms的模擬設備,但它僅用於測試效果),從未嘗試使用軟件中的OpenGL。

0

不是一個API,而是一個渲染器; Povray?似乎還有一個http接口...

0

服務器端渲染只有在場景由大量對象組成時纔有意義,例如,爲客戶端渲染而將數據集下載到客戶端時速度太慢預計渲染不會實時進行。如果您使用類似jogl與漸進式場景下載(即下載前景對象和渲染,然後基於距離視點的距離和重新渲染來遞增下載對象)之類的東西,則客戶端渲染並不太困難。

如果你真的想做服務器端渲染,你可能希望將Web服務器部分和渲染部分分離到兩臺計算機上,每臺計算機都配置了最佳的任務(渲染器具有OpenGL卡,最小高清和足夠的內存,服務器有很多快速磁盤,很多內存,備份和沒有OpenGL)。我非常懷疑你可以在虛擬服務器上進行硬件渲染,因爲服務器可能沒有GPU。

+1

OP可能想在服務器上呈現的原因與我發現此問題的原因相似;他們想要渲染縮略圖或從上傳到服務器的場景中抓取幀。 – Soviut 2013-01-31 22:25:11

+0

服務器端渲染的另一個原因是安全性(客戶端渲染可能導致數據留在內存中)。如果您不希望將敏感數據傳輸到設備,則服務器端渲染是要走的路線 – CantrianBear 2016-04-26 17:47:20

0

對於一般的3D渲染,Yafaray(http://www.yafaray.org/)可能是一個很好的首選。它速度相當快,結果看起來很棒。它可以在其他軟件中使用,例如攪拌機3D建模器。許可證是LPGL。

如果服務器端軟件恰好在Python編寫,和所需的3D場景是科學數據的可視化,考慮MayaVi2 http://mayavi.sourceforge.net/,如果還是不行,去一個瀏覽在http://www.vrplumber.com/py3d.py

這些誰建議廣泛流行的POV-Ray需要認識到它不是提供API的庫或任何類型的實體。服務器端進程需要編寫一個文本場景文件,執行一個新的進程以使用正確的選項運行POV-Ray,然後獲取生成的圖像文件。如果這對於特定的應用程序來說很容易設置,並且您對POV-Ray的專業知識要比其他渲染器更多,那麼就去做!

0

你也可以看看Java3D(https://java3d.dev.java.net/),如果你的服務器架構已經是基於Java的話,這將是一個優雅的解決方案。

我還建議儘量擺脫純軟件渲染解決方案 - 如果可以的話 - 試圖在3D渲染硬件上製造大量服務器進程併發請求,聽起來像很多工作。

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這樣的模板語言插入自己的相機座標。