即时渲染3D游戏的基本原理和制作方式
很多值友可能会知道我在这里分享服装、鞋帽、皮具文化的内容。其实我也是一名核心向的游戏玩家和MOD制作者、独立汉化者。
零·文章内容索引:
1)为什么要科学评价游戏画面
2)游戏即时渲染的基本概念
3)游戏视觉表现的终极目标
4)游戏世界画面的构成
5)对象(Object)的构成:模型线框(mesh)、贴图材质(texture)、 动画(animation)
6)贴图材质模拟效果
7)场景环境
8)特效(Shader Effect)&光影(Lighting & Shadowing)
9)互动性与实时动态效果
10)融合输出(Blend & Pixel Shader)
11)执行效率与优化(Optimize)
12)游戏制作的分工
一、为什么要科学评价游戏画面
且看两篇游戏评测
1.1 糟糕的评价:某DM游戏网 《鬼泣DMC》评测
摘录:游戏制作精良、画面十分精美,人物刻画细腻,动作表现真实到位,技能特效也比较华丽,初次进入游戏释放大招甚至可以用震撼来形容。但场景表现单调加上界面设计缺乏灵感,影响了整体氛围。加上整体优化不佳,经常卡顿,严重影响游戏体验。
玩家:??????
1.2 好的评价:口袋巴士《变形金刚绝迹重生》评测
摘录:变形金刚的建模很细致,几乎完全还原了电影形象,场景也足够丰富并不单调。之所以本作画面看上去很差,主要是因为其完全无变化的贴图,虽然是3D画面,建模不错,但无论什么物体都一模一样的毫无区别的贴图表现,让整个画面显得很平,很没有内容,同时还缺乏了物体性质的表现,金属不像金属,木头不像木头,一个画面好像都是纸糊的东西。外加贴图本身那低分辨率的质量,以及满屏一点都没有的光影变化,还有纸片般的爆炸特效。
如果你以一名真正核心向的游戏玩家自诩,或是有志于进入游戏行业、游戏媒体行业。那你可不能用“精美、炫丽、精致、华丽、震撼、细腻、真实”这样粗糙的语言评价游戏画面!这与“老甜了”、“老好吃了”一样,毫无意义。
通过本系列文章,你可以学会像IGN游戏编辑一样专业地评价游戏画面。
只有了解游戏画面效果的构成原理、表现方式、执行效率才能科学地评价游戏画面效果和优化。搞懂一款游戏画面“好“到底好在哪里;游戏优化”差“到底又差在哪里。
二、游戏即时渲染的基本概念
2.1 3D即时渲染游戏是什么:
是否3D游戏与看起来的视觉效果无关,当然也并不存在2.5D游戏。
(1)1D:定位在一条线中的位置,只需要X轴坐标数据,如B距离A 500px(像素);
(2)2D:定位在一个平面中的位置,需要X、Y轴坐标,如东经124度北纬42度、梦幻西游中的(东海渔村 168,215);
(3)3D:在游戏场景中,具有XYZ 3轴定位对象,实时渲染的游戏,即为3D游戏。
2.2 3D即时渲染(Real-Time Rendering)的起源与发展:
3D即时渲染的发展过程,也就是不断将静帧3D渲染功能通过GPU硬件加速实现即时化的过程。
1990年代初,静帧3D渲染已经可以达到《侏罗纪公园》等级,而只能用于商业领域。程序员可以通过VB、VC等写出依赖CPU与内存运行的即时3D程序,不过效率低,效果差。这个时代不存在游戏引擎、API、运行库,做游戏就像做网站没有数据库、后台,甚至没有DW。3D游戏必须一行一行写代码,只有真正的大神才能做出好作品,如id Software的卡马克。
90年代中期AMDK6、因特尔奔腾2时代开启,3DFX推出了Glide API,与Voodoo显卡。通过这样的API,3D渲染第一次有了专属硬件——3D图形加速卡(显卡)。
硬件与软件渲染的区别是,GPU不能执行具体指令但是可以进行大批量重复、枯燥的运算,而CPU每次执行指令要重新编程,适合灵活运算。
此后,CPU不再进行渲染,只负责调度,而显卡则负责具体工作,就像流水线作业。当前GTX Titan图形渲染能力已是I7 3960X的100倍。
随后,微软发布了应用在Windows系列系统的开放API——Direct 3D(当前Direct X的子集) 、Khronos发布了可以运行于Windows、Unix、Linux(包括基于此的Ubuntu、Macintosh、iOS、Android)在内任何系统的开源API——Open GL。
这些API都用自家规则算法,将静态渲染效果以更高效呈现在3D即时渲染中,而今天的手机游戏主流API是2012年发布的 Open GL ES 3.0,应用于iOS与Android,微软的Windows Phone当然还是Direct 3D。
2.3 3D游戏如何加载、运行:
用户启动应用程序(软件),程序命令CPU从系统调用Android/iOS系统内置的某些通用运行库、运行游戏所需资源并将这些加载到内存、显存,随后呈现游戏的图形用户界面(GUI)。当加载达到一定完成度,CPU开始指挥GPU,按照API(如Open GL ES 3.0)预先设定好的处理方式进行离屛(OFF Screen)预渲染,渲染完成度达到100%即可进入游戏的实际渲染画面。游戏加载时间过长,就是数据结构不合理或者预渲染做的不好。
2.4 游戏视觉效果失败典范:
三、游戏视觉表现的终极目标:
3.1 广阔无边:
当前的游戏地图是有尺寸概念的,如256x256、1024x1024、16384x16384,除非采用过程生成技术,否则游戏地图越大运算量也就越大,不过游戏是有视距(View Distance)和视场(Field of View/FOV)概念的,看不见的物体不予渲染。
3.2 极致细节:
游戏中具有大量内容,场景、对象刻画极致真实。在当前,需要渲染越多、细节越丰富的物体,运算量也就越大。不过可以通过几何实例、遮蔽剔除之类的方式优化。
3.3 充分互动:
游戏中的物件可互相影响,例如爆炸冲击波可吹飞部分对象并在地面留下弹坑;场景中的建筑可破坏或车辆可损伤;玩家走过会留下地面脚印并拨开草丛。这些涉及碰撞检测、重力、层关系等数据逻辑计算,都需要CPU来调度处理。
3.4 丰富变量:
例如可模拟天气、时间、气候变化效果;游戏中具有可变的光照、效果系统。这需要游戏从设计开始,就为动态环境设计,为了节约资源,当前多数游戏都是将效果做成完全静态。
3.5 运行疾速:
每秒60帧以上且稳定的渲染速度是开发目标,但并不现实,当前手机游戏多锁定为30FPS。期望高效,就要使用多种最先进的方式优化游戏的数据结构、渲染流程、场景设计。
四、游戏世界画面的构成:
4.1 对象(Object):
例如游戏人物、武器、载具。环境中的:乔木,灌木、建筑物、栅栏、掩体。除了天空、河流、高山一类,基本都是对象。
4.2 场景环境(Scene Environment):
游戏世界中的公路、河流、山峰等贴在地图上,而非后放置在地图上的对象,都是场景环境。通常由高度图、深度图等控制,在PC上也有曲面细分、位移贴图、贴花遮罩等介入。
4.3 动作/动画(Animation):
在游戏中所有的动态,都是由动画动作脚本控制,脚本可以是预置,也可以即时演算生成,否则游戏世界将会静止。
4.4 渲染效果(Shader Effect):
分为顶点着色渲染(Vertex Shader)、像素着色渲染(Pixel Shader)、粒子着色渲染(Particle Shader)。
顶点渲染负责的是游戏模型与材质贴图上附加效果的渲染,例如凹凸效果,树叶、皮肤、玻璃等材质仿真效果的模拟等。
而像素渲染的范畴如反锯齿、屏幕滤镜,包括一些GUI、融合blend,。
五、对象(Object)构成:
5.1 模型网格(Model Mesh):
由顶点(被线连接)组成的几何体框架,也就是我们所说的游戏模型。模型顶点越多,构成的面数也就越多,细节更丰富拟真度更高,需要的运算量更大。
5.2 贴图材质(Map Texture):
贴图就是一张张图片,附着在模型网格的UVB坐标顶点上。如果没有材质,在游戏世界中呈现将只有素模。因为是图片,所以材质贴图也有分辨率,例如128x128、512x512、2048x2048、8192x8192。材质分辨率越高显存内存资源消耗越大。
5.3 动作/动画(Animation):
在游戏中物件的动作是围绕模型的顶点或者单独预置的布娃娃系统动作骨骼,以脚本(Script)控制。动作真实与否,决定了游戏中人物是否抽风,是否像僵尸。动作由CPU控制播放预设脚本执行,也有一些是根据碰撞检测自行计算出。
当今要提供动作较为流畅的脚本,通过动作捕捉获得,是最佳途径。
5.4 碰撞检测(Collision Detect)
美工需要为游戏中每一个动态活性对象的模型制作物理碰撞模型(Collision Mesh)或伤害碰撞检测盒(Hitbox),这样才能使一个目标具有被施加伤害或者与其他模型发生相互作用关系的可能。
出于节省资源的目的,游戏碰撞检测盒和游戏模型并不相同,且大多数游戏的碰撞检测盒都比较简单,所以经常会遇到打对方某些部位不损耗HP或者没命中对方却减少HP。
六、贴图材质模拟效果(Texture Meterials)
6.1 细节贴图(Detail Mapping)
现实世界存在大量细节纹理
所以,我们需要在游戏中模拟
细节贴图可以依附在任何UV贴图上,也可以伴随法线,而它自己本身并不需要UV.在可以支持多层材质的引擎,可以使用细节贴图,以增强游戏材质的质感。
通过实例化的平铺这张128*128的细节贴图,在显存占有很低的情况下,就可以达到极好的效果。
6.2 凹凸(Bump):
(1)预渲染凹凸:
直接画在贴图上实现凹凸效果,对资源无消耗。
(2)法线贴图(Normal Mapping):
一种在DX8.1时代开始普及的技术,效果一般,能实现不规则图像的凹 凸,无法实现太大的凹凸。
(3)视差映射贴图(Parallax Occlution Mapping)
视差遮蔽贴图是一种妥协,通过算法欺骗你的眼睛,用较低的资源实现较好的效果,但在一些小角度下效果不好。
凭借其他技术生成真正顶点的物理凹凸
(4)硬件位移置换贴图(Displacement Mapping):
位移贴图与凹凸贴图、法线贴图、视察置换贴图等技术区别在于它是“物理凹凸”,会产生真实的模型顶点(Vertex)与多边形(Polygon),而非欺骗视觉。它甚至可以在平地位移出一座山。
硬件位移贴图算法复杂,效果极佳,资源耗费虽然比视差贴图大,但与建一座山的模型相比就不算什么了。
基础模型+法线贴图
硬件位移置换贴图+曲面细分
现实世界的雪山:
通过硬件位移置换贴图生成出的山脉
6.3 材质模拟效果(Texture):
游戏中的贴图材质像PhotoShop一样可以附带多个、多层的图层属性,如凹凸、材质模拟效果。
一切材质效果,都是模拟物质或者多层物质与光之间发生的反应。
如果没有这种模拟,游戏世界中就会只有镜子或是黑洞。美工必须熟练掌握每一种物质与光相互作用反应的效果,应用如半透明、衍射、漫射、反射、漫反射、次表面散射等效果进行模拟。
所以游戏中才能模拟水面、植物、金属、布料对于光照的不同反应。不同的车漆,如金属漆、碳纤维、哑光贴膜也会有光照下的不同反应。
这是全局光照+多种材质模拟效果打造出的图像效果,模拟喜马拉雅盐灯:
那些材质模拟效果不好的游戏,就会过于油腻或者过于朴素:
七、场景环境(Scene Environment)构成:
基底(Base):游戏的环境支持多层叠加,基底层多为海平面。
表面材质(Surface Texture):在基底之上,可以通过编辑器布置各种地形元素,如道路、停机坪、草丛等。
建筑(Building):在游戏场景中布置的建筑,通过设计可以达到可破坏效果。
静态物件对象(Static Object):没有被定义为可以使用、或者可以对游戏中其他对象造成影响的静态物件,比如说一个垃圾桶、灭火器、花瓶……
装饰(Decoration):草丛、垃圾等。
完结,下期内容预告:
8)特效(Shader Effect)&光影(Lighting & Shadowing)
9)互动性与实时动态效果
10)融合输出(Blend & Pixel Shader)
11)执行效率与优化(Optimize)
12)游戏制作的分工































校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案