什么是分布式渲染
分布式渲染是一种能够把单帧图像的渲染分布到多台计算机(或多个CPU)上渲染的一种网络渲染技术。有许多方法可以实现这种技术,主要的思路是把单帧划分成不同的区域,由各个计算机或CPU各自单独计算。常用的方法是把静帧划分成许多小区域(Buckets),每台计算机都渲染一部分buckets,最后把这些buckets合并成一张大的图像。VRay就是用的这种做法。(mental ray也是,好像mental ray做得更好一点,更稳定一点)
VRay的实现
Vray通过TCP/IP协议实现分布式渲染的网络联接,不需要任何附加的程序或目录共享。分布式渲染的管理分成两个部分:服务端和客户端。
客户端
客户端是指用户现在正在使用的那台计算机。它把单帧划分成许多小的渲染区域(bucket)并把它传给服务端去计算。整个渲染过程由客户端来管理和组织。在客户端计算机上,有一个用户界面来管理网络上的服务端——指定哪些服务器参与计算哪些不参与——并控制服务器端的状态。每当一个渲染区域(bucket)计算完毕,客户端上显示出这块bucket,并发送另一块bucket给空下来的服务器计算(当然如果有的话)。
服务端
服务端就是渲染服务器啦,顾名思义,就是网络上提供计算服务的真正在干苦力的计算机们。它们渲染每个bucket,并计算结果送回客户端。它们的状态也由客户端监控。
1 一开始,html 就是后端渲染的。不过后端发现页面中的 js 好麻烦(虽然简单,但是坑多),于是让公司招聘专门写 js 的人,也就是前端
2 前端名义上是程序员,实际上就是在切图(CSS)和做特效(JS),所以所有程序员中前端工资最低,职位也最低。所以前后端的鄙视链就出现了
3 nodejs 和前端 mvc 的兴起让前端变得复杂起来,前端发现翻身的机会,于是全力支持这两种技术,造成本不该做成 spa 的网站也成了 spa。慢慢地前后端分离运动从大公司开始兴起,目的就是前端脱离后端的指指点点,独立发展。(表面上是为了「代码分离」,实际上是为了「人员分离」,也就是「前后端分家」,前端不再附属于后端团队)
4 spa 之后发现 seo 问题很大,而且首屏渲染速度贼慢,但是自己选的路再难走也要走下去,于是用 nodejs 在服务端渲染这一条路被看成是一条出路
5 其实这是第二个翻身的机会,如果 nodejs 服务器渲染成为主流,其实就相当于前端把后端的大部分工作给抢了,工资压过普通后端指日可待
6 然而结果是 nodejs 服务端渲染始终是小众,因为后端也没那么脆弱,java php rails 十多年沉淀的技术岂是你说推翻就推翻的,已经运行多年的项目又岂是容你随便用 nodejs 重写的,另一方面 golang 等技术的兴起也给 nodejs 不少压力。最终只有少部分前端特别强势的团队成功用上了 Nodejs 做渲染(比如阿里的一些团队),大部分公司依然是用 PHP 渲染 HTML。
7 于是 nodejs 退一步说好好好我不抢你们的工作,我只做中间层(大部分工作就是渲染页面和调用后台接口),绝不越雷池。后端说算你识相。现在 nodejs 主要搞什么微服务,也是为了抢后端还没注意的市场。
你要看一门技术的发展主要应该看背后的人是谁,应用场景是哪些,最后才是技术细节。
渲染网络有时被称作“渲染处理场”。在 3ds Max 中,可将一台计算机设置为网络管理器。该管理器向渲染服务器“外包”或分配工作。还可以使同一计算机同时具有管理器和服务器的功能,从而不会浪费计算周期。
如果正在进行渲染工作,使用“队列监视器”程序可直接监视和控制网络渲染工作量的 *** 作。使用该“队列监视器”可编辑作业设置以及激活或取消激活、重新排序渲染处理场中的作业和服务器。
重要提示: 使用渲染处理场渲染时,始终渲染为单个帧格式,如 BMP 或 PNG。影片文件格式如:AVI 格式可以将全部帧输出到一个文件,这无法在不同的服务器之间进行拆分来利用网络渲染。
如何划分工作
3ds Max 可在渲染服务器上划分网络渲染任务,为每台服务器一次分配一帧。已完成的服务器输出将累积在一个公用的共享目录中。
如果相同的路径定义该目录,则渲染帧文件也可写入到每台计算机上的本地目录中。帧文件将按顺序编号,以便以后轻松集合这些文件。
管理器在确定如何分配帧和作业时要考虑很多因素,以便始终最有效地使用渲染网络。一台空闲的渲染服务器由管理器自动进行检测,并考虑是否向其分配作业或帧。如果服务器由于某些原因脱机,则管理器将回收当前帧,然后将该帧重新分配给下一个可用的渲染服务器。
基本过程
以下是使用网络渲染时,使用事件序列的分步描述:
用户向网络管理器提交工作。在提交的计算机上,压缩 MAX 文件。如果用户启用“包括贴图”,则也压缩所有贴图和 XRef。
文件压缩之后,将 ZIP 文件复制到管理器计算机的文件夹: 对于 Windows XP: C:\Documents and Settings\<用户 ID>\Local Settings\Application Data\backburner\Jobs\
对于 Windows Vista 和 Windows 7: C:\Users\<用户 ID>\AppData\Local\backburner\Jobs\
在文件夹中是一个描述作业本身的 XML 文件,该文件指定帧大小、输出文件名、帧范围、渲染设置等等。
管理器接收到 ZIP 和 XML 文件之后,它查找哪个服务器正空闲并且可以进行渲染作业。它一次向四个服务器指定作业。(这是“管理器常规属性”对话框上的“最大协同指定”。
每台服务器计算机将 ZIP 和 XML 文件接收到以下文件夹中: 对于 Windows XP: C:\Documents and Settings\<用户 ID>\Local Settings\Application Data\backburner\ServerJob\
对于 Windows Vista 和 Windows 7: C:\Users\<用户 ID>\AppData\Local\backburner\ServerJob\
解压缩 MAX 文件,以及贴图和 XRef(如果包含的话)。
启动 3ds Max 并加载 MAX 文件。如果不包含贴图和 XRef,则该服务器会搜索它们,因为它们已经在 MAX 文件中定义。例如,如果 XRef 位于 d:\foo\xrefmax 中,则服务器将在本地计算机上的 d:\foo\ 中查找 xrefmax 。如果渲染服务器上 3dsmaxini 文件中有其他贴图路径设置,则也将在其他路径中搜索。如果它找不到贴图和 XRef,则服务器不能执行该特殊作业。
这就是为什么在场景文件中对所有贴图和 XRef 使用 UNC 路径很重要的原因,因此所有渲染服务器可以找到它们。但是,如果包含贴图和外部参照,3ds Max 将获取解压缩到 \ServerJob 文件夹中的文件。
一个帧完成渲染时,在提交之前,3ds Max 在服务器上将帧保存到通过“渲染设置”对话框指定的位置。
服务器成功渲染一个帧之后,管理器向服务器指定要渲染的一块帧,它可能指定 20 个连续的帧。这将减少服务器和管理器之间所需通信的数量。
服务器继续为作业渲染帧,直到该作业完成为止。
然后服务器关闭 3ds Max,转为空闲状态。如果队列博爱喊其他作业,则服务器拾取下一个作业并且再次启动该进程。
您可以使用该说明根据使用的类型来帮助确定网络渲染设置的基本要求。如果帧渲染很快,您将需要一个快速的文件服务器计算机来处理很多不同渲染服务器的即时输出。对于场景使用中央位置存储的大量贴图文件也是如此。如果您经常渲染大文件,则渲染将需要较长的时间,并且当文件分布到渲染服务器时,启动需要大多数带宽。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)