用Unreal Engine绘制实时CG影像
近年来,对实时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,也不再仅仅是这次的试验的规模,会分配充分的人员来进行开发。
最后,今年8月26日〜28日举办的CEDEC 2015上会有关于本作的制作工程的解说,有兴趣的话请务必要参加。
作为技术顾问参加【HAPPY FOREST】项目的桥本善久氏
- 用Unreal Engine绘制实时CG影像
转自:http://www.unrealchina.net/portal.php?mod=view&aid=225 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么 ...
- 【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎
在digital-tutors看到的一篇文章,很多初学者都有这样的疑问,因此翻译到这里. 原文:http://blog.digitaltutors.com/unity-udk-cryengine-ga ...
- WPF特效-绘制实时2D激光雷达图
原文:WPF特效-绘制实时2D激光雷达图 接前两篇: https://blog.csdn.net/u013224722/article/details/80738619 https://blog.cs ...
- C# 曲线控件 曲线绘制 实时曲线 多曲线控件 开发
Prepare 本文将使用一个NuGet公开的组件来实现曲线的显示,包含了多种显示的模式和配置来满足各种不同的应用场景,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器 ...
- Unreal Engine4 蓝图入门
微信公众号:UE交流学习 UE4开发群:344602753 蓝图是Unreal Engine的特点,用C++编程固然好,但是效率要低很多,主要是国内资料比较少,所以不太容易学习,用蓝图编程可以节 ...
- Unreal Engine4 蓝图讲解
UE4开发群:344602753 Unread Engine4的界面概况: UE4的效果可以说是比较好的,从整体架构上来说,和Unity3d的逻辑架构不太 一样,发现UE4不好上手,但是从理论上考虑, ...
- Unreal Engine4 学习笔记2 动画蒙太奇
动画蒙太奇出现的位置是在动画蓝图的动画图表和事件图表中,如下图 事件图表,可以看出在主线执行的结尾,如果is Punching 为true,则会执行一个我们自定义的Punch Event,用来播放动画 ...
- Unreal Engine4 学习笔记1 状态机 动画蓝图
1.动画蓝图 包含 状态机 包含 混合空间BlendSpace,即状态机包含在动画蓝图的"动画图表中",而混合空间可用于在状态机中向某(没)一个状态输出最终POSE: 动画蓝 ...
- 【UE4】如何获取/下载虚幻4(Unreal Engine4)源码
在官网中点击[获取虚幻引擎]可以看到,虚幻4完整源代码已经放在Github上,所以与其用百度搜别人的资源,当然是直接上Github下啊. 主要步骤如下: 注册一个Github帐号,这个没啥值得说的. ...
随机推荐
- Cocos2dx中零散知识点
cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...
- C++查询网站
1.C++外文api查询 http://www.cplusplus.com/ 2.https://isocpp.org/ 3.Juce学习 http://www.thinksaas.cn/favori ...
- 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
解决办法:在项目属性里设置“生成”=>“目标平台”为x86而不是默认的ANY CPU.
- Java Hour 11
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为11 Hour,请各位不吝赐教. Hour 11 ...
- JS中使用EL表达式
转自:http://blog.csdn.net/monkeyking1987/article/details/17146951 分两种情况 1. JS代码在JSP页面中, 这可以直接使用EL表达式. ...
- android获取string.xml的值(转)
为什么需要把应用中出现的文字单独存放在string.xml文件中呢? 一:是为了国际化,当需要国际化时,只需要再提供一个string.xml文件,把里面的汉子信息都修改为对应的语言(如,English ...
- Android Studio 一些使用经验
一.Mac或Win 7 配置环境,以gradle为例 (1).可以在这里找gradle下载,或者去官网啦 Mac添加环境变量: 1.启动Terminal终端 2.输入cd ~/ 进入当前用户的home ...
- Hark的数据结构与算法练习之希尔排序
算法说明 希尔排序是插入排序的优化版. 插入排序的最坏时间复杂度是O(n2),但如果要排序的数组是一个几乎有序的数列,那么会降低有效的减低时间复杂度. 希尔排序的目的就是通过一个increment(增 ...
- finally 语句
package unit5; public class FinallyDemo { int no1,no2; public FinallyDemo(String[] args) { try{ no1= ...
- 在Linux下搭建SVN服务器
svn不仅仅可以用于程序开发,还可以做很多事情,例如备份文档. CentOS下:安装 这样同一台服务器便可以运行多个svnserver了 检查端口 注:如果修改了svn配置,需要重启svn服务 -j ...