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. 矩形覆盖(codevs 1101)

    题目描述 Description 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4 ...

  2. svn: warning: 'xxxxxx' is already under version control

    [root@NGINX-APACHE-SVN pm]# svn status ? plugins ? files ? images ? data ? resources [root@NGINX-APA ...

  3. mac 下修改Hosts文件

    最近Google网站老是打不开,具体原因大家都明白,不过修改Hosts文件后,就能访问了,也算不上原创,网上一搜就能找到,自己操作记录下,希望有刚接触Mac 系统的童鞋有帮助. 第一步:打开Finde ...

  4. SU Demos-02Filtering-07Sumedian

    不足之处,欢迎批评指正. 先看脚本内容: 脚本中用到的4个参数文件,是一系列x,t数据对,数组(x,t) 运行结果,

  5. node基础 --工具

    npm  //Node.js Package Manager 查询版本号:npm --version/npm version 查询模块:npm search <name> 查看模块相关信息 ...

  6. Python核心模块——urllib模块

    现在Python基本入门了,现在开始要进军如何写爬虫了! 先把最基本的urllib模块弄懂吧. urllib模块中的方法 1.urllib.urlopen(url[,data[,proxies]]) ...

  7. Revit二次开发示例:ErrorHandling

    本示例介绍了Revit的错误处理.   #region Namespaces using System; using System.Collections.Generic; using Autodes ...

  8. 找模式串[XDU1032]

    Problem 1032 - 找模式串 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 644  Acce ...

  9. lal

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  10. 追本溯源 解析“大数据生态环境”发展现状(CSDN)

    程学旗先生是中科院计算所副总工.研究员.博士生导师.网络科学与技术重点实验室主任.本次程学旗带来了中国大数据生态系统的基础问题方面的内容分享.大数据的发展越来越快,但是对于大数据的认知大都还停留在最初 ...