3D渲染集群,你了解多少?
摘要:渲染是批处理运行模式,那能不能使用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月份,GoogleCloud与Sony PicturesImageworks合作推出了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,安装插件:
配置渲染任务:
投递渲染任务,容器们开干啦:
额,容器估计要统一宇宙了。
最新文章
- 重磅来袭,使用CRL实现大数据分库分表方案
- linux 命令总结
- highlight.js 页面 代码高亮
- linux 分区重新格式化
- BZOJ 1441
- SQL SERVER 2000 &; SQL SERVER 2005 数据缓存依赖
- 单调队列-hdu-4193-Non-negative Partial Sums
- DAL – RDBMS 的分区
- HDU 2717 Catch That Cow
- html5中拨打电话代码
- CSS中的选择器之类选择器和id选择器
- flask --- 02. 路由, 初始化配置,蓝图
- tomcat8 manager页面限制IP访问
- js array 数组添加与删除数据
- Converting Python Virtual Machine Code to C
- xdoj 1330---异或(找规律)
- poi导出联动下拉选择的excel
- android开发中的 Activity 与 Context 区别与联系
- logback和slf4j的使用之logger使用
- 如何解析json字符串及返回json数据到前端
热门文章
- centOS7.*安装nginx和简单使用
- HTML 布局 - 使用<;div>; 元素
- 牛客挑战赛40 VMware和基站 set 二分 启发式合并 区间覆盖
- luogu P3920 [WC2014]紫荆花之恋
- day17.json模块、时间模块、zipfile模块、tarfile模块
- 【NOI2001】方程的解数 题解(dfs+哈希)
- 银弹谷零代码开发V百科|使用技巧:Vbase技巧二则之二
- 你不是说你会Aop吗?
- VMware虚拟机磁盘收缩的几种方法
- Mixed Precision Training —— caffe-float16