Depth Of Field(DOF) DX9

在以前学习的各项技术中,DXSDK均标示那些案例为中等难度。而这次学习的Depth Of Field确实高等难度,本想着这次可能会学很久,结果看完这个sample的Doc之后,发现使用的技术很简单,才花了一天时间就学完了(如果自己能更仔细估计能更快),真不清楚DX是按哪个标准划分难度级别的。闲话少说,进入正题。

 

Depth Of Field中文我觉得可以翻译为视野范围。更准确的说就是视野中能清晰辨别物体的范围或者深度。其实我们人的眼睛看东西也是这样的,在我们视线聚焦的地方物体时最清楚的,而旁边的物体是不怎么清楚。这种效果可以采用DOF技术来实现。实现DOF的技术有很多,在《Real-Time Rendering》中介绍了三,四种,今天要讲是其中一种,被其称为Backward Mapping。

 

今天的这个技术主要可以分为两部分:

  1. 设定视空间内的一个平面为聚焦平面,接近这个平面的物体会更清楚。然后求出每个点到这个平面的距离,距离越大这个点需要被模糊化更厉害,反之亦然。
  2. 根据每个点的模糊化程度,在指定的模糊图案中采点,并根据这些点的颜色值进行加权求平均,决定最后的颜色。

我们主要讲解一下两个部分的重点难点:

  1. 如何定义一个平面?根据平面公式,平面定义需要一个法向量和一个到原点的有符号垂直距离。所以平面可以用一个4维向量表示,前3个表示法向量,最后一个表示到原点的有符号垂直距离。特别注意到原点的有符号垂直距离,因为我们经常会只想着距离,而忘了其是有符号。如果想设置一个在视空间中z=3的平面,法向量假设是(0,0,1),那么最后一个w因为是-3,而不是3.我就在这里吃了亏,不过确让基本功更扎实了。
  2. 求点到平面的距离。其实很简单,我们只需要将点变换到视空间,然后用此时的坐标和刚才介绍平面4维向量做点积就可以了,得到的就是到该平面的有符号距离。如果点在平面法向量所指的那侧,那么有符号距离是正的。反之,则是负。为什么做点积就可以得到呢?这就是向量之间点积的几何含义。不清楚的话,需要自己搜集资料好好巩固一下。
  3. 模糊图案是怎么回事呢?就是我们设定一系列偏移点,这些点主要是让我们要处理的点去访问其相邻的点,用这些相邻的点进行权重相加求平均得出最后该点颜色。这些相邻点组成的图案就是模糊图案。这个案例中采用的是2个六边形,一个小的一个大,且两个放置得相互垂直。

其实这个案例中还提供另外一种方法就是将模糊图案直接记录到top-level四边形的纹理坐标中,那样可以支持更低级的ps版本。

这个案例比较简单,我暂时能想到重要的地方就这几处了。

时间: 2024-10-24 01:40:09

Depth Of Field(DOF) DX9的相关文章

《基于MFC的OpenGL编程》Part 2 Setting up OpenGL on Windows

WGL – Windows的 OpenGL扩展层 The WGL extension consists of a set of functions (wglCreateContext, wglDeleteContext etc.) and structures (such as PIXELFORMATDESCRIPTOR, GLYPHMETRICSFLOAT) etc. Thus every OpenGL implementation has a platform-specific portio

相机的那些事儿 - 概念、模型及标定

说起相机大家都比较熟悉,现在已经是手机的标配和卖点,而且做的非常便捷易用,随便按都能拍出不错的照片,但如果想更手动.更专业一点,或者将相机用于工业应用(如机器视觉.摄影测量等),还是需要了解一下成像方面的东西,本文力求通俗易懂,先介绍一些相机相关的基本概念,然后对相机的标定过程进行简单的阐述. 一.基本概念 1.景深 我们拍照片的时候常有"虚化"的效果,其实就是利用"景深"来突出重点: 上图只有中间部分是清晰的,远景和近景都模糊掉,原理上从下图可以理解 即理论上只有

What is Away3D

做了几个基于Flash平台的3D的项目,一路走来收获颇多.Away3D作为一个开源的Flash3D引擎,在3D页游领域,无疑是当前OGRE在国内的地位. 翻译出了多年前做Away3D中国社区的时候翻译的一篇文章,以此记录这段难忘的经历! 什么是Away3D?(What is Away3D?) Away3D是一个开源的,基于Flash平台的实时3D引擎.这个项目最初是由Alexander Zadorozhny和 Rob Bateman 在2007年开始的.没想到这一发就不可收拾.下面是一些Away

Epic公布虚幻3引擎新视觉特效视频及最新版UDK

11月25日,Epic公布了一段虚幻3引擎的最新视觉特效的演示视频,同时放出了最新版的UDK(Unreal Development Kit 虚幻开发包). 虚幻3引擎(Unreal Engine 3)又称虚幻引擎3,是一套为DirectX 9/10 PC.Xbox 360.PlayStation 3平台准备的完整的游戏开发构架,提供大量的核心技术阵列,内容编辑工具,支持高端开发团队的基础项目建设. 目前使用虚幻3引擎开发的著名游戏有: <战争机器>(Gears of War)(欧美-Epic

Epic公布虚幻3引擎新特性画质逼真紧追CG

11月25日,Epic公布了一段虚幻3引擎的最新视觉特效的演示视频,同时放出了最新版的UDK(Unreal Development Kit 虚幻开发包). 虚幻3引擎(Unreal Engine 3)又称虚幻引擎3,是一套为DirectX 9/10 PC.Xbox 360.PlayStation 3平台准备的完整的游戏开发构架,提供大量的核心技术阵列,内容编辑工具,支持高端开发团队的基础项目建设. 目前使用虚幻3引擎开发的著名游戏有: <战争机器>(Gears of War)(欧美-Epic

ParallaxOcclusionMapping( POM ) DX9

ParallaxOcclusionMapping(后面成为POM)是一个不错的高级技术,在我看来它是至今让我印象最深刻的技术.与其说是视差,不如说准确的视线与高度图交点算法.在<Real-time Rendering>中也见过他的前身-ParallaxMapping,但是POM的精确度更高,对于斜视效果也很不错,这将让它在未来的重要技术中占有一席之地.闲话少说,还是重在实质技术.   在DX9的samples中,由ATI提高的POM案例,确实是一个不错的实践机会.看过2006的Dynamic

{dede:field name='image' }控制图片大小设置

今天风信网络将针对dedecms中{dede:field http://www.aliyun.com/zixun/aggregation/11696.html">name='image' }标签控制图片大小教大家如何进行设置. 控制图片大小的方法通常采用CSS进行控制,但我们更希望能更过修改模板标签中的代码实现: dedecms中{dede:field name=\image\ }标签控制图片大小   方法一: 找到模板中代码的位置如: <div class="picvie

记录-ADODB.Field 错误 &amp;amp;#39;800a0bcd&amp;amp;#39;

问题描述 ADODB.Field 错误 '800a0bcd' ADODB.Field 错误 '800a0bcd'BOF 或 EOF 中有一个是"真",或者当前的记录已被删除,所需的操作要求一个当前的记录. 出现这种问题的原因是什么呢? 怎么处理??? 解决方案 返回的结果集中没有记录. 你应该在读取前判断下:if not(rs.bof or rs.eof) then ... 解决方案二: conn有没有初始化? 解决方案三: http://www.cnblogs.com/ly312/a

android-msg.obj cannot be resolved or is not a field

问题描述 msg.obj cannot be resolved or is not a field 今天SVN了一个项目,打开发现好多包没加载,加载完成后出现了cannot be resolved or is not a field,不知如何做了,代码如下其中msg.what msg.obj都提示cannot be resolved or is not a field. public class AlarmCfgHandler extends Handler { public AlarmCfgH