摘要:渲染是批處理運行模式,那能不能使用Docker容器技術,做大規模的渲染集群呢?
我們先說說3D渲染涉及哪些領域:
1、什么是3D渲染
簡單粗暴的講:就是將虛擬世界里的3D模型,變為(人眼看到)平面圖片。
比如你畫了個3D模型,經過渲染,變成了最終我們看到的圖片:
(3D模型)
(2D圖片)
2 、3D模型,怎么得到2D圖片
將一個想象的“攝像機”放到3D空間中,去拍攝圖片。這個“攝像機”跟我們的眼睛類似,它看到的就是2D的圖片(視網膜上)。
牆裂建議去看看這個教程:https://www.khanacademy.org/partner-content/pixar/rendering/rendering1/v/overview-rendering
所以簡化后就是,一個“攝像機”+ 一個“視窗”。如下圖:
畫重點:從攝像位,發出一束射線,穿過柵格,打到3D模型上,並記錄下擊中的那個點的顏色。
重復上述步驟,掃描每個柵格上面的點,得到所有點的顏色。這就得到柵格最終的圖片:
這種方式也叫光線追蹤,這個詞也比較常見。
每張圖片里的每個像素點,都是通過“攝像機”+“柵格”拍攝出來的。
3 、3D->2D 更復雜的場景
實際渲染情況下,並不只是這么簡單,因為3D模型表面的顏色,會受到它周圍的環境的影響。比如:3D模型的附近有個光源,3D模型的表面光滑程度等等。
所以即使你知道“攝像機”發出的那束光擊中了3D模型的位置,你也並不能馬上得到該點的顏色(底色+干擾=最終顏色)。
所以真正計算像素點的顏色,工作量還是非常大的。注意,這還是一張圖片(一幀)的計算量,一部動畫電影得有多少幀圖片?
4 、完美的批處理任務
一部電影由很多的幀組成,每一幀都由上面光線追蹤算法計算出每個像素點的顏色。注意:每一張圖片,都可以分別計算的,互相之間並不影響。
(每一幀,單獨進行渲染處理)
- 渲染是創建 3D 模型並將其轉換為 2D 圖像的過程。 在 Autodesk 3ds Max、Autodesk Maya 和 Blender 等應用程序中創作 3D 場景文件。 Autodesk Maya、Autodesk Arnold、Chaos Group V-Ray 和 Blender Cycles 等渲染應用程序可生成 2D 圖像。 有時,可以從場景文件創建單一的圖像。 但是,常見的操作是建模並渲染多個圖像,然后將其組合成動畫。
- 傳媒娛樂行業往往使用渲染工作負荷來生成特效 (VFX)。 廣告、零售、石油和天然氣及制造等其他眾多行業也會使用渲染。
- 渲染過程屬於計算密集型工作;要生成的幀/圖像數可能很多,而渲染每個圖像可能需要大量的時間。 因此,渲染是一個完美的批處理工作負荷,可以利用 Batch 類服務來並行運行多個渲染器。
5 、渲染雲廠商
各大通用類雲廠商,一般都是通過直接買買買,獲得了雲渲染的能力。
也有一些是直接定位為渲染領域的專業雲:
瑞雲,又獨立搞了個“青椒雲”。這么看來,華為雲如果想要進入渲染計算,也得買個小幫手才行啊~
6 、渲染大客戶
一般就是各大渲染廠商,也就是制作動畫片的大廠。比較有名的“追光動畫”大家總有聽說過吧。
今年疫情,電影行業受挫,估計這些渲染廠家日子不好過。。
7 、渲染軟件的生態
要計算那些光線追蹤的像素顏色,就得有專門的軟件。
這些軟件有開源的,有商業的。大部分都在Windows或者Mac上面(畢竟Mac才是設計師們的寶貝)。當然,也有不少是支持在Linux的。
看Google趨勢,熱門的渲染軟件如上。基本上渲染軟件都在下面:
8 、容器搞渲染集群?
既然渲染是完美的批處理,每個步驟的處理互相不影響,可以分布式大規模同時進行。
同時,容器技術,天然適合大規模運行環境的復制。
那能不能使用Docker容器技術,做大規模的渲染集群呢?
答案當然是肯定的。
2019年1月份,Google Cloud與Sony Pictures Imageworks合作推出了OpenCue,高性能的開源渲染管理器,專門針對VFX和動畫功能而設計。Apache 2.0許可
Google雲,也基於OpenCue,推出了渲染解決方案:
https://cloud.google.com/solutions/creating-a-render-farm-on-gcp-using-opencue?hl=zh-cn
9 、容器渲染集群嘗試
畢竟咱是搞容器的嘛,所以小組也針對這個OpenCue做過原型驗證,還給他們提了貢獻呢:-)
安裝Maya,安裝插件:
配置渲染任務:
投遞渲染任務,容器們開干啦:
額,容器估計要統一宇宙了。