渲染农场小科普

简单来说,渲染(Render)就是把3D场景中的模型、灯光等元素通过复杂的数学计算转化为可视的2D图像。根据项目要求的不同,渲染的复杂程度会随着需要渲染要素的变化而增加。比如说,一个3D场景中包含有3D模型、贴图、灯光和其他众多不同的元素。完成如此复杂的渲染要求,我们需要采用高性能的计算机集群。渲染农场当我们需要渲染多个复杂图像时,比如动画电影中用到的图像,单台计算机是难以完成的。此时,我们就需要用到渲染农场,正如上文提到的,渲染农场是由相互联网的高性能计算机集群组成,用于渲染复杂的CG图像。渲染农场由主机和众多节点机组成,主机通过队列管理器(Queue Manager)或者渲染管理软件负责向节点机分配渲染任务。该复合系统采用并行计算技术,所以每台节点机都可以同时渲染自己的任务。根据渲染任务的复杂程度,渲染任务可以根据全图、层或者在建模型的序列进行渲染任务的分配。队列管理器可以根据渲染的情况检查和平衡渲染任务的数量,并可以作出相应调整。和超级计算机的区别渲染农场的可拓展是一个循序渐进的过程,主要取决于渲染任务的复杂性程度。一般情况下,制作方并不会购买数以千计的计算机进行VFX(视觉特效)的渲染。随着业务的发展,渲染农场会逐步增加节点机以确保渲染任务的顺利进行。任何渲染农场都是从小开始发展,逐步壮大。而超级计算机则是一套高速运转和处理预定义任务的系统。随着时间的推移,超级计算机需要进行升级维护。事实上,它从一开始就和渲染农场存在差异:超级计算机从处理多任务“开始”,而渲染农场从小规模开始,逐步发展壮大。再者,渲染农场的性价比也远高于超级计算机。渲染农场种类居家型渲染农场在这种情况下,用户在家自己搭建整个渲染农场。搭建居家农场比较复杂,管理起来也不容易,除非用户自身精通各种复杂的软件和编程。 协助性渲染农场协助性渲染农场由多个用户组成,每个用户可以将自己空闲的节点机让给其他用户使用,或者在渲染任务繁忙时拥有他人空闲的节点机。但是,协助性渲染农场的操作方式要求用户了解一些渲染技术性知识,以确保渲染农场协助性的流畅。因为其节点机的来源不统一,用户众多,管理起来相当混乱。 云渲染农场云渲染农场是目前市面上最可靠、性价比最高和效率最高的渲染方式之一。这主要是将渲染任务外包给专业经验丰富的数据中心或者组织。外包公司以项目为基础根据客户的要求对项目进行渲染,客户不需担心服务器空间或者相关技术问题。云渲染农场可以为客户节省大量的人力物力,可以让客户将更多的精力专注于项目的创新和质量,效果不仅显著,而且高效。 云渲染农场工作流程我们可以采用多种不同的方式将渲染项目提交到在线渲染农场:网页提交、插件提交、FTP提交。网页提交网页提交是将渲染文件上传到在线渲染农场最简单的方式,犹如将图片或者文件上传到社交网络或者邮件般简单。但是,我们不能将存档文件直接上传到在线渲染农场的云端,因此,我们建议在上传文件之间,对文件进行一些预处理确保文件都有所有的贴图和其他相关文件。 插件提交相对比之下,插件提交还是比较简单。一般情况下,在线渲染农场都会针对3D软件文件的上传指定相关的插件,以方便用户可以在上面直接提交相关任务。多数在线渲染农场都会在客户完成文件上传后立刻进行渲染。 文件传输协议(FTP)一般而言,在线或者云端服务器都会向用户提供一个由渲染农场规定的FTP(文件传输协议)服务器地址和端口,规定客户上传和渲染文件的类型。一般情况下,系统会提供项目渲染文件放置的指导说明。 接收渲染完成的文件接收渲染完成文件的流程与上传文件的流程相反。渲染完成的文件最后是通过网页、插件或者FTP进行下载。根据使用服务器的情况,在线渲染农场提供不同文件下载方式的细节和说明。 在线渲染农场优势简单易用在线渲染农场不仅实用,并且操作流程简单易懂,客户只需从本地计算机进入云渲染农场进行任务渲染即可。软件管理和维护由在线渲染服务供应商负责,客户可以抽出更多的时间专注于自己的项目。 性价比高相比于客户自己渲染所投入的时间和财务成本,专业在线渲染农场可以帮助客户节省人力财力,以将公司的人力财力实现最优化。 看得见的视觉特效在线渲染农场基于复杂的编程软件,可以让程序员渲染出实实在在的视觉特效。将渲染业务进行外包可以让客户获得更逼真更真实的视觉特效。在线渲染农场的专业工程师和程序员采用最先进的渲染技术以确保客户渲染视觉效果的真实性。高效渲染在项目临近结束时,根据渲染文件的格式和组织要求对项目进行更改是十分困难的。但是,外包渲染服务供应商可以根据客户的详细要求,对客户的项目渲染任务进行打包和分派处理,既高效,又实现客户需要对项目进行修改的目的。 保护客户数据安全不管项目的成品有多优秀,客户都必须确保自己项目数据的安全性。当决定使用在线渲染农场之前,客户须已经了解了渲染农场的数据保密协议和相关政策,一些协助性渲染农场倾向于分享客户的数据。如果渲染农场提供低廉的价格,甚至提供免费的渲染服务,客户需警惕他们是否会泄露客户渲染项目的数据。

2015-03-24 15:03:24渲染农场
小讲堂
MAX里不规则的三角面转换成规则四边面的小技巧

在max里的模型制作里面经常遇到不规则的三角面,不利于后面的细化和修改,下面给大家介绍一个小技巧,可以轻松的把一下三角面的模型转成易于修改的四边面模型。下面以一个很简单的等高线生成的山体模型给大家做个演示一般等高线直接生成的山体都是三角面的,不利于后面的细化调整和修改 那么我们来看下怎么把它转换成规则的利于修改的四边形,首先建立一个plane,等下转换出来的山体的细节和这个plane的段数成正比 然后我们把这个plane放到这个等高线山体的上方 来到物体创建面板,选择compound objects里面的conform 如下图显示,并且选择目标物体 可以看到plane和下面的山体进行了适配 接下来还有一步要做,勾上下面这项,把适配的原始物体隐藏掉 下面把plane上面的一排点和下面适配出来的山体对齐 新的规则四边面山体和之前的等高线山体完美匹配,但是布线完美了很多 以上就是本期瑞云学堂的讲授内容,下期瑞云小讲堂再见!

2015-03-04 16:41:26
小讲堂
Python 的效率編程_simplified

Python 说是当今最热门的编程语言之一,相信大家都不会反对。在去年就有报导说在美国顶针的计算机大学当中,有80%的大学已选用Python 作为编程入门的教学语言。在三维动画业界当中,也越来越多软件支援使用Python 来作开发,使制作人员能容易开发出相关工具,从而提升工作效能。跟Perl 和Ruby 一样,Python 被归类为Scripting language,设计取向为语法简单,但秏用系统资源比较多,被形容为「犠牲执行效率去换取编程的开发时间」。在这里让我们来分享一些有关怎么去做Python 编程的例子,可以让我们争取更多的执行效率。例子一・ 交换两个变数的值: import timeit def doSwapWVar(): a = 1 b = 2 tmp = a a = b b = tmp def doSwapWOVar(): a = 1 b = 2 a,b = b,a if name == 'main': t1 = timeit.Timer('doSwapWVar()', 'from main import doSwapWVar') t1.timeit() - t2 = timeit.Timer('doSwapWOVar()', 'from main import doSwapWOVar') t2.timeit() The execute time print 'Swap with create variable : ', min(t1.repeat(3, 3000000)) print 'Swap without create variable : ', min(t2.repeat(3, 3000000)) print 'Swap with create variable : ', min(t1.repeat(3, 3000000)) print 'Swap without create variable : ', min(t2.repeat(3, 3000000)) print 'Swap with create variable : ', min(t1.repeat(3, 3000000)) print 'Swap without create variable : ', min(t2.repeat(3, 3000000)) Result : Swap with create variable : 0.577996969223 Swap without create variable : 0.568822145462 Swap with create variable : 0.588035106659 Swap without create variable : 0.556537151337 Swap with create variable : 0.599809169769 Swap without create variable : 0.563858985901a,b = b,a 是Python 的一个典殿堂范例,完美展现出Python 语法的简单和优雅,但好处不只这样。我们使用timeit 来统计这两个不同的交换方法执行所需的时间,doSwapWVar是产生一个参数来暂存其中一个变数的值,另一个doSwapWOVar是直接运用Tuple的打包/解包来实现互换。我们从结果看到,doSwapWOVar 执行的效率明显比doSwapWVar 快。例子二・使用if 还是使用 try/except:我们先来看下面的程式码 import timeit def doCheckUsingIf(x): d = {1:None, 2:None, 3:None, 4:None, 5:None, 6:None, 7:None, 8:None} for i in range(1, x): if i in d: di = i def doCheckUsingTry(x): d = {1:None, 2:None, 3:None, 4:None, 5:None, 6:None, 7:None, 8:None} for i in range(1, x): try: di = i except: pass if name == 'main': t1 = timeit.Timer('doCheckUsingIf(10)', 'from main import doCheckUsingIf') t1.timeit() t2 = timeit.Timer('doCheckUsingTry(10)', 'from main import doCheckUsingTry') t2.timeit() print 'Check using if :', t1.repeat(1) print 'Check using try :', t2.repeat(1) Result : Check using if : 2.5136549472808838 Check using try : 2.1905322074890137 这次我们想要对一个dictionary 里面的key,指定一个跟key 一样的值。在Python 当中,如果指定值的Key 是不存在的话,系统就会返回错误。在doCheckUsingIf 当中,每次执行「d[i] = i」之前,都会用if 去先检查目标的key 是否存在于dictionary 里面。而doCheckUsingTry 当中,使用了try/except 去处理当「d[i] = i」错误发生的状况。从上面的结果看到的,使用Try/except 比使用if 所花的时间少。我们来修改一下刚刚的程式码 import timeit def doCheckUsingIf(x): d = {1:None, 2:None, 3:None } for i in range(1, x): if i in d: di = i def doCheckUsingTry(x): d = {1:None, 2:None, 3:None } for i in range(1, x): try: di = i except: pass if name == 'main': t1 = timeit.Timer('doCheckUsingIf(10)', 'from main import doCheckUsingIf') t1.timeit() t2 = timeit.Timer('doCheckUsingTry(10)', 'from main import doCheckUsingTry') t2.timeit() print 'Check using if :', t1.repeat(1) print 'Check using try :', t2.repeat(1) Result : Check using if : 1.8367161750793457 Check using try : 2.2109630107879639我们只修改了d 在初始化时的内容,减少了一部份的key。有趣的是,这次的结果跟刚刚完全相反,运行doCheckUsingIf 比doCheckUsingTry 快!确实是当进入except 的次数比较多的状况下,执行所花的时间会非常多,但这是否代表我们就不应使用Try/except 呢?其实我们在编写程式的时候,不应该容许返回错误那么多的情况出现,只要我们在编程时注意所处理资料的向性,使用Try/except 也绝对可以是高效的。例子三· 比对两个List import timeit def doCompareWithList(): a = range(30) b = range(10) for number in a: if number not in b: b.append(number) def doCompareWithDict(): a = range(30) b = range(10) dictB = dict.fromkeys(b) for number in a: if number not in dictB: a.append(number) dictBnumber = None b.append(number) if name == 'main': t1 = timeit.Timer('doCompareWithList()', 'from main import doCompareWithList') t1.timeit() t2 = timeit.Timer('doCompareWithDict()', 'from main import doCompareWithDict') t2.timeit() print 'Compare between with list :', t1.repeat(1) print 'Compare between with dict :', t2.repeat(1) Result: Compare between with list : 21.412750959396362 Compare between with dict : 12.298678874969482现在我们想要做的是比对一下a 跟b 两个List 里面的元素,当发现a 当中有b 没有的元素时,就把这个元素加入b 里面。在doCompareWithList 当中,用for 把a 的每一个元素代入成number,用if number not in b 去检查,我们要注意的是,这样要遍历整个b 才会知道number 是不存在的。所以当a 有大量b 没有的元素的话,遍历整个b 的次数会非常非常多。在doCompareWithDict 当中,我们在比对之前先用b 的元素创建了dictB 这个dictionary,然后用if number not in dictB 来比对,检查number 是否跟一个dictionary 的key 相同,所执行的速度是非常快,key数量的多少不会对这速度有太大的影响,所以我们看到范例的做法,doCompareWithDict 比doCompareWithList 效率超出了43%。以上就是本期瑞云学堂的内容,希望对CG感兴趣的朋友可以关注我们的微信公众平台,或者官方微博,下期瑞云小讲堂再见!

2015-02-09 16:38:52Python
小讲堂
Maya物体随机颜色教程案例二

背景: 很多情况下,在一个场景中我们很多类似的物体,有着相同的材质只是在颜色上有不同,比如一棵树上有上千的叶子,这些叶子的颜色有绿的,有黄的,有褐的。。。。。如果想把这各种颜色都能制作出来,我们就要一个一个给材质加载贴图,这样做很麻烦,效果也很低。 这个教程将告诉你怎么用一个ramp节点来控制多个物体的颜色。 原理: 使用arnold提供的aiUserDataColor节点使用每个物体的颜色受各的属性控制,再通过表达式从ramp上获取到随机的颜色赋给每一个物体。aiUserDataColor这个节点的作用就是给物体的shape节点上添加属性,通aiUserDataColor来读取这个属性的值以改变物体的颜色。 第一步:打开maya通过复制来创建很多个小球,创建一个面片pPlane1,一个aiSkyDomeLight来方便我们渲染观察。打开Hypershade窗口,并创建一个aiStandard 材质(aiStandard1)赋给所有的小球。渲染所下 第二步:选中所有的小球,打开脚本编辑器运行下面的脚本: string $sel[] = ls -sl; for($current in $sel) { string $shape[] = listRelatives -s $current; if(!attributeExists delightSurfaceColor $shape[0]) { addAttr -ln "mtoa_constant_Color" -at double3 $shape0; addAttr -ln "mtoa_constant_ColorR" -at double -p "mtoa_constant_Color" $shape0; addAttr -ln "mtoa_constant_ColorG" -at double -p "mtoa_constant_Color" $shape0; addAttr -ln "mtoa_constant_ColorB" -at double -p "mtoa_constant_Color" $shape0; setAttr -e -keyable true ($shape0 + ".mtoa_constant_Color"); setAttr -e -keyable true ($shape0 + ".mtoa_constant_ColorR"); setAttr -e -keyable true ($shape0 + ".mtoa_constant_ColorG"); setAttr -e -keyable true ($shape0 + ".mtoa_constant_ColorB"); } } 这些脚本的做用是,给所有的小球添加mtoa_constant_Color 属性。 第三步:运行下面的脚本: shadingNode -asTexture -n "ColorRamp" ramp; 创建一个叫做ColorRamp的ramp,这样创建出来的ramp是没有连接place2dTexture节点的,如果手动创建要记得打断与place2dTexture的连接。 第四步:选中所有的小球,运行下面的脚本: string $sel[] = ls -sl; for($current in $sel) { select -r $current ; pickWalk -d down; string $shape []= ls -sl; if(!attributeExists delightSurfaceColor $shape[0]) { expression -s "float $vCoord = rand(0,1);\nsetAttr \"ColorRamp.uvCoord.vCoord\" ($vCoord);\nvector $color = getAttr ColorRamp.outColor;\nmtoa_constant_ColorR = $color.r;\nmtoa_constant_ColorG = $color.g;\nmtoa_constant_ColorB = $color.b;" -o $shape0 -ae 1 -uc all ; } } 这个脚本的作用是给所有小球的 mtoa_constant_Color属性上添加一个表达式来随机读取ramp上的颜色。 第五步:运行下面的脚本,创建一个aiUserDataColor ,设置color attr Name属性为 Color; string $aidataColor = shadingNode -asTexture aiUserDataColor; setAttr -type "string" ($aidataColor+".colorAttrName") "Color"; 第六步:把aiUserDataColor 连接到aiStandard1的color属性上,赋给物体。渲染结果为: 第七步:改变ramp的颜色, 改变时间线上的当前帧(因为maya的表边式赋值是基于时间的),再次渲染为: 第八步:通过改变ramp的颜色取值,可以得到自己想要的随机颜色。 除了直接把aiUserDataColor连接到color上我们也可以把他连接到高光或者其它的颜色属性上,也可以把得到这个随机颜色通乘除节点或者加减节点和贴图连接到一起来改贴图的颜色。 以上就是本期瑞云学堂的讲授内容,讲述了如何在maya场景中控制物体的随机颜色的方法,希望感兴趣的朋友赶紧打开maya软件按照我们的例子一步一步操作一下,相信你会学到很多知识,请关注我们的微信公众号吧。下期瑞云小讲堂再见!

2015-01-12 15:50:43Maya
小讲堂
Maya物体随机颜色教程案例一

背景:很多情况下,在一个场景中我们很多类似的物体,有着相同的材质只是在颜色上有不同,比如一棵树上有上千的叶子,这些叶子的颜色有绿的,有黄的,有褐的。。。。。如果想把这各种颜色都能制作出来,我们就要一个一个给材质加载贴图,这样做很麻烦,效果也很低。这个教程将告诉你怎么用一个ramp节点来控制多个物体的颜色。原理:使用arnold提供的aiUserDataColor节点使用每个物体的颜色受各的属性控制,再通过表达式从ramp上获取到随机的颜色赋给每一个物体。aiUserDataColor这个节点的作用就是给物体的shape节点上添加属性,通aiUserDataColor来读取这个属性的值以改变物体的颜色。举例1:第一步:打开maya,在场景中创建一个面片pPlane1,一个小球pSphere1,并创建一个aiSkyDomeLight来方便我们渲染观察。打开Hypershade窗口,并创建一个aiStandard 材质(aiStandard1)赋于pSphere1。pPlane1使用默认材即可。渲染效果如下图: 第二步:在outliner里打开显示 shape节节的选项,并选中pSphere1的shaper节点: 第三步:ctrl+a 打开属性编辑器,在pSphere1的shaper节点上添加属性,属性名为:mtoa_constant_Color,属性类型为:vector 。截图如下: 第四步:在Hypershade中创建一个aiUserDataColor 并把连接这个节点到aiStandard1的color属性上 第五步:选择aiUserDataColor在属性编辑器中改变Color Attr Name为:“Color” 第六步:改变pSphereShape1的添加属性 mtoa_constant_Color 的值为 010 (渲染结果) 通过上面的几个步骤,我们就可以通过修改物体的上这个属性来改变物体渲染出来的颜色。这个就是aiUserDataColor节点的基本用法。如果一个场景中有上百个物体,就使用上一个例子的方法手动一个一个添加属性了,这时就要使用一些简单的mel脚本来加速我们的操作。以上就是本期瑞云学堂的讲授内容,讲述了如何在maya场景中控制物体的随机颜色的方法,希望感兴趣的朋友赶紧打开maya软件按照我们的例子一步一步操作一下,相信你会学到很多知识,请关注我们的微信公众号吧。下期瑞云小讲堂再见!

2015-01-06 15:46:41Maya
小讲堂
深圳市瑞云科技CIS设计分享第三期:LOGO标志设计结合

CIS颜色运用在LOGO中 品牌转型期LOGO结合口号LOGO结合公司文化不正确的使用LOGO方式: 今天小编和大家总结了一下公司CIS的大概情况的解析,希望对大家有所帮助哦!

2014-12-30 15:52:59CIS设计
小讲堂
深圳市瑞云科技CIS设计分享第二期:色彩搭配篇

底色:青色/邦迪蓝色+靛黑色间色:蓝绿色+琥珀色三次色:灰蓝色+银亮蓝色+藏蓝色■ 品牌色彩灵感:底色:源自和平,高科技,高效率间色:源自冷静,神秘,庄重三次色:来源激情,光荣,丰硕下一期预告:CIS颜色标志设计

2014-12-19 17:15:37CIS设计
小讲堂
深圳市瑞云科技CIS设计分享第一期:企业文化篇、标志篇
设计理念:大气、从容、优雅、简洁	RAYVISION图标的两道光,一代表RAY:从云端俯瞰,视线逐渐集中;一代表VISION:地表发出至天际,光茫逐渐扩张	RAY中文含义-瑞:人定胜天的光茫,从地表发出至天际,充满积极热情的能量;古代作为凭信的玉器,浑然温润,炯炯发光;引申为吉详,好预兆。	VISION中文含义-云:象征智慧与远见,是从云端俯瞰万事万物,前瞻未来,洞烛机先;为古代象征平和与繁荣的图腾(纹样),源于先人之自然(天界)崇拜,象征恒远的哲思与祝祷。	标识解析:我们的LOGO从字体到宽度,再到每个字母的弧度都是独家设计的哦!今天就先分享到这里,下次小编再带你一起欣赏解析专属瑞云的CIS设计哈!剧透一下第二期:色彩搭配篇
2014-12-15 16:15:01CIS设计
小讲堂

热搜关键词

搜索