转自:http://www.unrealchina.net/portal.php?mod=view&aid=225
近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易。这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLANET。本文中通过Demo Movie的制作,来看看实时CG的可能性。
一、对应现状的问题意识与先见之明相结合的实验性项目
近年来的实时CG的品质的提升特别显著,最新的影像出现使得CG影像的相关人员兴奋起来,不光是影像的美丽程度,还感到了这种技术的可能性。这次介绍的MARZA ANIMATION PLANET(后面简称MARZA )发表的Demo Movie“Happy Forest”,是把Unreal Engine 4(后面简称 UE4)作为影像制作的渲染器来使用的作品。
“用实时CG来做影像制作还是异端,当初公司内部的赞同者也很少”担任本作主管的今村環人氏说到。 尽管如此,在面向实现的行动上,不光是影像制作的输出,找出游戏和影像的中间部分的可能性,还有最能发挥出优势的时机的考虑。“有了这种情况下是否够好的茫然和不安感,探索着解决方案。在制作本案例时候感觉到的可能性,在成型,部署之前就都是秘密了(笑)“执行制作人内田治宏回顾到。
于是,由赞同了今村氏的技术指导佐藤男治以及技术顾问桥本善久(曾任Square Enix CTO兼Luminous引擎技术总监)3个人开始了项目。美术方面有少数人加入,接触了实时引擎的机能和概念,在离开了习惯的工具后,美术方面成了缺点,优势方面很少。花费了约1年时间,才将优点沉淀,变成了积极的因素。另外本项目的代号名【KURO】是使用MARZA惯例的颜色的命名 ,因为本项目一开始是非正式的,在接近黑色印象的同时,把平常用英文的表示写成日语KURO,体现出了异端的气氛。
二、实时CG的导入
实时CG技术的现状和影像制作的可能性
在项目开始前,首先是佐藤氏和协调员宇津也周一进行了实时CG的现状调查和验证。说到作为现在趋势的GPU的高速渲染方面,各种渲染器的RT模式和GPU渲染器也会进入视野。在项目上,先通过是MARZA的商业模式的变化,以及想到的影像内容以外的输出,选择以实时引擎中适用的内容为前提来进行调查。在UE和Unity间做了很大的比较。说到这次项目,当时预定是不加入软件工程师来进行开发,因为面向高端图形的功能更充实,而选择了UE4。"UE4所具有的过场动画编辑器Matinee,与大家所熟知的视频编辑的Timeline的是相当接近的,而一个主要的原因也是,当时的Unity并没有配备类似的功能。" 其他方面,Unity在2015年3月后发布的5.0版本在图形功能上有很大的提升,【充实的Asset Store】,【可买断的授权】,【日本市场的开发与用户的距离更接近】,【使用C#的定制性更高】等等,成为了与UE4不同的优点,今后也包含Unity的开发也在研究中。
导入实时引擎的影像制作,以视觉开发(Look Dev),光照(Lighting),渲染(Rendering),合成(Composite)为中心,产生了相当大范围的影响。因此,虽然敦促要越早的接触UE4,但美术师还是没怎么接触过,桥本氏回顾到。“预渲染有着已经稳固的管线,只要按照方法来进行工作就可以得到想要的表现。这个就像文化一样。和之前的流程不同,总之理想是通过让每个美术在更早的阶段通过实时引擎的特性来获得实感,再逆算出影像的制作在短时间内提高品质,但是,因为从习惯的文化中走出也会有人觉得麻烦,无法做到也是很自然的”(桥本氏)。
A UE4和Unity,有着各自的优点,就KURO来说,一开始就是只有设计师来构成的项目,当时的Unity4.x和UE4的图形能力有很大的差距,所以采用了UE4,但现在Unity5.0发布后,与UE4的图形差别缩短了,MARZA以后加大Unity的研究开发。
UE4的优点
从一开始,就是为高端硬件设计的游戏引擎,图形机能的标准很优秀
过场动画编辑和捕捉功能等等,影像制作的功能非常完备
基于节点的可视化脚本的蓝图(Blue Print)的实现,对设计师更体贴。
设计师完成工作更容易
Unity的优点
对应各种平台
网络上的资料很多
Asset Store上有各种资源销售
在日本有分支机构,技术支持更放心和开发者距离更接近
有买断模式
Unity5.0后,在图形上也有相当大的投入
B 工作流的比较
三、KURO 1.0
勇敢的踩过了所有的地雷
【KURO】经过了1.0,1.2,1.5 三个阶段,【Happy Froest】是【KURO 1.5】的官方命名,作为出发点的【KURO 1.0】,是与现在的方向性不同的作品。 ”因为平时是制作游戏片头的小组,使用实时引擎就面对了那样的制作感觉。总之,不考虑引擎不擅长的部分,演出方面就像以前那样努力就好。”加治佐興平指导说到。 结果上,虽然获得了一定的成果,但品质和引擎的特性并没有获得最大限度的提升。“按照桥本氏的建议,如果工具的调查和体验后加入到制作中是理想的,当时是把想作的内容做了修改,在各处加入了。”(今村氏)。结果UE4不擅长的要素也全部实践过了,与桥本氏的“预想的范围”相符。关于这点,加治佐氏回顾到“虽说有不合适的表现,但有多疼不摔倒是不会知道的,成为有领会感觉的摔倒”的,这次的不擅长的要素,有人的皮肤,特写,眼睛,头发,人群等大量资源的动作。相反的【KURO 1.0】中很容易表现出品质的,可以说是角色的盔甲。
【KUR01.0】的宣传得到的是“大家都努力了!辛苦了!难以称作热度感(苦笑)”今村氏说到。一方面确信可以这个经验得到了更好的作品。以公开后可以获得惊叹为目标,项目向新的追求的阶段前进。还有,【KURO 1.0】的长度是1分半钟,员工10名,开发时间3个月。
图1,2是MotionBuilder的工作画面,图2~7是 【KUR0 1.0】的场景镜头,使用UE4的实时CG影像的第一版,一边向和预渲染不同的做法挑战,一边正面对抗皮肤和群组等实时CG不擅长的要素,这些经验提起了更高品质的影像制作的士气。继续做成【KURO 1.2】。
四、KURO 1.2
能确实的跳跃的根基巩固
【KURO 1.2】是在回避CKURO 1.0所确认的“实时引擎的不擅长的部分”的同时,展示品质的验证项目。把这个成果在【KURO 1.5】中继承,而【KURO 1.2】并不是作为单体的影像作品而成立的,通过这个阶段,为了可以在更高一层技术的内容来发掘引擎的绘制品质,软件工程师松村知哉氏加入了。对石头,太闲,树木等,UE4擅长的要素进行精确的调查。Shader相关的是高橋聪氏通过【KURO 1.0】继续进行调查,另外一方面松村氏进行阴影,GI的渲染相关的调查。还有,平时松村氏也是要进行编码的,而这次并没有。成为核心成员的体制,4名员工,1个月的短期集中的项目。“虽然是最初就建议进行的调查,但考虑到【KURO 1.0】的“有领会感的摔倒”的是更实在的,结果上是成为很好的继承形式](桥 本氏)。
【KURO 1.2】的截图,这里是以照片真实的自然物为目标进行渲染方法,进行了基于物理渲染(PBR)的研究。
五、利用UE4特性的策划案
用【KURO 1.0】的经验摸索当前的解答
【KURO 1.0】完成后,首先是把策划案凑在一起的头脑风暴,进行讨论。其中,不加入角色要素的方案也被讨论了。使用UE4的回避要素是把角色排除,把细致的值得一看的背景放到前面突出的方法。“但是,也有这样冲击力会变弱的意见,成为挑战的,因为加入了角色,也有关于MARZA销售的角色动画的呼声,这里,使用UE4比较擅长的要素进行“龙”的制作”(今村氏)。最终,以【KUR0 1.0】为主导,采用了理解了实时引擎特性的加治佐氏的方案。具体的是,回避【KUR0 1.0】里不利于工作的人形角色和大量角色登场的人群,相反的推出可以容易表现品质的树木和岩石,角色也是类似岩石质感的龙为主角。
加治佐氏体验了实时CG的渲染速度,感觉到流程变革的可能性。也就是说,① 可以确认每天最新完成版品质的“日常”。② 包含演出的每个部分可以并行的进行工作。特别是后者,从已有的CG影像的制作流程(瀑布开发类型= 明确各部分之间的先后关系来推进,返工处理就很困难。)向允许返工的[敏捷型]转变的推动。就演出方面来说,受益于此,在最后阶段也可以修改拍摄技术和演出,“准备了舞台和外景,然后布置演员和相机来表演,就好像真实的电影拍摄的感觉” (加治佐氏说到)
担任本作设计的是梅田年哉氏,加治佐氏把传达印象的资料准备成画像,梅田氏绘制作为主角的龙的设计。之所以使用幼龙的设计,据说是因为小的角色可以更有效的进行景深的表演,某种程度上也是压缩工时的考虑。“设计工作用了大概10天,和其他项目并行的进行。通过最初的2,3天准备草图,再从中选取来获取感觉。具体的印象上,也有听过使用UE4要注意的地方,以确信的方式来推进工作”(梅田氏)。
【KURO 1.5】= 【HAPPY FOREST】
策划案 加治佐氏准备的策划书的一部分,有策划内容的细节和创意草图等
幼龙的设计 1 是绘制了很多版的幼龙的设计案, 2是 幼龙的特写,3 是表情集
舞台 1是 策划初期的草稿,有舞台意识的设计, 2 梅田氏绘制的背景布局 通过明暗的绘制来抓住气氛 3着色后的背景印象图
绘制了背景和幼龙的印象图,[KURO 1.5]的第一步
故事板,显示的故事框架,幼龙的表演方案动画师也有斟酌的余地
六、背景
补足故事世界观的严格的高端背景
背景的建模工作使用的是3ds Max。负责背景的八木啓敬氏是使用3ds Max建模的专家,为了可以高速的工作,采用了与UE4交接的工程是由高橘氏代替的体制。"有特写显示的部分的话,Texture的分辨率达到了4K,也没有使用Dispalcement,通过实际的网格形状显示细节,其中幼龙躲藏的树有600万多边形,用和预渲染一样的高模来做成"(八木氏)
实际的【KUR0 1.0】开发时,因为意识到是实时CG而限制了多边形数量,【KURO 1.5】不考虑实时性而重视品质,因此,前述的树木等是用线框显示边缘时密集到无法看清的状态。尽管如此在最接近镜头上细节还是不够,把苔藓网格用数组模板来组织,作为Instance配置来对应。
还有在UE4的实现上,准备了不受风力摇摆影响的花草来增加细节,高桥氏解释到“因为数量很多,如果全部动态更新是会相当痛苦的工作”。顺便说一下,背景的设计画中绘制的树根,据说因为建模后完成的非常好,有了急忙就在开始镜头就使用的小插曲。“当初并没有预定,在上面的背景的品质提升中试着使用了,实时CG在表演的自由度上压倒性提升这点,成为了这次制作方式的一大魅力”(加治佐氏)。
背景模型,1和2是3ds Max配置全体模型的场景,3 是作品中主要显示的倒下的树的模型的配置场景,做成了相当高的密度,4和5是UE4上的背景。故事的舞台。
七、幼龙
立足于【KURO 1.0】经验的角色制作
把影像制作的流程加入到实时引擎,很多的部分都会收到影响,但也有影响较小的部分。建模就是其中的一个,本作中也和通常预渲染的流程一样进行工作。用ZBrush进行造型,MARI绘制贴图的流程。“从ZSphere开始造型的比例检查,几天后进入向动画师提供模型的工作,就是这样的节奏感。开始的1周内,大体的Texture完成,移送到MARI里进行细节的加入”角色模型师鴻巣智氏说到。工作上的注意点是,游戏引擎中对应物体对象的数量导致绘制负荷加重是无法避免的,要尽量做成一个Mesh,还有Texture的张数不能增加过多,这次使用了2张4K的Texture。
皮肤的角质和鳞片的色调的表现,是利用MARI的Procedural Layer。对应部分改变缩放来绘制pattern。再把它作为Mask转写到 Sculpt 。其中的问题是,哪个位置要近似真实到什么程度。完成的幼龙就如你所见,加入细节感的同时可以感觉到可爱的来完成。“最初想要更加真实的质感,‘不对,这样要被咬死了!’导演这样说到(笑)‘,于是向更可爱的进行调整。使用UE4的质感设定也有不习惯的部分,但即使有渲染消耗也可以把握完成状况的反映是魅力所在”(鴻巣氏)。这个工作是在MARI和UE4两方面同时开始进行的。还有并行的是高桥氏使用Substance Painter来进行伤口和污浊的加入。因为着色的工作自身终究还是又UE4来完成的,Substance Painter是用来准备Occlusion等UE4所用Texture。“(高桥氏)。
使用ZBrush制作的幼龙的Sculpt,约700万多边形来构筑的
基于加治佐氏收集的画像。梅田氏制作的材质表。参考各种真实的动物
使用MARI制作的皮肤的Texture,绘制为4K大小的两张Texture
1是UE4上的幼龙的质感调整。画像是Shader Tree。2是在Viewport上的外观确认。
八、SETUP
与FBX文件格式的战斗
Rig的工作方面,是从无法Maya向UE4的数据传递,到什么的数据是无法传递的验证开始的。对两个工具间的FBX格式做了交换,确认了FBX的配置,光是可以随意的读取就很辛苦。Rigging美术师塙智洋说到。UE4能读入的只有Skin Cluster和Blend Shape,包含复杂关系的角色动画的Rig是没法直接传递的。【KURO 1.0】是基本的人形角色,因为外部的员工使用MotionBuilder来进行工作,Rig也是基于HIK的简单的东西。"这次成为了更加复杂的Rig,首先是把动画在场景里再现的挑战,例如受到骨骼的阶层内包含变形节点不能很好变形的制约, 当初读入时也产生了幼龙的面部爆炸这样的故障](加治佐氏)。
这样试行错误的结果,因为动画特殊化使得复杂的Rig不能在UE4正确的再现,采用了对简单的Bake用的Rig进行烘培在UE4中实现的流程,而FBX无法传递的数据,有Maya的Lattice和面部的Squash,“这些应该可以想办法克服的,这次因为时间的缘故放弃了,FBX的解释在每个工具引擎上都有微秒的差役,例如Scale的操作可以用UE4,也可以用Unity,有时间的话想确认一下”(塙氏)。
图1 是动画用的Rig,使用Maya的定制节点用控制器制作动画,为了动画的最适化,在骨骼阶层的构造方面较轻量。
图2 bake用的Rig,把控制器的动画向Joint和Blendshape进行bake。是FBX最适化的阶层构造
图 3是转化后的Rig,向UE4传递的只有Joint BlendShape以及几何体
九、视觉开发(Look Dev)
利用预渲染的经验来克服实时CG的弱点
UE4使用的是基于物理的着色模型,look dev的工作方面因为MARZA有过基于物理的工作的经历,很顺利的对应了。但是Shader的组合上,要研究每个节点的意义和组合方式,花费了相应的时间。“因为UE4准备的材质的参数比较少,可以比较清晰的来使用。和它相比,平常使用的Shader参数很多,最新的趋势这样的也不会有很多消费”(高桥氏)。
【KURO 1.0】中切身的感到UE4的弱点是SSS方面。在【HAPPY FOREST】中幼龙腹部的一部分有使用,SSS并没有具备必要的参数,用4K的贴图绘制也可以很好的完成等,“预渲染可以普通显示的部分,与之比较美术师说不定就可以感觉UE4有所欠缺的部分” (加治佐氏)。因为实时引擎和光线追踪是有差异的近似绘制,要去掉现况中的差异并不容易。
同样发生问题的部分还有眼睛的表现,实际上是复杂的反射和折射的表现,因为必须要对应表面的部分,使用了eye shader。“方法上,是以【Agni‘s Philosophy】和GDC发表的资料为出发制作了shader,我想也可以说是按照大致的AAA游戏的标准方法来进行的”(桥本氏)。
幼龙的Eye Shader,参考了GDC的资料构筑的
图1是 石头的Shader Tree。 是在UE4上的布局,配置设定为上面布满苔藓的设定
图 2是 树木的Shader Tree,Layer Shader的一个素材,使用了多个法线贴图,配合苔藓shader来显示
十、动画
实时CG动画数据的导入
动画的工作方面,实时CG并没有什么特别之处。只是在【KUR0 1.0】里,从动画的输出到UE4的实现是动画师的工作,这样就有了很大的负荷,也是效率下降的一个主要原因。在【HAPPY FOREST】里,这部分是由张中时氏协助解决。
在UE4的支持工作上花费了想象以上的时间很麻烦“项目结束后,发现如果不做导入动画的优化检测,就可以高速的导入,因为这次的动画内容不需要优化,我想如果项目中意识到就可以更高速的工作了”(张氏)。
通过配置实现工程的专门员工,作为动画师的山岸次郎氏可以集中动画工作,发挥出和预渲染工作同样的效率。”工作和以前一样,不过项目结束前的日程安排都是划时代的。但是,有勉强的坚持挑战的方面,也有相反的不得不挑战的方面,好坏共存的。后面也会去修正残留的问题,这也反映完成影像的可能性,期待今后的表现。“(山岸氏)。
在Maya里进行的动画工作。
十一、阴影
无法回避的渲染器性能
预渲染使用的是光线追踪(Ray Trace)渲染器,是通过计算光的路径得到结果的一种模拟器,而实时引擎不能进行基本光线追踪的绘制。对于静态资源,可以通过预计算光源bake,来获取高品质的结果,而动态资源就不能bake了。因此,像鼻子落在脸上的影子就很难获得好的效果。结果动态物体和静态物体的阴影显示有差别,不得不在设定上反复进行推敲。”我想把这些依赖光线追踪的部分,在UE4上可以看起来近似的进行设定是有必要的,但,实际比预想的要复杂...(苦笑)。而且在渲染结构上,无法获得光源的向量等,也有扩展起来感觉很麻烦的部分。因为源代码是公开,在公司内有也制作扩展版本的,这次因为时间原因而没有进行。总之,觉得实时引擎并不是渲染器的认识是很重要的"(松村氏)。因为光线追踪可以获得很漂亮的阴影效果,UE4配备了Ray Trace Distance Field Shadow的功能,调查后发现限制很多,本作中就没有使用。”因为这个是建筑物使用的功能,用在本作的大量的草和树叶的投影上也有缺点,说不定可以提高最终画面的品质,要是再有些时间就可以使用了“(加治佐氏)。
图1 在UE4上播放的过场动画
图2 UE4的Matinee Editor
图3 显示Gbuffer来做光源调整,确认每个要素的外观
图4 通过Viewport来确认后处理特效的调整,UE4的每个相机的后处理特效的设定
十二、总结
各种因素而提升效率的先驱项目
CG制作现场,现在主要还是用瀑布类型的制作流程,在如何让产品的可以返工,以及并行工作的实现上而煞费苦心。本项目通过实时引擎的使用,获得了更加敏捷的风格,使人吃惊的是,这个并不是训练而是自然的渗透。桥本善久氏不仅是曾制作过【Agni‘s Philosophy】的Luminous Studio的开发主管,也有很多项目管理方面的演讲。在本项目相关的开发中,他只进行了前者相关的说明。经过【KURO 1.0】,有了完全日常进行的反应,到了【KURO 1.5】就是确实的进行了。这样全体员工都可以实际感受每天的成果和变化来进行制作"(加治佐氏)。这样回避了大量的返工,可以亲眼看到每天画面的改进,在良性循环中进行制作。当然还要面对的问题是,要改变制作的“文化”和“意识”是很困难的。这点在【KURO 1.0】和【KURO 1.2】中就是很好的例子。“感觉美术师的意识在经过了半年后有了很大的变化,反映在工作的快速绘画上,通过感受其他员工的进展,感到了很强的凝聚力”协调员宇津野周一说到。还有本作的渲染时间(从游戏引擎捕捉画面)上,1台使用Quadro K2000的工作站(2013年的配置)大概是20分钟的时间,如果是最新的GeForce GTX TITAN X的话,大体上可以实时的看到输出了。
相反的浮现出来的问题有,特效方面很弱,特别是烟雾等的体渲染,也没有VFX的合成方法,引擎方面管理渲染的功能和管线也不完备等等。今后,包含对应这些问题的方法,MAZAR还要通过多年的计划来解决的样子。就像前面提到的,不再限于UE4,也不再仅仅是这次的试验的规模,会分配充分的人员来进行开发。
- 【HAPPY FOREST】用Unreal Engine4绘制实时CG影像
用Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易.这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLAN ...
- 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染
目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...
- 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二
AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound ...
- 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)
在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...
- 开源自动驾驶仿真平台 AirSim (1) - Unreal Engine
AirSim 官方Github: https://github.com/Microsoft/AirSim AirSim 是微软的开源自动驾驶仿真平台(其实它还能做很多事情,这里主要用于自动驾驶仿真研究 ...
- 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...
- 剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染
一.概述 1.1 数字人类的概要 数字人类(Digital Human)是利用计算机模拟真实人类的一种综合性的渲染技术.也被称为虚拟人类.超真实人类.照片级人类. 它是一种技术和艺术相结合的综合性模拟 ...
- 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它
目录 四.毛发渲染 4.1 毛发的构造及渲染技术 4.1.1 毛发的构造 4.1.2 Marschner毛发渲染模型 4.1.3 毛发的间接光照 4.2 毛发的底层实现 4.3 毛发的材质解析 4.3 ...
- Unreal Engine 4 系列教程 Part 9:AI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
随机推荐
- jenkins tomcat
tomcat增加用户配置: <role rolename="tomcat"/> <role rolename="role1"/> < ...
- 【[NOI2011]智能车比赛】(建图+spfa+坑爹精度)
过了这题我就想说一声艹,跟这个题死磕了将近6个小时,终于是把这个题死磕出来了.首先看到这个题的第一反应,和当初做过的一个房间最短路比较相似,然后考虑像那个题那样建边,然后跑最短路.(具体建边方法请参考 ...
- mysql在表的某一位置增加一列的命令
如果想在一个已经建好的表中添加一列,可以用诸如: alter table t1 add column addr varchar(20) not null; 这条语句会向已有的表t1中加入一列addr, ...
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
items为任意数组
- Flume-NG启动过程源码分析(三)(原创)
上一篇文章分析了Flume如何加载配置文件的,动态加载也只是重复运行getConfiguration(). 本篇分析加载配置文件后各个组件是如何运行的? 加载完配置文件订阅者Application类会 ...
- 不小心把服务器上的/usr/lib下的所有文件删除,恢复办法
手贱,使用root用户,rm -rf 多了一个"*"……导致了万分惊恐的悲剧,/usr/lib下的所有文件被删除…… 修复办法: linux系统是基于文件的,所以只要能拷贝到和原来 ...
- pandas的Series
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False) 首先介绍一下基本的: d ...
- review41
套接字是基于TCP协议的网络通信. 基于UDP
- 关于Javascript没有块级作用域和变量声明提升
Javascript是没有块级作用域的,在语句块中声明的变量将成为语句块所在代码片段的局部变量.例如: if(true){ var x=3; } console.log(x); 结果输出3. 再如: ...
- CentOS 6和CentOS 7命令区别
From http://www.cnblogs.com/bethal/p/5945026.html (1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(G ...