注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Crayon

只想做自己

 
 
 

日志

 
 

次时代游戏常见视觉效果释疑(软阴影,容积云,引擎,HDR..)  

2012-08-06 11:19:51|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、热门名词容积云、软阴影
容积云
先从前段时间炒的比较热的<战鹰>容积云说起。容积云(Volumetric Clouds),一般称为体积云或者体积雾,这个词3D MAX玩家应该比较熟悉。简单说来,在游戏中的体积云就是使用图像引擎来模拟真实云雾半透明、无规则的表现效果。
在早期游戏中,由于技术不成熟的原因,实现云雾烟火效果的方式常常使用接近2D CG处理中的手法——贴图。从家喻户晓的CS中可以很清楚的看到这一点。将烟雾品质改为“低”时,CS中烟雾的表现如同灰白色的墙壁一般。采用云雾烟火贴图的游戏经常会降低透过云雾贴图之后远景效果,甚至替换远景贴图,仔细观察就会发现,而体积云则不会。
事实上,体积云本身的定义就比较模糊,欧美业界的观点是:通过3D引擎实时生成的、能够随时间流逝而自动改变的、能够和物力引擎互动产生变化的(比如飞机飞过云雾散开),才能称为体积云/体积雾。
从上面的定义可以看出,皇牌空战6(ACE of Combat6)、微软模拟飞行04(Microsoft Flight Simulator 2004)中出现的云雾效果尽管不凡,可是并不是体积

Crysis中的体积云,可是说是目前阶段的范本,各位可以以此为参照。至于战鹰,因为游戏品质有遗憾,笔者无缘玩到此作,所以不太好对其体积云发表看法,不过从屏摄上来看是不错的。

体积云,BioShock中已经有了,不过是DX10下
软阴影
软阴影这个词笔者认为翻译有问题,或者说提法有问题。
软阴影(Soft shadow),指的是模拟现实中阴影周边虚化的效果,这里的Soft并不是“软硬”的意思,应该是“柔和”之意。在下认为,柔和阴影这种翻译方式更贴切原意。
软阴影本身并不是指一种技术,而是指通过采用某种技术达到的效果。达到软阴影效果的方法有不少,常见的动态阴影技术有shadow volumes和 shadow mapping。
阴影体积(Shadow volumes)是一种基于几何形体的技术,需要几何体在一定方向的灯光下的轮廓去产生一个封闭的容积,然后通过光线的投射就可以决定场景的阴影部分。Shadow volumes是像素精确的,不会产生任何的锯齿现象。
在很多场合下,Shadow volumes是高效的,但是其局限性十分明显,其中比较致命的就是仅当阴影被填充到一个平面上的时候才能被渲染。这就意味着投影到球型或其他非自然物体上时,这种方法便会失效,其表现为得不到自阴影。
阴影体积(Shadow volumes)
阴影映射(Shadow mapping)也叫做光照映射(Light Mapping)是一种图像空间的技术,没记错的话它出自nVIDIA的GF2时代,它在以光源位置作为视点的情况下渲染整个场景的深度信息,然后再使用这些深度信息去决定场景的哪一部分是处于阴影之中。它有锯齿并且依赖z-缓冲技术。
由于可以在不减少帧率的情况下达到真实感光照和阴影效果,编辑器允许在场景中放置任意数目的静态光源,它会为每个面预计算光流量(light flow)和静态阴影,因此现代商业3D游戏中多数都会使用到Shadow mapping。
阴影映射(Shadow mapping)。

Crysis中并没有淘汰Shadow volumes,这一点让人很惊讶。

BioShock是采用UE3引擎并且将Shadow mapping运用的相当完美的代表作。
二、关于引擎
好了,简单解释了两个大家比较关心的名词,下面对一些3D游戏中容易混淆的“引擎”做一下区分。
3D引擎
3D引擎的功能是通过主机的运算,将想要表现的物体抽象为多边形或曲线等表现形式。3D引擎即3D图形函数库,需要使用外部的开发系统来编写程序,比较常用的是MS的Visual C++。使用3D引擎来编写游戏拥有相当高的自由度,至于搞到3D引擎的渠道,有免费的,有100美元左右很便宜的,也有很昂贵的——50万美元。获得3D引擎的程序员,可以通过套用引擎中包含的各种函数来实现游戏设计。
我接触过的3D游戏引擎,有Litchtech的“Monoloth”,售价每份1万五千美元,国内比较知名的作品是A3。Epic的“Unreal3”,永久授权每份售价75万美元。
物理引擎
物理引擎通过现实中刚性物体的特性,计算它们的运动、旋转和碰撞反映,赋予游戏中模拟物体接近真实的物理表现。
为游戏中的所有细节使用物理引擎并不是完全必要的,一般游戏中存在最多的是最简单牛顿物理,要实现牛顿物理,可以通过编写脚本的方法来实现。然而,当一些新奇的游戏需要复杂的物体碰撞、滚动、滑动或者弹跳的时候(比如BurnOut),通过编程的方法就没有效率了。这时,就需要物理引擎使用对象属性(动量、扭矩或者弹性)来模拟刚体行为,这不仅可以为游戏得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握,适合于大量工作。
这里岔开话题提一下GT5P,在碰撞这方面GT5P使用了脚本而不是物理引擎模拟,这对于号称“真实”的GT系赛车来说,笔者认为是欠妥的。

越好的物理引擎对越复杂场景的模拟也越真实,比如铁链和流体。

枪神中的物理引擎让人记忆犹新。
Renderer
渲染器(Renderer)是3D引擎的核心部分,负责绘制3D图形的工作,根据硬件的使用方法,业界将渲染器区分为DirectX和OpenGL两种。差别很简单,渲染器通过OpenGL图形库来使用3D硬件。DirectX渲染器使用微软的DirectX库。相比之下,DX的发展速度更为迅速,目前的主流3D卡上面,DirectX表现更出色。
在物体被渲染器绘制之前,首先需要计算光照,并且将3维坐标转换为2维中,第一个过程称为光照(Lighting),第二个成为顶点变换(Transformation),两个合起来就是大家熟悉的T&L。渲染器可以使用自己的软件算法T&L,也可以使用硬件的算法。
Culling系统
Culling系统是3D引擎中包含的重要部分,采用Culling(剔除)系统的游戏一般只绘制出未被物体遮挡的可视部分,这样可以提高室内环境下的渲染速度,目前游戏采用的剔除系统一般是采用BSP树型系统的,这种树型系统是一种高效快速的场景组织结构。
三、3D游戏常见特效释疑
HDR
HDR(High Dynamic Range),字面翻译为高动态光照渲染,HDR这项技术是也是出自nVIDIA。
关于HDR的文章很多,这里就不过多的赘述。只补充一点就是,HDR并不是简单的高亮度或者高对比度。普通的渲染纹理中每个像素只有0~255的灰度范围,这实际上是不够的。而HDR则是除了普通的RGB信息,还有该点的实际亮度信息。
LOD
LOD(细节层次)虽然算不上什么特效,但是LOD优化后带来的视觉效果确实非常直观的。良好的LOD算法可以增加室外场景的帧率,它的基本思想是对场景的不同物体或不同部分,采用不同的细节描述:在绘制时,如果一个物体离视点比较远,或者这个物体比较小,就可以采用较粗的LOD模型绘制。反之,如果一个物体离视点比较近或物体比较大,就必须采用较精细的模型绘制。同样,场景中的运动的物体也可以采用类似的方法,运动的物体可采用较粗的模型,静止的物体采用相对精细的模型。
LOD在游戏中的良好优化,可以大幅降低远处或运动中图形的多边形数目,这样就减少了每帧要绘制的多边形数目。

地形LOD实例

LOD在游戏中的表现为桢数的上升和远景距离的增加。
动态模糊与景深
动态模糊(Motion Blur)与景深(Depth of Field)同为Pixel Shader像素渲染特效。应用在游戏中不仅是为了突出真实感,一方面也起到了掩盖画面抗锯齿的不足的缺陷,简言之,用炫来掩盖糙。
有一个比较有意思的问题是:标称24帧/秒的速度对于电影来说已经足以获得很流畅的视觉效果,而对有游戏来说为什么远达不到流畅呢?这是因为工作原理的差别。摄像机在工作的时候并非以帧为单位绝对静止的进行拍摄,它所摄下的每一帧图像已经包含了1/24秒以内的所有视觉信息,包括物体在这1/24秒内的位移。因此,在电影播放的时候按下暂停键,得所到的并不是一幅清晰的静止画面,而是一张模糊的图像。
但是,游戏中的3D图像做不到这一点,游戏里的每一帧就是一幅静止画面,如果在运动的过程中抓一张图片下来,得到的肯定是一幅清晰的静态图。所以,动态模糊技术的另一个目的就在于增强快速移动场景的真实感,这一技术并不是在两帧之间插入更多的位移信息,而是将当前帧同前一帧混合在一起所获得的一种效果。

极品中的动态模糊实例,开时间长了很多人会感到不适。
这里要特别提一下的,景深并不是一些人理解的“场景的深度”,从摄影学角度来讲景深就是在所调焦点前后延伸出来的“可接受的清晰区域”。 在拍摄照片中,将焦点对在前景的主体上,让较为模糊的远景在画面之中产生透视感,并降低其对主体的干扰作用。
3S
次表面散射(Sub-Surface Scattering),主要用于模拟不完全透明材质内部表现出的一种真实光影特效。当灯光照射到玻璃或清澈的液体表面时,灯光会穿透这些介质,3S效果可用来模拟灯光进入介质内部后发生的散射。实际上,3S的最大用处之一在于表现光源照射下的人物皮肤
,换句话说,要想表现真实的皮肤材质,3S效果必不可少。目前的许多游戏在人物皮肤的渲染上就因为缺乏3S效果而显得塑料化、橡胶化。这个,VF5是很好的反面例子。

VF5是典型的反面教材。

CG。优秀的次表面散射例子。
法线贴图
法线贴图(Normal mapping)已经用的很滥了,次世代游戏基本都会使用法线贴图。法线贴图可以理解为通过计算高细节度模型得到法线信息,并将其保存在一张高压缩比(3DC/DC5)的法线贴图之中,然后将这张法线贴图贴在低细节模型上代替原型的多边形曲面的光照计算,从而得到一个低多边形、高细节的3D模型。法线贴图的好处不言而喻,可以在保证模型拥有较高细节的同时,大幅度降低场景的多边形数。
位移贴图Parallax mapping
与法线贴图的作用有些类似,位移贴图也是在节省多边形的前提下增强3D表面的立体凹凸感。不过工作方式有所不同,位移贴图对纹理坐标进行位移,因此立体感更强,比较适合用于表现砖墙、弹孔等需要强烈凹凸落差的材质。

使用了位移贴图之后的对比。
延迟渲染技术(Deferred Shading)
延迟渲染技术可以说是未来游戏的发展趋势,其原理是先把全景多边形物体的信息比如位置、法线面、各种贴图渲染到G-Buffer(缓冲区)内,延迟打光步骤。
这样做的好处一来是可以创建大量的点光源以及产生真实的光照结果,提高画面的真实度;二来是可以避免对不可见的点进行光照,节省了资源;不过,延迟着色并不是很适合DX9,在目前的硬件上必须以牺牲MSAA(多重取样抗锯齿)为代价,而在新的DX10硬件上则没有问题 。
最新版本的UE3已经为DX10做了优化,MSAA已经完全没有问题,但是目前面世的几个采用UE3的游戏都是基于老版本的UE3开发,所以对MSAA的支持还存在各种问题,对于目前的几个UE3引擎游戏,笔者可以肯定它们都没有使用延迟着色技术。
另外,值得一提的是杀戮地带2宣布了将使用延迟渲染技术。杀戮地带2的延迟渲染使用了多重采样对每一个实时渲染管线光照、预处理和数据管理进行抗锯齿处理。
当然除了上面提到的,还有焦散(Caustics)逆光(Backlighting)阳光衍射(sunrays)球谐(Spherical Harmonics)等特效,但是还没有在次时代游戏中大量出现,因此这里就不一一陈述了。
  评论这张
 
阅读(1007)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017