[转]显卡帝揭秘3D游戏画质特效
近几年来,大量采用最新技术制作的大型3D游戏让大部分玩家都享受到了前所未有的游戏画质体验,同时在显卡硬件方面的技术革新也日新月异。对于经常玩游戏的玩家来说,可能对游戏画质提升有种不知不觉之感,而对于那些前些年经常玩游戏,现在突然又来玩新游戏的玩家来说,估计会度现在的游戏画质赞不绝口甚至惊呼“不可思议”。不过有一个现象我们不得不承认:游戏画质的设定选项越来越丰富了,同时玩家也对这些“乱花渐欲迷人眼”的游戏画质特效有点摸不着头脑了。所以今天显卡帝就来为您详细解读3D游戏特效,让玩家在体验游戏的时候玩得尽兴玩得明白。
显卡帝揭秘3D游戏画质特效
说到游戏图形特效,我们不得不说的是DirectX API,DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。DirectX由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。DirectX中的显示部分即担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,读者可以把它理解成所有划线的部分都是用DDraw实现的;后者Direct3D则主要负责3D效果的显示,比如游戏中的人物和场景画面等,都是使用了DirectX中的Direct3D技术来实现的。而DirectX中的Shader Model指令集即实现了这些复杂而逼真的游戏图形特效。其实Shader(渲染或称着色)就是一段能够针对3D对象进行操作、并被GPU所执行的程序,Shader Model即是优化渲染引擎模式的意思,我们可以把它理解成是GPU的渲染指令集。历代DirectX版本有重大升级时,其最主要的更新内容就包括在Shader Model之中:
ShaderModel 1.0 → DirectX 8.0
ShaderModel 2.0 → DirectX 9.0b
ShaderModel 3.0 → DirectX 9.0c
ShaderModel 4.0 → DirectX 10
ShaderModel 4.1 → DirectX 10.1
ShaderModel 5.0 → DirectX 11
我们玩家一般在玩游戏的时候可能最多设定的就是画质的AA(抗锯齿)或分辨率相关的选项,随着DX API的不断升级,游戏的画质设定选项也在不断的改进和丰富,其实现在的大部分游戏在画质设定上相比之前的老游戏而言都已经有了相当丰富的选项提供给玩家。所以玩家可以不再局限于之前的抗锯齿这样的基本画质要求,也可以尝试更为丰富多样的游戏画质特效,尽享3D游戏画质特效为您带来了全新画质体验。接下来,显卡帝就为您详细介绍3D游戏中一些重要而新颖的游戏画质特效,希望各位以后在玩游戏的时候对这些游戏画质特效有一个事先的了解,也方便玩家在游戏过程中对游戏的画质进行更为优质的画质调节。
高动态范围光照(HDR)
高动态范围光照(HDR)
首先我们所要介绍的是比较熟悉的HDR(High-Dynamic Range:高动态范围光照)这个游戏特效。HDR(High-Dynamic Range)特效是和Soft shadows(柔和阴影)/Parallax Mapping(视差映射贴图)等并列的图像渲染特效。想要实现HDR特效,首先,游戏开发者要在游戏开发过程中,利用游戏引擎等开发工具将实际场景用HDR记录下来,当然开发技术强的开发组会直接用小开发工具(比如3D MAX的某些特效插件)创造HDRI图像;其次,我们的显卡必须支持显示HDR特效,nVIDIA的显卡必须是GeForce 6系列或更高,ATI显卡至少是Radeon 9550或以上。HDR特效最早是由NVIDIA提出的概念,也是最先在NVIDIA的显卡中实现的,当时面对竞争压力的ATI也效仿NVIDIA实现了RADEON显卡的模拟HDR的支持,注意——仅是模拟而已,而且是通过Shader Model 2.0实现的。
高动态范围光照(HDR)画面示例
高动态范围光照(HDR)画面示例
DX9可以算得上是DirectX史上的一次革命性的改进,而DX9的第三个版本DirectX 9.0c(Shader Model 3.0)正是凭借HDR技术名噪一时。因为采用HDR特效技术处理过后的游戏在画面上色彩对比鲜明和风格会呈现出超现实感。
游戏中关于HDR的选项
但遗憾的是,虽然说HDR给玩家带来了画面上更加绚丽的色彩,但是HDR技术也有不少“顽疾”至今都没有得到有效的解决。DX9.0C中的HDR和AA(抗锯齿)互不相容,虽说ATI X1000系列和XBOX360主机都能支持HDR+AA仅是一个特例而已,但HDR+AA方案并非业界标准,ATI官方也不认可这种做法;还有就是HDR技术也导致了新一代的游戏显存消耗的成倍增加,因为HDR在设计之初的要求就是光照和纹理都必须保持高精度,而纹理贴图不经过压缩就放在显存中,容量可想而知有多恐怖。为此,DX11在API设计的时候就专门为HDR设计了纹理压缩格式:BC6H,压缩比达到了6:1。正是进过了DirectX API设计的不断改进,HDR技术才在实用性和效率上找到了平衡点,故而逐步被大部分的主流游戏所采用。
最后我们用三句话简洁的概括下HDR特效的画质表现效果:
1.亮的地方可以非常亮
2.暗的地方可以非常暗
3.亮暗部的细节都很明显
环境光遮蔽(Ambient Occlusion)
环境光遮蔽(Ambient Occlusion)
“AO”为Amblent Occlusion的缩写,中文译为环境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升级为SSAO(Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽);而在微软推出DirectX 11 API后,SSAO升级至HDAO(高解析度环境光遮蔽:High Definition Ambient Occlusion)。
无AO(左)和有AO(有)对比图
我们有必要对AO(环境光遮蔽)的释义进行一个简单了解:AO是来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果,可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。可以说AO特效在直观上给我们玩家的感受主要体现在画面的明暗度上,未开启AO特效的画面光照稍亮一些;而开启AO特效之后,局部的细节画面尤其是暗部阴影会更加明显一些。
尘埃2游戏中的AO画质特效设定
SSAO实现了较好的全局光照效果
《异形大战铁血战士》HDAO开/关细节对比
SSAO和HDAO均为AO技术的变种或升级,其实目前采用统一渲染架构的图形核心都能够实现AO(环境光遮蔽)效果,而在SSAO在DX10.1中被引入之后,得到了更为优化的代码支持从而实现了更为有效的环境光遮蔽效果。而伴随DX11所一同进化而生的HDAO,相比SSAO和AO有了更进一步的效能提升。HDAO是SSAO的升级,主要更新了用于加速SSAO的函数指令Gather4(在DirectX 10.1中,Gather4允许一个2x2的未过滤纹理替代一个双线过滤的纹理),从而实现更快更好的阴影效果。值得一提的是HDAO这个名称咋一看比较贴近ATI HD系列显卡的名称内涵,再加上SSAO和HDAO都是ATI所力挺的图形技术,故而HDAO也一同写入了DirectX 11 API的函数库中。
景深(Depth of Field)
景深(Depth of Field)
关于景深这个游戏特效的概念,我们首先可以先看一下下面这张照片的效果。由下面这张图我们可以看到红花所呈现出来的画质最清晰,而远处的绿叶则十分模糊。
景深效果
对摄影有所了解的朋友一定对景深这个概念不陌生。下面我再从摄影的角度来解析下什么是景深效果。为理解景深,我们先来了解下弥散圆的概念。在焦点前后,光线开始聚集和扩散,点的影象变成模糊的,形成一个扩大的圆,这个圆就叫做弥散圆。
弥散圆(circle of confusion)
在焦点前后各有一个容许弥散圆,这两个弥散圆之间的距离就叫景深,即:在被摄主体(对焦点)前后,其影像仍然有一段清晰范围的,就是景深。景深的深浅取决于焦点的位置。
景深(depth of field)
游戏为了达到拟真的效果,自然也将景深的概念引入到其中。然而问题是由于3D游戏只是将图像投影在了平面显示器上,故而本身不会有景深效果,因此为使得游戏画面产生景深效果则必须在图像输出之前对其做预处理,把焦点之外的远景全部虚化处理。
游戏画质设定中的景深选项
DX9和DX10关于景深效果的对比
DX10中的景深效果解析
DX9时代在景深特效的处理方面显得有点“偷工减料”,因为其原理是将远景物体的纹理、阴影和光照等效果进行大幅度缩水,再加之以模糊处理,而仅对近景做正常的渲染输出。
DX10的景深处理则显得相对务实一些,因为它借助的是几何着色器,远景也完全符合的是正常虚化模式,且光影等特效细节也得到了保留。
而到了DX11时代,则是通过DirectCompute中新增的Gather4数据采集指令,使得计算着色器能够以四倍的纹理采集速度,帮助减少GPU纹理单元和光栅单元的负担,从而在进行景深处理时消除了瓶颈,提升渲染效率。
运动模糊(Motion Blur)
运动模糊(Motion Blur)
运动模糊是景物图象中的移动效果。它比较明显地出现在长时间暴光或场景内的物体快速移动的情形里。其实我们在电影或电视里面经常会看到些运动模糊的效果画面,在我们用相机对准快速运动的物体拍照的时候,你也会偶尔拍出具有运动模糊的效果图片。所以说具有运动模糊画面的游戏更加具备拟真的效果。
运动模糊效果
赛车游戏里面,运动模糊这一项往往是必须的
赛车类的游戏,运动模糊效果是必须的
孤岛危机游戏中运动模糊效果
DX9时代的运动模糊效果显得有些许夸张或不真实,因为游戏画面仅仅做了一个相对简单的虚化背景处理,而对前景高速运行的物体则保留运动轨迹,再简单的将前景和背景进行糅合,效果上会有些拖影或残影的状况。
凭借全新的几何着色技术,在DX10模式下即可使用流处理器资源来计算物体的几何坐标变换,再配合高精度的顶点纹理拾取技术,从而对整体运动过程有一个相对完美的再现,并且在运动模糊效果的处理上也做到了“是非分明”。
体积云/体积雾/体积光
体积云/体积雾/体积光
体积云/体积雾(Volumetric Clouds/Fog),简而言之:在游戏中的体积云/雾效果就是使用图像引擎来模拟云雾半透明、无规则的表现效果。在早期游戏中,实现云雾烟火效果的惯用手法是使用贴图,这在经典的CS游戏中可以体现出来,至于效果则显得很粗糙一般。
CS的烟雾弹效果,可以看到层状的材质
体积云/体积雾效果
体积云效果
而事实上,体积云本身的定义上也不是特别清楚,欧美业界的观点是:通过3D引擎实时生成的、能够随时间流逝而自动改变的、能够和物力引擎互动产生变化的(比如飞机飞过云雾散开),才能称为体积云/体积雾。像《孤岛危机》和《冲突世界》这样的游戏均大量运用了体积云/体积雾的特效。
现实世界里的光线图
游戏中的体积光特效
孤岛危机游戏中的体积光特效
体积光(Volumetric Light),可以说目前的大部分游戏在DX10和DX11的API支持下都具备了体积光的特效,这一切都得益于DX API在渲染架构上的改进,才使得这些高级图形特效被更多更好的运用于游戏之中。
软阴影(Soft Shadow)
软阴影(Soft Shadow)
Soft Shadow,字面上翻译过来是软阴影,其实叫作“柔和阴影”似乎更恰当。在生活中,我们知道阴影的过渡是渐变的,而软阴影的作用就是要模拟这种阴影渐变且在阴影周边制造虚化的效果。
StreetFighterIV游戏中的软阴影选项
一般来说在游戏中阴影的生产方法有2种:Shadow Mapping(阴影映射)和Shadow Volumes(体积阴影)。对于在阴影映射下实现软阴影效果,通常采用的方法是:在阴影边界进行高精度超级采样的方法,如虚幻3引擎就是进行16X的超级采样,这就是软阴影消耗系统资源大的原因。
对于在阴影映射下实现软阴影,通常是在阴影边界进行高精度超级采样的方法,如虚幻3引擎就是进行16X的超级采样,这就是软阴影消耗系统资源大的原因。
《西部狂野》的Shadow Map Size高达2048*2048,生成的阴影效果非常好,对硬件要求也高
《尘埃》的Shadow Map Size更是前所未有地达到了4096*4096,阴影柔化效果也很到位
《孤岛危机》的阴影效果当然是顶级的了
Shadow Volumes(体积阴影)
Shadow Volumes(体积阴影)是一种基于几何形体的技术,它需要几何体在一定方向的灯光下的轮廓去产生一个封闭的容积,然后通过光线的投射就可以决定场景的阴影部分(常常使用模板缓冲去模拟光线的投射)。Shadow Volumes(体积阴影)这项技术是像素精确的,不会产生任何的锯齿现象,但是与其他的技术一样,它也有缺点:其一、极度依赖几何形体,其二、需要非常高的填充率,其三、相当耗费CPU资源。采用体积阴影来实现软阴影效果的游戏不多,《DOOM3》和《F.E.A.R.》就是采用的体积阴影技术的游戏。
曲面细分(Tessellation)
曲面细分(Tessellation)
曲面细分技术想必是大家相对比较熟悉的一个游戏特效,在新近推出的DX11游戏中,我们发觉曲面细分技术的应用越来越多,而且采用这项技术的游戏在游戏画面的立体感方面显的尤为突出。下面我们从天堂2.5 的画面对比图中就可以很清晰的体验到曲面细分特效的魅力。
DX11曲面细分对比图
DX11曲面细分对比图
DX11曲面细分对比图
DX11曲面细分对比图
DX11曲面细分对比图
DX11中的曲面细分技术
曲面细分技术演示
Tessellation(曲面细分)技术,是一种化繁为简的手段,简单的讲,便是在一个简单的多边形模型中,利用专门的硬件,专门的算法镶嵌入若干多边形,以达到在不耗费CPU资源的情况下,真实的展现曲面的目的。N卡和A卡在曲面细分技术处理上的区别是:NVIDIA的DX11显卡采用的是专用曲面细分处理单元的设计,而AMD则采用的是内部集成曲面细分处理单元的设计。
视差映射贴图(Parallax Mapping)
视差映射贴图
视差映射贴图技术又叫视差遮蔽贴图技术,在这一技术中,会对纹理的坐标做变换,一些凸出的纹理会遮蔽到其他的纹理,这样就会看起来具备更好的凹凸感。视差贴图技术的实现原理,其实和法线贴图是一样的,都是根据法线贴图进行的处理。视差贴图比法线贴图提供更好的视觉效果,而且跟法线贴图有同一个目的:在保证模型细节的情况下,大幅度降低场景的多边形数目。
法线贴图在《孤岛危机》里的应用,立体感表现得非常好
《S.T.A.L.K.E.R.》中的视差贴图效果,砖块和石板上的凹痕表现十分生动
采用视差贴图的鹅卵石给人以“以假乱真”的感觉
视差贴图技术在早期并没有得到广泛的应用,因为视差贴图技术相比法线贴图技术要耗费更多的资源,而当时的计算机运行起来则显的有些吃力。最早使用视差映射贴图技术的游戏叫做《狂野西部》,是首批DX10游戏之一,而DX9版本不支持视差贴图技术。由于DX10显卡都采用了统一渲染架构,可以方便集中利用Shader资源来渲染出复杂的特效。再加上有全新的几何着色器辅助,因此特效的运用方面可以更加灵活,游戏开发商可以很容易的自定义一些特效渲染方式,所以将先进的技术都安置在DX10模式之中也是无可厚非。
物理加速效果
物理加速效果
可以说物理加速技术第一次实现了真实而自然的水滴效果。物理加速是3D游戏特效中的效果之一,它能令物体被破坏和移动,物体碰撞能产生物理上的反弹效果,使游戏更接近真实,更趋近于物体在自然状态下的物理运动等反应。这些特效在早期的3D游戏中是不可想象的。
借助物理加速技术,我们可以实现在游戏中体验到如下真实的物理效果:
1.尘土飞扬,碎渣四溅的大量粒子运动所形成的爆炸效果;
2.设计结构复杂的各种几何模型,以完成更加逼真的物理运动和交互动作;
3.环绕在运动中的物体周围的大量翻腾涌动的浓烟和尘雾效果;
4.逼真细腻的河水、泥石流、岩浆等流体运动模拟;
5.衣物、草丛、树叶之类软性物体能随风自然飘动效果;
6.衣物,旗帜等软性物体因外界各种影响做出不同的撕裂或变形效果;
7.刚性物体之间相互碰撞的运动计算,一定力度之下形成拟真的成千上万个碎片运动。
进过物理加速的裙摆更显自然逼真
采用物理技术的游戏——《蝙蝠侠》
就工作原理上讲,物理加速技术主要负责两个工作:其一、如何近乎自然的操作物体的移动;其二、在周围环境的影响作用下,物体如何更加真实地作出交互性的反应。
目前物理加速技术上主要分为“三大派别”,NVIDIA拥有自己的PhysX物理加速引擎技术,INTEL拥有自己的Havoc物理加速引擎技术,而AMD则选择了基于OpenCL的第三方物理引擎技术的研发。
总结大会之3D游戏特效作用
总结大会之3D游戏特效作用
看完了前面所介绍的这些游戏特效,可能不少玩家在之前玩游戏的过程中已经不知不觉的体验过这些游戏特效所带来的全新画质效果。而这一次我们对这些游戏特效进行了一个全面的总结过后,想必玩家会对游戏画质特效的设定有个更为清楚的认识。最后我们对这些游戏特效的作用进行一句话的简单小结来结束本次对3D游戏特效的专文研讨。
①高动态范围光照(HDR)
亮部更亮,暗部更暗,明暗细节更明显。
②环境光遮蔽(Ambient Occlusion)
使暗部阴影更明显,明暗对比更强烈
③景深(Depth of Field)
突出重点,虚化背景
④运动模糊(Motion Blur)
对快速移动、爆炸和高速碰撞等画面进行相关画面的模糊处理
⑤体积云/体积雾/体积光
让云就、雾和光照更加趋近于真实
⑥软阴影(Soft Shadow)
模拟阴影渐变且在阴影周边制造虚化的效果
⑦曲面细分(Tessellation)
用更多的多边形来逐渐逼近真实物体的外表轮廓,从而实现图形画面的立体感和层次感
⑧视差映射贴图(Parallax Mapping)
使3D画面具备凹凸感和立体感
⑨物理加速效果
使物体在移动、碰撞之后产生交互式的真实物理反应
[转]显卡帝揭秘3D游戏画质特效的更多相关文章
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
- 2d游戏和 3d游戏的区别
2D游戏和3D游戏的主要区别 一.总结 一句话总结:2D中的单位就是贴图,3D中的单位还有高 1. 3D 和 2D 游戏的区别主要体现在呈现画面和文件体积上: 2. 借助 3D 引擎可以提升 2D 游 ...
- WebGL实现HTML5贪吃蛇3D游戏
js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型, ...
- 【笔记】《DirectX 9.0 3D游戏开发编程基础》:Direct3D初始化
Direct3D初始化大概分为4个步骤: 1.获取接口IDirect3D9的指针.(Direct3DCreate9函数调用). 该接口用户获取系统中物理硬件设备的信息并创建接口IDirect3DDev ...
- Visual C#编写3D游戏框架示例
你可能对实际地编写游戏代码期待已久了.由于DirectX SDK 2004年夏季更新包含了一个牢固的示例框架组件,并且它被设计成能在你自己的代码中直接使用,同时还为你处理了很多事务,所以你只要简单的使 ...
- Unity 3D 游戏上线之后的流水总结
原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...
- 3D游戏常用技巧Normal Mapping (法线贴图)原理解析——高级篇
1.概述 上一篇博客,3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇,讲了法线贴图的基本概念和使用方法.而法线贴图和一般的纹理贴图一样,都需要进行压缩,也需要生成mipm ...
- Unity3D ——强大的跨平台3D游戏开发工具(二)
第二章 Unity3D的简单预览 每个Unity3D版本都会自带一个Demo源文件.在3.0的正式版中,自带的Demo就是网上展示的那款强大的射击游戏.在一般情况下,您只要第一次 打开Unity3D ...
- 棒!使用.NET Core构建3D游戏引擎
原文地址:https://mellinoe.wordpress.com/2017/01/18/net-core-game-engine/ 作者:ERIC MELLINO 翻译:杨晓东(Savorboa ...
随机推荐
- lucene 分词实现
一.概念认识 1.常用的Analyer SimpleAnalyzer.StopAnalyzer.WhitespaceAnalyzer.StandardAnalyzer 2.TokenStream 分词 ...
- 根据标记清空页面中所有的input对象
function clear1(flag) { //获取页面中所有的input对象 var inputs = document.getElementsByTagName("input&quo ...
- JS 之JSON
JSON是Javascript中的对象,其简单理解为下:
- File API 读取上传的文件
1, 在html 文档中,<input type="file"> 我们可以选择文件进行上传,但这时只能上传一个文件.如果加上multiple 属性,可以上传多个文件,上 ...
- Jenkins的安装与配置
资源下载: --jenkins的war包 首先从http://jenkins-ci.org/下载最新的jenkins版本,最新版本为1.594,下载的文件载体为jenkins.war: Jenkins ...
- 使用自定义标签模拟jstl的<c:for each>标签
一.自定义标签的基本编写 下面编写一个自定义标签,它可以输出当前的时间. 1.编写标签类 类可以通过继承SimpleTagSupport类实现一个标签类编写.父类为我们提供了一些编写自定义标签的快捷的 ...
- windows界面库种类
访问网址http://www.360doc.com/content/14/0612/20/13826502_386093297.shtml
- [C语言入门笔记]循环与运算符
循环与运算符 什么是循环? 循环就是一个不停工作的东西,可以反复的实现一个功能,这个才是计算机的重点.计算机可以重复的做一件事情,这样子可以省很多事情 循环的种类有哪些? While Do while ...
- cin, cin.getline等函数
char s[100]; cin>>s; // 输入一个字符串,遇“空格”.“TAB”.“回车”都结束 cin.getline(s, 20); // cin.get( ...
- java 的 sqlHelper,改改之后也适用于不使用 EF 的 C# 项目,包含查询和建表。
这个类用来拼接 sql. package com.ly.orm; public class Query { protected Query(String v) { sql = v; } public ...