用途动画与渲染还有玩一些大型游戏,配置c4d怎么渲染动画样才好

讨论个有意思的,顶级游戏的画面好,还是顶级动画电影的画面好?
以下这张是最新的极品飞车19中的截图和真实照片的对比,右边两张是极品飞车19的实时演算画面,左边是真实照片。以下这张是目前画面技术处于国际领先水平的动画电影《疯狂原始人》的截图。无论从色彩、光影和细节上来说都无可挑剔。再来是日本动画画面技术的最高结晶《生化危机:诅咒》CG技术相当成熟,画面表现力亦非常出色。
[&此帖被zjzyy111在 11:53修改&]
这些回帖亮了
毫无悬念被电影完爆,游戏是要照顾大部分人机器配置的。
而且你比的方向就有问题,拿动画电影比,动画不是做的逼真就好,所有动画电影都是故意做的去真实化。
动画电影也可做的很真,但做的这么真为什么我不直接看真人?最终幻想就是例子,做的太真,反而没人看。
真比技术你可以看看妇联x战警之类的电影,实拍+特效刷爆一切,里面的特效画面没一个游戏能比的。
游戏cg放在大屏巨幕上就能看出和电脑屏上的差距了
生化危机诅咒画面很一般啊,只是动作设计之类的还不错。
引用2楼 @ 发表的:
生化危机诅咒画面很一般啊,只是动作设计之类的还不错。
看和谁比,你可以说说画面比他更出色的动画片。
引用3楼 @ 发表的:
看和谁比,你可以说说画面比他更出色的动画片。
老美随便一部大厂家的动画都能秒啊,游戏动画差宣传cg太远,宣传cg基本比动画电影好一点。
发自手机虎扑 m.hupu.com
引用4楼 @ 发表的:
老美随便一部大厂家的动画都能秒啊
肯定还是电影吧
电影一帧渲染几个小时。
毫无悬念被电影完爆,游戏是要照顾大部分人机器配置的。
而且你比的方向就有问题,拿动画电影比,动画不是做的逼真就好,所有动画电影都是故意做的去真实化。
动画电影也可做的很真,但做的这么真为什么我不直接看真人?最终幻想就是例子,做的太真,反而没人看。
真比技术你可以看看妇联x战警之类的电影,实拍+特效刷爆一切,里面的特效画面没一个游戏能比的。
引用8楼 @ 发表的:毫无悬念被电影完爆,游戏是要照顾大部分人机器配置的。
而且你比的方向就有问题,拿动画电影比,动画不是做的逼真就好,所有动画电影都是故意做的去真实化。
动画电影也可做的很真,但做的这么真为什么我不直接看真人?最终幻想就是例子,做的太真,反而没人看。
真比技术你可以看看妇联x战警之类的电影,实拍+特效刷爆一切,里面的特效画面没一个游戏能比的。
游戏改编电影你必须做的和游戏画风一样啊,生化和最终幻想游戏都是逼真向的,你电影来个卡通总不行吧。
发自手机虎扑 m.hupu.com
引用5楼 @ 发表的:
上古卷轴ol宣传片强于超能陆战队强于生化危机
发自手机虎扑 m.hupu.com
引用10楼 @ 发表的:
上古卷轴ol宣传片强于超能陆战队强于生化危机
怎么又扯到游戏宣传cg上了,不就在动画领域比么?他让你拿欧美画面比生化诅咒好的动画片,你至少应该拿贝奥武夫之类的出来啊,至少类型对上啊
发自手机虎扑 m.hupu.com
没有可比性,动画电影完秒游戏。
渲染程度像素数量乃至贴图材质之类的硬性参数完全不在一个级别上。
以及对于游戏,除了那些完全以实时演算代替CG的游戏之外,其他游戏的CG和实时演算制作根本不在一个水平上。CG或许跟动画电影有的一拼,实时演算肯定是不要想了,没可能。
引用9楼 @ 发表的:
游戏改编电影你必须做的和游戏画风一样啊,生化和最终幻想游戏都是逼真向的,你电影来个卡通总不行吧。
真人实拍+特效的生化危机大卖,纯特效的最终幻想扑街。
引用13楼 @ 发表的:
真人实拍+特效的生化危机大卖,纯特效的最终幻想扑街。
圣子降临和生化危机诅咒卖得还行吧,而且我觉得生化真人版除了第一部之外都很垃圾啊,比生化诅咒差多了。
引用11楼 @ 发表的:
怎么又扯到游戏宣传cg上了,不就在动画领域比么?他让你拿欧美画面比生化诅咒好的动画片,你至少应该拿贝奥武夫之类的出来啊,至少类型对上啊
为什么要类型对上?此画面就是疯狂原始人之类的哪个不爆他?再说我说的本来就是cg强于好莱坞动画电影强于生化危机这种动画,说cg没错啊。
发自手机虎扑 m.hupu.com
引用15楼 @ 发表的:
为什么要类型对上?此画面就是疯狂原始人之类的哪个不爆他?再说我说的本来就是cg强于好莱坞动画电影强于生化危机这种动画,说cg没错啊。
比,发错了字。
发自手机虎扑 m.hupu.com
引用15楼 @ 发表的:
为什么要类型对上?此画面就是疯狂原始人之类的哪个不爆他?再说我说的本来就是cg强于好莱坞动画电影强于生化危机这种动画,说cg没错啊。
顶级游戏的宣传CG动画肯定比动画都强,拿这个来和生化危机比没意思,好莱坞动画也比不过顶级游戏的宣传CG动画。你一开始拿好莱坞动画来比生化就是了,拿上古ol的CG来比,好莱坞自己的动画都没一个比得过。
引用17楼 @ 发表的:
顶级游戏的宣传CG动画肯定比动画都强,拿这个来和生化危机比没意思,好莱坞动画也比不过顶级游戏的宣传CG动画。你一开始拿好莱坞动画来比生化就是了,拿上古ol的CG来比,好莱坞自己的动画都比不过。
毕竟烧钱,效果自然就出来了
发自手机虎扑 m.hupu.com
引用17楼 @ 发表的:
顶级游戏的宣传CG动画肯定比动画都强,拿这个来和生化危机比没意思,好莱坞动画也比不过顶级游戏的宣传CG动画。你一开始拿好莱坞动画来比生化就是了,拿上古ol的CG来比,好莱坞自己的动画都没一个比得过。
上古ol是blur做的,blur也参与一些电影特效和广告制作,它只是一家大的工作室,论CG技术的积累,和迪斯尼皮克斯梦工厂不是一个级别的,至于日本CG,和好莱坞几大动画公司的差距更大
我不玩游戏,不过大学的时候看舍友在主机上玩的游戏画面确实超给力
您需要登录后才可以回复,请或者
881人参加团购238.00元&599.00元
409人参加团购169.00元&299.00元
384人参加团购199.00元&329.00元
4842人参加团购588.00元&969.00元
153人参加团购219.00元&899.00元
586人参加团购199.00元&399.00元
285人参加团购779.00元&1499.00元
457人参加团购249.00元&569.00元
1136人参加团购499.00元&849.00元
558人参加团购199.00元&699.00元
939人参加团购229.00元&799.00元
266人参加团购239.00元&899.00元这部国产3D动画获虚幻引擎官方推荐!实时渲染成趋势?
一部好的CG动画背后注定是要耗费大量的时间和金钱。
长久以来,动画行业中不少人都在寻求在不降低制作质量的情况下,加速整个制作过程的解决办法。与此同时,能实现实时渲染的游戏引擎正渐渐引起动画人的关注。
日,日本动画公司Marza在Unite 2016大会现场公布的一部以unity引擎打造的短片动画——《The Gift》。
《The Gift》
Marza的社长前田雅尚介绍,游戏引擎制作的方式相比传统的制作流程缩短了25%的时间,同时制作成本也得到大幅度降低。《The Gift》不是第一部用游戏引擎制作的动画,但它的高调亮相无疑让不少动画人对游戏引擎开发动画信心大增。
无独有偶,第一部号称完全用UE4渲染输出、名为《Zafari》的动画片在近期登场。其视觉特效师Dozoretz评价:“当我向电影发行公司争取这笔生意的时候,我告诉他们我会以电视片相对羞涩的预算,给到他们‘近皮克斯’的画面品质。”
《Zafari》demo
相信学术趴的忠实读者们,也看过我们为你解读的《游戏中的实时渲染技术即将颠覆CG动画制作?》如你所见,尽管使用游戏引擎参与动画制作热潮也是在近年才兴起,但是随着科技的进步与渲染技术的成熟,这种动画制作方式赢得了不少製作者的好评。
显然地,国外在此类动画尝试上表现更胜一筹。囿于技术与成本上的限制,在目前的国内动画市场上,我们鲜少发现优秀的由游戏引擎制作的动画。
但这也并不代表没有。
在今年9月《Zafari》亮相的同时,一部由灼华互娱历时三年打造、斥资千万制作的国产TV动画在腾讯视频上线。它就是——
《地灵曲》
动画目前上映不满一周,收获了不少肯定。
从目前仅播放的三集中我们就不难发现,他们正向两大难题宣战。
这是一部欲以民国时期神秘而精彩的倒斗故事展现华夏美学,弘扬中华文化的3D古墓冒险题材的动画。众所周知,近几年以古墓探险为题材的影视作品不胜枚举,但随着试水市场的人增多,作品也有了粗制滥造的苗头。即便是《盗墓笔记》、《鬼吹灯》等大IP的改编作品都未能尽如人意。
像《盗墓笔记》,其中的一幕爆炸场景被吐槽为“5分钱特效”:
而有忠实读者还仔细地分析《寻龙诀》中的风水错误:
因此,做一部想要让观众满意,还没有小鲜肉加持的3D动画,《地灵曲》需要尽可能还原精确的倒斗故事历史感,更要吸取教训、努力呈现不尬的动作特效,难度不可小觑。
以下是《地灵曲》的定档预告:
《地灵曲》定档预告
从已经发布的内容来看,《地灵曲》的故事背景是民国初年,围绕着民间倒斗三大世家以及满清遗裔国清会之间相互角力、明争暗斗而展开剧情。
第一集便以一句“华夏龙脉始于昆仑,终于归墟,得九州之险,藏八方地灵”引出故事庞大的世界观,倒斗三大世家之首——张家大少爷张天启率先登场。
作为动画的主角,人物角色模型的美型和精细程度在很大程度上影响着观众的观影感受。《地灵曲》中人物的五官风格比较偏写实,并没有追求唯美。所以对于一些观众来说可能不是很惊艳,但每个角色都有较高的五官辨识度。
这个看似玩世不恭却极富冒险精神的男主毫无主角光环,也不会什么武功,在家族叔辈的带领和保护下才逐渐开启地下迷宫中的奇幻冒险。
阴森的场景渲染出阴森的气氛
场景概念图
一路上遇到的各种精细巧妙的机关层出不穷:
还有不少的奇珍异宝:
片中对中国风水文化的传承和阐释也成为《地灵曲》的一大亮点。风水文化源远流长,理论复杂而神秘。但《地灵曲》的编剧在动画中,对方位判定还是生克组合的台词、动作上都有了较为严谨的还原。
机关设定图
倒斗的紧张刺激、男女主的情感纠葛加上世家之间的矛盾冲突,也为这个古墓探险故事增色不少。但真正会让你关注到《地灵曲》的可能还是因为它在技术上的大胆创新。《地灵曲》幕后团队灼华网络蛰伏三年,在动画的画面呈现上下足了功夫。
《地灵曲》中大规模采用了真人动作捕捉和口型捕捉的技术,更邀来成家班第三代弟子 “ paco” 加入制作团队,还原角色打斗场景,赋予人物动作更充足的真实感。
同时团队还也斥巨资研发了人物的实时表情捕捉技术,还有很多细微的小动作来丰满人物形象,很大程度上解决了以往国产三维动画人物表情死板、动作僵硬木讷的问题。
尽管在一些大幅动作场景中,还是存在一下运动规律不准确、重量感表现不佳、以及表情变化依旧不够生动自然等问题。但瑕不掩瑜,一些近距离打斗场景依然会让人惊艳,有不错的表现力。
有兴趣的同学可以点击以下测试视频欣赏《地灵曲》中精彩的打斗:
《地灵曲》测试片段
这部动画还使用了与众不同的制作方式。一般而言,我们熟知的三维影视动画制作软件是MAYA,而《地灵曲》则是使用了UE4虚幻引擎来制作。对于国内动画制作而言,这是一个比较创新大胆的尝试。
这里先科普一下UE4和传统三维动画制作的区别。
传统的三维动画,通过建模、绑定、材质、调动画、打光、特效、渲染等步骤来完成。这种模式的一个缺点——所有这些步骤的最后完成效果,需要渲染合成以后才能检验。而这个渲染的过程又十分缓慢,对于中小工作室来说,反复修改镜头动作和灯光特效等是很费成本的一件事——因为你只要改了前期的某一个步骤,就意味着后面的渲染合成都要重新来过,这就导致前期检查并不一定能找出问题,而找出问题以后的修改又步骤繁琐。这可能也是一些人力财力不足的动画公司无法在保证更新速度的同时又保证质量的原因之一。
而UE4的常规用途是用来做游戏,它制作动画的不同之处,主要在于渲染。
玩过大型游戏的人都知道,人物在游戏场景里行走,身上的光照效果是随着游戏里的光源变化的。因为游戏不像电影那样单方面输出,它是要求玩家与场景有交互,这就需要实时渲染。UE4的程序是一种开源的方式,允许实时修改,允许热更新。在制作动画的时候,可以通过实时演算的方式,立刻看到光照、特效的效果,可以更方便地对前期进行调整,比如觉得某一处的动作设计得不好,就不需要全部重头来过,只需要单独修改动作,再放回渲染好的场景里就可以了。
而开发过不少3A级大作的UE4优点不仅如此,它除了能够做到预渲染,还能制作出画面效果精良的动画。尽管UE4的动画效果目前再怎么也达不到传统方式制作的顶尖CG动画的效果,但如果投入足够的话,制作TV动画肯定是绰绰有余的。
动画电影毕竟片长有限制,返修的工作量有限。但系列动画片想保证好的效果,不可能这么折腾。而上述的那些优势使得UE4很适合制作系列动画片。
使用了UE4渲染的《地灵曲》在镜头运用上就很有特色。制作人在镜头运用上十分大胆,推拉摇移一应俱全,相信作为观众也会看得很过瘾。
这种镜头变化在别的三维动画中较为少见,但《地灵曲》的制作有了UE4参与,使得容错率高了,可修改性高了,可以玩的花样也多了。传统动画这些镜头应该都是分镜阶段设计好的,后期如果实拍效果不佳也没办法反复修改。但用UE4则可以做更多尝试,给了创作者更多的表达空间,也能给观众带来更丰富的体验。
随着二次元文化的发展与扩大,ACG之间也有了更密切的关联。在这种前提下,将能够提高渲染效率的游戏引擎技术引入到动画制作中也是喜闻乐见的。但也不代表这项技术就真的完全适合TV动画制作了。事实上,这种技术最大最直接的困难就是——前期工作费力费钱。灼华互娱在这个项目耗费三年投资了数千万,基本上等于做了一个游戏,一般小工作室承担不起这个人力财力和时间,门槛是实在有点高。
《地灵曲》团队工作照
而另一方面,使用游戏引擎制作动画,出发点是为了提高效率;但效率不等于省事,未来在两者的结合上制作者还需要考虑在保证品质的前提下尽量提高制作速度。
即便在渲染上为动画制作提供效率,但动画制作中整合与输出之外的很多环节上,游戏引擎仍未能胜任。以Unity引擎实时渲染动画《Adam》为例,它背后的制作者们对游戏引擎了如指掌,但在处理动画中的人物动作、毛发、布料时,他们都会选择在相应的专用软件中完成,最后才在引擎中合并资产,整合输出。
但总的来说,《地灵曲》是一个很大胆也很良心的尝试,从它身上能够看出“游戏引擎+动画”两者结合的潜力。或许待投资足够,整个作品系统完善了,技术相互渗透,规模效应产生以后,成本会慢慢降下来,未来也将会有更多高效高质的作品诞生。
在刚看到这个国产动画时,动画学术趴感到很好奇:引入游戏引擎的动画制作和传统CG制作有何区别?游戏引擎还将为动画制作带来什么?相信读者们也会有同样的疑惑,为此,动画学术趴(以下简称学术趴)特意专访了《地灵曲》制作团队灼华互娱CEO张贤华。
以下为访谈实录
学术趴:这个项目的想法是怎么诞生的?为什么采用虚幻引擎制作?
张贤华:灼华在做上一款游戏的时候就已经构建了庞大的世界观和一些重要的人物和故事,我们觉得这个这个故事非常棒就希望能够通过动画形式将他表现出来。
《地灵曲》人物设定-张北川
《地灵曲》人物设定-素玄音
选用虚幻引擎制作主要有三方面的考虑:
首先如果采用传统动画方式对于我们团队来说没有任何的优势,在立项之初市场已经有了许多成熟和优秀的动画公司,比如玄机、若森等等。如果我们凭空切入这样的一个市场的话可以说是毫无胜算。
其次我们需要找到切入点,我认为动画影视给观众第一感官就是画面品质,所以我们希望通过画面效果作为市场的第一个突破口,所以前期通过UnrealEngine做过非常多的测试,结果也印证了这个UE4的成品品质非常好而且还具有很高的提升空间。UE4在动画制作上相比传统制作方式具有一定的优势。
《地灵曲》分镜图
由于我本人就是一个技术向的宅男,早在很多年前就对unity、UnrealEngine 、CryEngine有过深入研究,而且在多年的从业过程中一直有一个执念,希望可以通过认知和跨界的技术积累尝试做一些事情。在灼华计划去制作动画项目的时候,就恰好在技术发展的时间点上。
多年前在Cinebox上做过尝试,它代表的是上一代的标准,显然不能符合我们对高品质内容的需求。UnrealEngine4代表着新技术、新标准,而且EPIC的工作人员非常努力且高效,所以我觉得是这个时代最好的平台工具。
学术趴:它的生产流程以及与标准CG流程有何不同?成本、人员配置有何差异?
张贤华:我对团队的第一要求就是推翻之前动画制作的认知和标准,比传统流程我们需要跨越更多的软件平台制作数字资产。因此我重新制定了制作流程,而且不断的迭代优化。因为流程的不同环节也不同,所以我们招募后重新培养了符合新流程的团队成员。影视工业化流程不是从0到1,而是0.1-0.9之间每一步都需要一步一个脚印不能跳过。
学术趴:项目制作过程中你们遇到的最大困难是什么?
张贤华:太多太多了,因为UE4的定位是一个游戏引擎更多的功能就是为游戏化而设计的,所以影视化方向在国内可以说是真空区。所以要使用UE4进行影视创作最基础的就是在他的基础上做相应的二次开发工作,整个的基础研究和基础开发工作差不多花了一年时间,并且现在还在继续投入。
所以本上来说首先面临的就是人才问题,就像前面讲到,我们是走一条新的路没有参照物,而市场上ue4人才本来就少,就算有感兴趣的由于没有影视化的先例也不看好,所以在这个市场环境下我牵头成立了一个核心研发组,主要工作就是对UE4进行深度研究并且做二次开发与其他工具实现无缝结合,这个研发组目前已经有20多人,里面还有部分外籍同事。
学术趴:相比“传统”的方法,您认为用虚幻引擎做动画的优势是什么?
张贤华:科技技术是推动一切的生产力。实时渲染带来的是效率高,创作的时候直观可视化。虽然GPU渲染现在也非常流行,但是引擎的优势还是非常明显的。比如当导演需要看到一个镜头修改的时候,他不必等到第二天的早上,马上就能看镜头修改结果。
归功于NVIDIA的黑科技,我们团队与Gameworks开发人员通过一年多的改进和探索,目前我们主角的毛发达到了100万根在UE4里实时可互动。这在传统的流程里是不可想象的,这就是科技技术带来的变革。这也是我们团队一直秉承的核心理念:以技术研发推动的内容创造公司。
团队工作照
效率、成本、品质,我认为目前我们整合UE4的整套工业化制作流程可以达到在同等品质下的效率更高,成本更低。
举个最直接的例子,实时渲染,这个优势给我们带来的效果就是可视化,并且可以在最短的时间进行调整之后快速生成新的画面,不必像以前为了一个镜头的修改可能你需要等一天。
《地灵曲》设定
学术趴:使用类似虚幻引擎这样的实时渲染技术制作动画,会成为一种行业趋势吗?你们怎么看它的未来?
张贤华:我始终认为技术是革新的根本,技术的革新创造的就是未来。
其实目前市场上已经有一些案例了,拿最近上线的猩球崛起3来说,这部作品在制作过程中已经大量使用UE4来制作previe,我记得前不久你们也有一篇稿子专门讲到实时渲染。好莱坞是电影工业的引领者,在整个的制作工艺上要能够学习,跟随并且寻找机会在一些领域完成超越。
《地灵曲》在官方客户端上亮相
《地灵曲》很有幸成为虚幻官方首次推荐的CG动画项目,这足以证明这部作品在完成度和品质层面是已经达到一个非常高的标准,这也能印证虚幻官方也看到了影视化方向的潜力,在内容制作方和官方的努力下我相信会有越来越多的项目和团队来使用新的技术。
学术趴:对于那些想用虚幻引擎制作动画的团队和个人你们有什么建议?
张贤华:我个人不太建议没有一定资金和研发实力的团队太盲目的使用新工具,因为从研究到使用这个过程的坑太多了,消耗十分巨大。如果有一些小团队或者个人希望尝试那我会建议他们与灼华合作,毕竟大家时间成本和机会成本都是十分有限的,况且我们是一个完全开放的平台,如果你有好的创意想法,或者有研究和探索精神我们全都敞开怀抱欢迎。
制作团队合照
你对使用游戏引擎制作动画有什么看法?你会去选择这样的制作方式吗?欢迎大家踊跃留言参与讨论!~
本文系网易新闻·网易号“各有态度”特约内容
———————————————
———————————————
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点关注游戏葡萄
微信扫描二维码关注
游戏葡萄公众号
的其他文章
的其他文章
的其他文章
TalkingData
的其他文章
的其他文章
的其他文章
的其他文章
的其他文章
的其他文章
All Rights Reserved
赞助Sponsor
赞助Sponsor
阅读Articles
数据库Data
数据库Data
招聘Recruitment
联系我们Contact
友情链接Links
游戏葡萄订阅号动画和文本渲染
此内容是该系列 # 部分中的第 # 部分: 使用 HTML 标记来补充 canvas,第 2 部分https://www.ibm.com/developerworks/cn/views/global/libraryview.jsp?series_title_by=使用+html+标记来补充+canvas敬请期待该系列的后续内容。此内容是该系列的一部分:使用 HTML 标记来补充 canvas,第 2 部分敬请期待该系列的后续内容。
简介在这个由两部分组成的
中,我们讨论了如何让 canvas 与 HTML 元素强强联手,共同构建丰富的 Internet 应用程序。在本文中,我们将回顾选择 canvas 或以 HTML 为中心的架构的标准,了解动画考虑事项和克服文本渲染限制的方法,也就是说,通过将 HTML 和 canvas 元素分层,为视频游戏奠定基础,从而利用每一种方法的优势。 显示了本文中太空射击游戏示例的基础。图 1. 将 HTML 和 canvas 元素相结合的样例应用程序您可以
本文中使用的示例的源代码。架构在使用大量图形组件、交互式体验和可视化效果构建应用程序时,重要的是要了解可用于该任务的工具。本节将探讨如何使用 HTML 实现 UI 组件,以及如何使用 canvas 实现动画组件。用户界面尽管 canvas 可能具有令人印象深刻的图形性能,但它并不总是实现丰富 UI 的最佳选择;HTML 元素可能更适合。很多丰富的 Internet 应用程序包含各种部件,每个部件都有不同的用途和要求。将 canvas 和 HTML 元素强强联合的混合方法可以最有效地实现您的目标。样例应用程序利用了
中的分层技术。canvas 主要负责实时图形和动画,而几个 HTML 元素将会覆盖在上面,用于构成各个 UI 组件。图 2. 将 HTML 元素放在 canvas 上面一层在决定最佳方法时,需要考虑应用程序各部件的需求。一般说来,要求具有较高的用户交互性、但又不需要实时更新的 UI 的组件通常最适合用于 HTML 层。这些元素可能包含文本、超链接和表单元素。例如,尽管样例应用程序可能主要是一个 canvas ,它拥有一个仅仅使用 HTML 标记的聊天窗口组件。这如 所示。有了简单的 HTML 标记和 CSS 规则,您可以轻松创建交互式 UI 组件,比如文本框、滚动条和按钮。既然浏览器提供预置的组件,为何还要花费数小时试图模仿 canvas 中 UI 组件的外观和行为?图 3.
用 HTML 实现的聊天窗口在聊天窗口中,不涉及任何动画,对内容的更新相对不频繁(每当有新聊天项目时才更新)。因此,这是一个 HTML 实现的好的候选对象。 相反地,canvas 为以下内容提供一个更好的解决方案:必须频繁更新(例如,每毫秒更新一次)需要一个恒定的动画周期只需要很小的用户交互性动画动画内容在网站中变得越来越普遍。无论您只是为了让一个网站有生气而使用简单动画(比如导航转换),还是想要提供更高级的基于浏览器的游戏,都有多种选择任您支配。通常,可以使用 HTML/CSS 模型完成相对简单的动画,使用 canvas 就有些过了。像 jQuery 等许多库都提供了便捷的工具来提供一致的跨浏览器输出。将这些库中的工具与一些 CSS 知识结合起来,您就可以大幅减少完成动画的工作,即使这些动画实际上是相当复杂的。在示例中, 中的太空飞船根据玩家的控制进行移动和旋转。这一行为只能使用 HTML/CSS 动画实现。不要求用户对 canvas 有任何了解。图 4.
动态的太空飞船元素当需要扩展时,HTML/CSS 动画模型开始分解。同时动态化大量元素会给浏览器带来很重的负担,这会降低应用程序的整体性能。每次重新定位一个 DOM 元素时(对于平滑的动画来说,这肯定每秒发生多次),浏览器的布局引擎需要大量开销才能重新计算和绘制 DOM 层次结构中的元素。增至数十、数百或上千元素之后,即使在现代计算机上也会带来相当大的性能消耗。canvas 上的文本渲染文本到屏幕上对于任何网站来说都是一项非常基本的任务,我们可能都不太注意其后台运作。当您希望屏幕上包含一些文本时,只需在两个 HTML 元素间标记(可能还有一点 CSS)之间输入文本即可,其余工作都会由浏览器接管。但是对于 canvas 来说,情况却并非如此。当您希望使用 canvas 渲染文本时,有几个基本的工具可用。它们几乎支持工作所需的一切基本功能,但在开发 canvas 应用程序时,却没有提供太多的易用性。基本原理canvas context 对象提供了您在渲染文本时可以设置的各种属性。它还提供了一个功能来执行实际渲染。这些属性包括:context.font设置 context.font 的值能够让您控制要渲染文本的字体类型、大小、粗细和样式。分配的值是各种选项拼凑在一块、由空格分隔的一个字符串。这里的输入格式有点儿难办。例如,每次更新值时,都必须在该字符串中提供字体类型。 显示了小字体的设置。清单 1. 设置小字体context.font = 'italic 8px Arial';
context.fillText('Variety is the spice of life!', 0, 50); 显示了大字体的设置。清单 2.
设置大字体context.font = 'italic 20px Arial';
context.fillText('Variety is the spice of life!', 0, 50);用户不可能仅设置字体一次,稍后,用户可以根据希望渲染到屏幕上的文本来调整其他选项。修复这一问题的方法会在稍后加以讨论。 context.fillStylecontext.fillStyle 用于各种 canvas 操作;对文本设置该值是为了控制要渲染到屏幕上的字体颜色。指定值的输入格式遵从 CSS 输入格式。以下全部是有效的输入示例:基本颜色:'red'、'blue'、'green',等等16 进制值:'#rrggbb''rgb(r, g, b)''rgba(r, g, b, a)'例如,要设置 fillStyle,请使用 context.fillStyle = 'red';。context.fillText()调用这一函数可将文本渲染到 canvas 上。它接受以下参数:(string) text:要绘制到 canvas 上的文本。(float) x:绘制文本的 x 的大小。(float) y:绘制文本的 y 的大小。[optional] (float) maxWidth:试图控制文本所需的最大宽度。如果可能的话,请将使用一个水平浓缩程度更高的字体,或者更小的字体。其他工具您可以使用的另一个重要工具是上下文对象的一个函数,名为 measureText(),它接受一个字符串参数。结果是一个包含所提供字符串的度量尺寸的对象,如 清单 3 所示。清单 3.
确定文本字符串的宽度context.font = '30px Arial';
var dim = context.measureText(
'Hello, world!'
'width: ' + dim.width + '\n' +
'height: ' + dim.height
); 显示了一个警报,其输出类似于 。清单 4.
width: 164
height: undefined注意 height 后面的 undefined。令人费解的是,所有浏览器都总是会返回一个未定义的结果,因此使用 measureText() 函数实际上不可能确定具体的文本高度。有几项技术可用于确定一个颇具代表性的值。对于许多字体,某些字母相当方正,比如字母 M。您可以度量这些字符中某个字符的宽度,并将该值作为字体高度的近似测量。另一种方法就是将提供的字体大小作为实际高度的基础。如果上述示例中提供了一个 30px 的值,那么您可以添加几个垂直填充像素,并将产生的值用作近似高度。构建块要提高开发的效率,您可以使用之前提到过的工具以一种友好的方式执行,创建一个简单的 wrapper 类。该类会自动的设置和置换各个上下文属性,最终将想要的文本渲染到 canvas 上。您可以使用 context.font 属性自动解决该问题。 中的示例在本系列的
使用过。清单 5.
在 canvas 中使用动态样式渲染文本context.font = '18px Arial';
context.fillStyle = 'green';
context.fillText('Variety', 0, 50);
context.translate(60, 0);
//move 60 pixels to the right (a)
context.font = '12px Arial';
context.fillStyle = 'blue';
context.fillText('is the', 0, 50);
context.translate(35, 0); //move 35 pixels to the right (b)
context.font = 'italic bold 12px Arial';
context.fillStyle = 'red';
context.fillText('spice of life!', 0, 50); // (c) 显示 中在 canvas 中渲染文本的三个步骤。图 5.
在 canvas 中使用动态样式渲染文本要使用原生 canvas API,则需要编写大量代码。如果您可以简化上述示例所需的代码,那么可以提高将文本渲染到 canvas 上的效率。例如,您可以使用 中的代码,而不是编写多行的原生代码。清单 6.
增强 canvas 文本渲染的工作流的概念var myText = new CanvasText();
.family('Arial')
.size('18px')
.weight('bold')
.color('green')
.append('Variety')
.size('12px')
.weight('normal')
.color('blue')
.append('is the')
.style('italic')
.color('red')
.append('spice of life!')
.render(); 显示了
中的代码。该示例使用了链接 (chaining),链接是 jQuery 和 jQuery 插件中常用的一个干净而又简单的语法。图 6.
增强 canvas 文本渲染流程通过这种方式得到简化。尽管代码行数几乎一样,但每行的代码复杂性降低了。而且您不再需要手动定位样式的文本块。如果您稍后需要调整文本块的一些属性,则无需手动重新定位以下构建块。让我们来回忆一下,canvas.font 属性是多个属性的组合,可决定如何渲染文本。在 Variety 与后续构建块之间,无需指定字体。在 'is the' 与 'spice of life!' 块之间,也不需要使用字体大小和粗细的技术。这里使用了一个简单的机制来记住之前应用过的属性,使您无需重新配置之前应用文本的预期属性。请参阅 ,以获得有关 CanvasText 类的一个示例。为了得到上述结果,只需对希望渲染的文本样式属性进行分组,相应地指定样式属性,然后调用闭合组的 CanvasText 对象的 append() 函数,并存储它供日后使用。渲染文本时,需要遍历这些组,然后指定样式并应用它。在迭代组时,保留之前的样式状态的工作记录,并在必要时覆盖这些记录。这些操作实现了文本存储,并降低了将文本渲染到 canvas 的技术难度。这只是使用 wrapper 类或构建自动化 canvas 文本渲染过程的一个优势。自动换行自动换行是很多人需要的一个功能。当一个 HTML 元素包含因太长而无法放在一行的内容时,这个功能就起作用了。我们无需考虑文本的长度、容器的宽度等。然而,对于 canvas,换行并不是这么简单。HTML canvas 元素目前不包含管理这些事情的内置功能,因此您必须使用之前提到过的工具和方法以编程方式实现。例如,要让文本在超过容器宽度时换行,则必须知道所用容器的宽度、希望渲染的文本宽度、文本行高度。您还需要创建虚拟容器,提供指定该容器宽度的方法。在创建这样的流程后,我们准备开始探索在 canvas 中实现自动换行所需的逻辑。 详尽说明了 清单 6,并提供一些要传递给 CanvasText 类的构造函数的参数。清单 7.
将函数传递到 CanvasText 类的构造函数中var myText = new CanvasText(
{x: 50, y: 50},
{width: 100, height: 200}
.family('Arial')
.size('18px')
.weight('bold')
.color('green')
.append('Variety')
.size('12px')
.weight('normal')
.color('blue')
.append('is the')
.style('italic')
.color('red')
.append('spice of life!')
.render();其他参数包含要渲染的文本位置的 x 和 y 坐标、文本大小和容器大小。请注意,这里指定了一个显式宽度来限制内容换行。有了要遵从的容器大小后,您可以创建一些功能来实现预期结果了。除了遍历不同的样式外,您还需要遍历每一个单词,以获取一些数据,了解经过渲染的文本实际需要多宽。有了这些信息,就可以跟踪已经渲染文本的宽度,并确定下一个词是否会呈现在预期范围之外。幸运的是,measureText() 函数正好提供了所需的信息。 显示使用 CanvasText 类实现自动换行所需的代码。清单 8.
包含自动换行功能// use measure text
var currentWordWidth = context.measureText(currentWord).width
// word wrap code here
if (textAdjustment.x + currentWordWidth & this._size.x || textToDraw == '\n') {
textAdjustment.x = 0;
textAdjustment.y += parseInt(previousFontOptions.size, 10);
}最终结果如
中所示。图 7.
自动换行结果请参阅 ,以获得有关 CanvasText 类的自动换行示例。使用一个相对简单的 wrapper 类,就可以在 canvas 中创建自动化样式和自动换行。每当您需要使用canvas渲染文本时,都可使用这个 wrapper 类。尝试将所有组件汇总在一起我们往往将可用的 UI 看得理所当然。从 HTML 到 Flash 再到 Silverlight,它们都以文本、菜单、滚动条和表单元素的形式提供一组基本的 UI 组件。下一个示例是一个简单的太空射击游戏的基本设计。您要创建的是:可围绕游戏区飞行的一个太空船组件、一个聊天窗口和一个商店。一些组件需要动态化,而另一些组件提供可能需要使用频繁更新或渲染的文本信息。请参阅 ,以获得完整的太空射击游戏示例。HTML 方法第一步是尝试使用基本 HTML 标记创建每个游戏组件。只需少许 CSS 知识,就可以快速创建商铺和聊天系统这样的 UI 组件。下面到了一个有趣的部分:太空船。对于 HTML 实现,可以创建一个简单的 DIV 元素,为太空船附加一个背景图像,添加元素来显示玩家姓名和健康状况等信息。到目前为止,用于这些组件的代码完全源于示例的 HTML 和 CSS。 显示了太空飞船所需的一些 CSS 和显示在其下面的文本。您稍后要在 DOM 渲染函数中更新包含 player 类的 DIV 位置来完成动画。清单 9.
样式化玩家的太空船、姓名和健康状况的 CSS.player {
width: 100
height: 100
.text-under-ship {
width: 100
font-family: G
font-size: 15
font-weight:
font-family: G
font-size: 10
}此时您可以开始使用处理游戏逻辑所涉及的代码了,如
中所示。代码主要集中在 JavaScript 的 Game 对象中。它会负责处理用户输入,并调用相关组件的 update 和 render 函数。清单 10.
用于驱动应用程序的 gameLoop 函数gameLoop: function() {
// calculate time elapsed since last update
var currentTime = new Date().getTime();
var elapsed = currentTime - this._previousT
// call updates
Ship.update(elapsed);
// call renders
if (this._canvasRendering) {
CanvasManager.render();
Ship.renderCanvas();
Ship.renderDOM();
// store current time as the previous update time
this._previousTime = currentT
}示例的一个重要组成部分是 Ship 类的 update 函数。这些函数负责管理和更新渲染代码所使用的太空船的速度、方向和位置。到目前为止,不管渲染方法是什么,创建的大部分内容都是可重用的。 进一步探索了 DOM 与 canvas rendering 函数之间的区别。清单 11.
HTML rendering 函数renderDOM: function() {
var player = jQuery('#player');
player .css({
left: this._position.x,
top: this._position.y
var rotationTransform = 'rotate(' + (this._rotation / 100 * 360) + 'deg)';
var ship = player.find('#ship')
.css('transform', rotationTransform )
.css('-webkit-transform', rotationTransform )
.css('-moz-transform', rotationTransform )
.css('-ms-transform', rotationTransform )
.css('-o-transform', rotationTransform );
} 中的代码最少,因为它使用 jQuery 来定位太空船并设置旋转。要实现真正的跨浏览器兼容性,必须设置各供应商风格的 transform 属性。HTML 方法最终实现起来相对简单,不怎么复杂,且只需少量代码。它的劣势在于,鉴于渲染 DOM 元素的浏览器的开销大且实现可接受帧速的可能性较低。canvas 方法在使用 canvas 之前,您需要引用要使用的 canvas 对象。在此之后,您需要初始化想要使用的上下文。这是本文之前讨论过的上下文,是使用 canvas 元素的手段。使用一个简单的 canvas manager 类,如
中所示。清单 12.
canvas manager 类var CanvasManager = {
canvas: null,
context: null,
_size: null,
init: function() {
this.canvas = document.getElementById('canvas-game-area');
this.context = this.canvas.getContext('2d');
this._size = {
x: this.canvas.width,
y: this.canvas.height,
render: function() {
this.context.clearRect(0, 0, this._size.x, this._size.y);
}在大多数应用程序中,每当您想要更新 canvas 上渲染的内容时,必须首先清除之前渲染的内容,获得一个干净的显示区。您可以使用 clearRect() 函数实现这一点,如
中所示。清单 13.
canvas 渲染函数renderCanvas: function() {
var context = CanvasManager.
// save the context to prepare for our
// upcoming translation and rotation
context.save();
// translate the canvas to the ship's center position
context.translate(
this._position.x + 50,
this._position.y + 50
// rotate the canvas to show the angle the ship is pointing
context.rotate(this.getRotationInRadians());
// draw the ship with an offset of half the height
// and width to center the image
context.drawImage(
this._displayImage,
// restore the context
context.restore();
this._playerName.render();
} 中的代码显示了 canvas 方法的一些优势和劣势。主要优势是能提高性能。当您有多个组件要渲染时,会扩大效果,如
中所示。图 8.
增加要渲染的太空船的数量以扩大性能差异示例目前在渲染相互叠加的 50 艘太空船(参见
中的工作示例)。显然,HTML 版本滞后不少。切换到 canvas 版本能够显著提高性能。两个方法的代码量明显不同。对于 HTML 版本,我们使用 jQuery 通过一个函数调用来完成太空船的定位。而在使用 canvas 方法时,就需要多用一些代码。在
中,还有另外一个用于绘制玩家姓名的调用。在 HTML 方法中不需要这个调用,因为您要安置一个同时包含太空船和附加文本的元素。不过在 canvas 中,就没有这么方便。为了完成玩家姓名的渲染,该示例使用了 CanvasText 类,有效地将渲染太空船及其附加文本的所有工作都移出 DOM,然后将这些工作移入 canvas。结束语在这个由两部分组成的
中,我们探讨了选择 canvas 还是以 HTML 为中心的架构的标准。在本文中,我们了解了动画考虑事项,以及如何克服文本渲染限制。本文中的一些示例展示了如何将这些概念集中起来,提供了对 canvas-HTML 混合架构的不同方法的洞察。
下载资源 (canvashtmlpt2sourcecode.zip | 20KB)相关主题CanvasText 类的 。CanvasText 类的自动换行 。本文太空射击游戏的 。
相互叠加的 50 艘太空船的 。:更多地了解这个快速而简洁的 JavaScript 库,它能够简化 HTML 文档遍历、事件处理、动画和 Ajax 交互,从而加速 Web 开发。(Rebecca Murphey,2010 年):阅读这一 jQuery JavaScript 库综述。:更多地了解在用户与浏览器交互时注册行为、使其生效的方法。 “”(developerWorks,2011 年 2 月):阅读本文,了解如何使用 canvas(一个具有冲击力的简单 HTML 元素)增强您的 Web 页面。 “”(developerWorks,2011 年 7 月):更多地了解 HTML5 的变更和 HTML5 canvas 元素。:观看来自 Safari Dev Center 的该演示,了解如何管理 canvas 来开发有效的可视对象。 :探索这个开发人员社区,该社区使用 W3C 来调优 HTML5。:查阅来自 Mozilla 开发人员的这一教程,了解如何在您的 HTML 页面中实现 canvas 元素。:使用 W3Schools.com 上该参考书中的练习加强您的 canvas 知识。:是一个流行的 JavaScript 库,可简化 HTML 文档遍历、事件处理、动画和 Ajax 交互,从而加速 Web 开发。:是专为即时跨浏览器键盘事件处理而编写的另一个流行的库。:查找介绍各种基于 Web 的解决方案的文章。浏览 ,获取各种各样的技术文章和技巧、教程、标准以及 IBM 红皮书。:下载或 ,并开始使用来自 DB2、Lotus、Rational、Tivoli 和 WebSphere 的应用程序开发工具和中间件产品。:立即加入,了解 developerWorks 上的活动信息。
添加或订阅评论,请先或。
有新评论时提醒我
static.content.url=http://www.ibm.com/developerworks/js/artrating/SITE_ID=10Zone=Web development, Open sourceArticleID=856151ArticleTitle=使用 HTML 标记来补充 canvas,第 2 部分: 动画和文本渲染publish-date=}

我要回帖

更多关于 c4d怎么渲染动画 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信