如何通過伺服器端渲染 3D 模型並導出各個角度的 png 圖片?
伺服器根據不同的參數渲染 3D 模型,客戶端只獲取不同角度的 png 模型圖片。
網頁上面有個茶壺,用戶配置茶壺的各項屬性,比如:茶壺的背景顏色,茶壺的花紋,茶壺的圖案,茶壺的形狀,壺把造型,茶蓋的造型,然後網頁上面顯示各個角度觀察的茶壺的圖片,茶壺順y軸旋轉的圖片(正面,背面,四個側面)。希望渲染在伺服器端進行,網頁面上面只是在用戶選定某個參數後,顯示每個角度的png圖片(6-8張)。我希望是有一個cgi的程序,根據get的參數得到圖片,比如http://*****?size=2type=1colore=red......,然後一個cgi的腳本最好是python能夠import 一個3d的庫,然後載入模型,根據get的參數,生成圖片。不知道可不可行?
這個問題的答案很大程度上取決於輸出的渲染質量和生成模型的複雜程度。既可以是最為簡單的頂點著色和3D物體變形,也可以是長時間複雜材質的光線追蹤和高精度模型生成,前者是實時級的反饋和交互,後者肯定是延時輸出。這決定了整個解決方案的大方向,題主你要明確你的需求再哪一個等級上。
如果對輸出圖像質量要求不高(至少不超過現在的遊戲),又需要快速反饋的話,至少在我了解的範圍內有一個成熟的解決方案:使用Unity引擎和它的Web插件,http://www.unity3d.com/。Untiy是一個成熟的3D遊戲引擎,滿足人機交互的需求綽綽有餘。有定製的Shader系統可以製作出相對複雜的渲染效果。國內製作團隊多,找外包容易。價錢相對便宜,專業版3000刀。最最重要的是,既支持Flash輸出,也支持它自己的Web Player輸出。有不少遊戲都是採取這種方式發布。Unity對於3D模型的實時生成支持比較弱,一般遊戲這方面要求不高,不過這一點本來也是要自己找解決方案。
剛剛一個朋友提出了一個不錯的快速解決方案:在伺服器端跑個類似3ds Max,Maya甚至Blender的3D程序。利用腳本控制這些軟體的啟動,載入預定製的場景,輸入參數,渲染輸出。這些軟體都有完整的腳本語言和Console渲染功能,完全能夠應付你的要求。缺點在於你的伺服器要能夠運行這些軟體而且對於輸出的等待時間要求不高。3ds Max只有Windows版,使用MaxScript,支持.net框架;Maya有Windows版和Mac版,腳本語言是Mel,完整支持Python。Blender全平台,也支持Python。另外如果網站請求一多的話,還要考慮一個排隊系統。3ds Max支持多個進程同時運行,但是穩定性難說了。Maya不太了解。我感覺還是輕量級的Blender比較靠譜一些。謝邀。
題主需要的是那種 3D 在線交互展示那種吧(在線,有交互,對畫質要求沒那麼高)?如果是那樣的話,@Avatar Ye 的答案說的就非常好了,可以使用 Unity 3D 引擎製作,我就再補充幾句。Unity 3D 引擎非常好學好用,題主的需求基本都能完成。如果想做一個例如房地產在線樓盤、房間展示的話不是問題。不過對於一個實時渲染的遊戲引擎來說,畫質是硬傷。而且如果場景規模比較大的話,那麼在線內容的載入時間也是問題。
補充一個 Unity 官網的一個在線演示:http://unity3d.com/gallery/demos/live-demos#shadows ,在這個演示中,可以通過開關燈來實時調節場景的光影變化。(需要安裝 Unity 3D 瀏覽器插件)
這裡有更多的 Unity 在線 Demo: http://unity3d.com/gallery/demos/live-demos
如何發布到 Web 上?Unity 可以直接發布到 Web,而不用收取額外的費用(需要用戶電腦安裝 Unity 3D 瀏覽器插件)。在 Adobe Flash 支持硬體加速後,也可以發布為 Flash 格式(需要額外授權費用)。建議如果資金允許,使用 Flash 發布。因為 Unity 瀏覽器插件的裝機率非常低(看過一篇報道說僅 1%)。如果您的作品不具有足夠吸引人的特性的話,用戶可能因為不願意安裝瀏覽器插件而放棄使用。(剛才看到 Unity 官方網站在線演示那段時,您的電腦裝插件了嗎?如果沒裝,您願意就為看這些演示而另裝插件嗎?)相對來說,只要用戶電腦的 Flash 瀏覽器插件足夠新,就可以瀏覽用 Unity 發布嵌入的 3D Flash 內容的網頁。
另外,如果題主需要的不是那種交互,而是在線渲染場景的話,可以使用阿里雲渲染服務,上傳場景,調節參數,在線渲染出圖:http://render.aliyun.com
(題外話,如果題主只是要問在線交互 3D 內容或在線渲染的可行性的話,那麼答案是可行。如果要想做商業項目的話,題主還是做成離線的形式比較好。就像上文所說,Unity 插件安裝率,授權費以及國內惡劣的網路環境對於在線 3D 交互都是硬傷。)如果是maya或者max可以做個攝像機動畫調好想要的幾個角度再進行批渲染就能一次性渲染出所要的圖片了
可以試試Three.js
推薦閱讀: