这是本书中第一个实战实例,使用的是depth imposter方法来实现的Depth of view(景深),不过这个实现方法有一个缺点,就是模糊跟清晰的过渡太过明显,很容易就能看出来有一个分割平面将物体分成了模糊与清晰的两部分(书中截图不是很清晰,我多截了几张比较清晰的分割面)。

     

     

     关于算法上边,没有什么好说的,要说的就是ImposterFar Pass和ImposterNear Pass中的State Block设置时应该注意的问题。

     在这个实例中,我们用到了三个可渲染纹理(Renderable Texture,下文简称RT),其中一个用于物体渲染(即Render Target),另外两个用于模糊图像(即Blur1,Blur2)。

     物体渲染部分采取的不是Z-buffer而是W-buffer。物体绘制完成后对Render Target进行了若干次Blur(不改变该Render Target本身,而是在另外的两个RT中交替模糊处理),等到处理完毕,我们就有了两幅待混合的图像(分别是Render Target和Blur1。Blur2中存放的是处理过程中的图像,没有用处)。

     在ImposterFar Pass中(远端模糊),只有Render Target像素深度大于Blur1像素深度时,茶壶的远端会模糊,这是我们需要将Blur1中的像素绘制到Render Target中,由于Blur1属于源像素,而Render Target属于目标像素,因此我们绘制远端模糊时,使用的ZFUNC为LESSEQUAL。反之,我们绘制ImposterNear Pass时,使用的是GREATEREQUAL。

     注:推开光盘代码自己从头写,最容易犯得一个错误就是Camera中近平面设置,设置的过小(比如把near plane设置为1,而far plane设置为1500),根本就不会得到任何清晰效果,全都是模糊的(目前我也没搞明白是什么原因   :(  )。Near plane的1是系统相机默认的,改的稍微大一些就可以看出来模糊效果,我用的是50

posted on 2013-07-16 23:51  infinityward  阅读(259)  评论(1编辑  收藏  举报