http://blog.csdn.net/xoyojank/article/details/1883520
 
什么是景深效果?
景深效果,简称DOF,在人眼跟光学摄像设备上很常见.如下图:

简单地来说,就是近处跟远处的景物模糊,而焦点附近的物体则很清晰.至于为什么会产生这样的效果,我就懒得说了:p
 
那么怎么来实现这种效果呢?
看图:

从摄像机开始,按距离分成三部分:
近距离模糊,焦点范围(清晰),远距离模糊
渲染的时候按深度(即距离)进行判断,在焦点范围内则是清晰的,否则就进行模糊处理.
整个过程分三个Pass:
1.       将场景渲染到一个RenderTarget,做为清晰版.
2.       将上一步得到的RenderTarget进行模糊处理,得到BluredRT(模糊版).
3.       合成.跟据距离来判断是否应该模糊,如果不在焦点范围内则绘制BluredRT,否则就绘制RenderTarget.
 
那么,还有一个问题,深度值怎么计算呢?
公式: WDepth = Depth / Far_Z_Clip.
在这里我是把深度值存在Alpha通道中一块渲染到RenderTarget,这样在最后一步直接取color.a就可以进行深度判断了

(右图为Alpha通道,存储了深度值)
 
Shader与最终效果
sampler RenderTarget;
sampler BluredRT;
 
//焦点范围
float fNearDis;
float fFarDis;
 
float4 ps_main( float2 TexCoord : TEXCOORD0 ) : COLOR0
{  
   float4 color = tex2D( RenderTarget, TexCoord );
   if( color.a > fNearDis && color.a < fFarDis )
      return color;
   else
      return tex2D( BluredRT, TexCoord );
}
 

是不是看起来很不自然?
为什么呢?因为这样实现的DOF在清晰与模糊的交界处过渡太生硬了,所以就像分成了三部分一样-_-!
那我们增加两个过渡不就成了?
就像这样:

sampler RenderTarget;
sampler BluredRT;
 
//焦点范围
float fNearDis;
float fFarDis;
float fNearRange;
float fFarRange;
 
float4 ps_main( float2 TexCoord : TEXCOORD0 ) : COLOR0
{  
   float4 sharp = tex2D( RenderTarget, TexCoord );
   float4 blur = tex2D( BluredRT, TexCoord );
  
   float percent = max(saturate(1 - (sharp.a-fNearDis)/fNearRange),
                    saturate((sharp.a-(fFarDis-fFarRange))/fFarRange));
  
   return lerp( sharp, blur, percent );
}
 

[ZZ] 景深效果(Depth of Field) , Pass1 将场景渲染到一个RenderTarget,做为清晰版, Pass2: BluredRT , Pass3: WDepth = Depth / Far_Z_Clip的更多相关文章

  1. 基于光线追踪的渲染中景深(Depth of field)效果的实现

    图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的,其实现通常是从向成像平面上发射ray,并把trace这条ray的结果作为成像平面上对应交点的采样结果.即: 图片来自<Fundam ...

  2. 景深(Depth of Field)

    http://www.cnblogs.com/cxrs/archive/2013/03/22/DepthOfFeild.html 景深(Depth of Field) 什么是景深? 所谓景深,就是当焦 ...

  3. Unity3D图像后处理特效——Depth of Field 3.4

    Depth of Field 3.4 is a common postprocessing effect that simulates the properties of a camera lens. ...

  4. Unity Shader 景深效果

    效果 原理: 开启摄像机的深度模式,将深度保存到一张名为_CameraDepthTexture(Unity5.0之后才有)内置的纹理中. 如果深度在焦点范围内就用原图,否则就用模糊图. Shader: ...

  5. yebis error ---depth of field

    前几天在墙外无法登陆cnblogs...导致很多blogs就没写了 有几篇比较值得记下来的,但是我已经不记得了,应该和sao有关scalable ambient obscurance 我似乎回忆起一点 ...

  6. Depth of field --Circle of confusion 推导

    https://en.wikipedia.org/wiki/Circle_of_confusion https://developer.download.nvidia.com/books/HTML/g ...

  7. 最近比较迷flash professional cc 做PPT,做一个flash做动态打字效果的教程

    想做一个flash打字效果.网上的方法要不是太繁琐,要不然就是各种遗漏.在这边做一个行之有效的flash做打字效果教程. 首先我用的是最新版本的flash professional cc .但是应该和 ...

  8. 一个JS效果竟然要研究一天,我是不是不适合做前端?

    前言 今天这篇文章的标题,显然是要搞事情.一个JS交互效果,居然花费了一天的宝贵时间才研究出来,我是不是不太适合做前端? 别急,搬好小板凳,正文从这开始- 本来今天下班回来感觉有点累,想着今天就别学了 ...

  9. kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了

    先看数据: 特征如下: Time Number of seconds elapsed between each transaction (over two days) numeric V1 No de ...

随机推荐

  1. 谈谈异步加载JavaScript

    前言 关于JavaScript脚本加载的问题,相信大家碰到很多.主要在几个点—— 1> 同步脚本和异步脚本带来的文件加载.文件依赖及执行顺序问题 2> 同步脚本和异步脚本带来的性能优化问题 ...

  2. 大端(big endian)和小端(little endian)

    http://www.cnblogs.com/Romi/archive/2012/01/10/2318551.html 当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的 ...

  3. svn Error: post-commit hook failed (exit code 127) with output

    Command: Commit Modified: C:\Users\xsdff\Desktop\project\index.html Sending content: C:\Users\xsdff\ ...

  4. SQL with as

    姓名 课程 分数 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 先看下面一个嵌套的查询语句 ) 上面的查询语句使用了一个子查询.虽然这条SQL语句并不复杂,但如果嵌套的层次过 ...

  5. UML从需求到实现----包图

    上接:UML中图出现顺序 上回讲到用例图,UML中各个图之间的关系.接着根据UML建模中图出现的顺序来总结包图. 用例图确定以后.用户的需求基本上就确定了.接下来要根据用户的要求去设计系统.建模的顺序 ...

  6. Java Hour 25 Packages

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 25 Hours. Packages Programs are organiz ...

  7. BLUEZ测试报告

    测试小分队介绍: 马辰,李孟,罗凡 测试任务分类 帮助类 战斗类 道具类 敌军类 英雄类 地图类 AboutScene.h AchieveLayers.h GameLoading.h GameOver ...

  8. Android ActionBar 一步一步分析 (转)

    原文摘自:http://blog.csdn.net/android2me/article/details/8874846 1.Action Bar 介绍 我们能在应用中看见的actionbar一般就是 ...

  9. PHP扩展开发

    安装好php,进入安装目录. zbseoag@ubuntu:/usr/local/php-5.6.28/ext$ ./ext_skel --extname=mytest zbseoag@ubuntu: ...

  10. logback 配置详解【讲解较全的博客网站】

    http://blog.csdn.net/haidage/article/category/812478 详解(一)http://blog.csdn.net/haidage/article/detai ...