- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 MSAA 的基本原理
Multi-sample Anti-Aliasing(MSAA)是DirectX内部集成的一种AA方法,类似于SSAA,它会在更细的精度上采样pixel,从而减少三角形边缘的锯齿。MSAA的基本原理如下:上图中,黑色方块代表了一个pixel,中间的圆点代表了这个pixel的中心,其余的四个叉是采样的位置,称之为sample吧(这些位置一般是由硬件自己实现的)。三角形在光栅化的时候,只要
2013-04-01 16:06:50
16504
4
原创 DX11中的constant buffer的padding原理
今天写了一些dx11的东西,有一个bug调了好长时间才抓到,总结下。Constant Buffer是shader model 4.0以上的一个新的特性,主要的目的就是为了把离散的变量集中起来,从而提高传输数据的效率。constanb buffer是需要做padding的,和cpu的padding逻辑相同,不过constant buffer的padding是128位对齐的。例如下面的结构
2013-03-23 22:34:50
5012
2
原创 把渲染器中加入了stereo vision算法
上周末突然好奇3d电影的成像原理,就研究了一下,发现和ray tracing里面的景深算法有些异曲同工之处。就自己实现了一下,分别实现了ray tracing和raster的版本。最近也比较忙,也不打算详细描述stereo vision的算法细节了,实际并不复杂。光线跟踪中,需要改变下光线生成的代码。而光栅化中,则只需要改变相应的投影矩阵(当然,这个投影矩阵是没有现成的d3dxperspe
2012-11-10 10:28:34
3681
3
原创 CEGUI事件处理流程简单分析
这段时间看了下CEGUI的代码,简单记录一些东西,防止以后想看的时候忘太多。这次就记录下CEGUI的事件处理流程吧。CEGUI的事件处理是通过以下几个类来完成的,EventSet, Event , Connection ( BoundSlot ) , SubscriberSlot , SlotFunctionBase ( 以及它的很多子类 )。他们之间的关系在CEGUI的代码中还是比较清晰
2012-05-21 10:55:35
4549
原创 Path tracing 实现
渲染器已经断断续续做了三个月的时间了,加了一些基本的功能。这周加入了path tracing算法和OpenMP多线程支持。贴几张图Path tracing收敛速度实在是慢啊....还好OpenMP用起来比较简单,几行代码就可以把程序并行了。
2011-09-02 17:49:27
8328
2
原创 Uniform Grid , KD-Tree , BVH 性能比较
Ray tracing中,每条光线都需要和场景中所有的图元求交(这里我们假设所有的图元都是三角形)。Brute force的方法就是一点一点的遍历每个图元,然后找出与光线交点距离光线起始点最近的图元,当然这种方法的算法复杂度是O(N)的,对于少量的图元还可以,如果图元数量很多,光
2011-07-25 20:49:05
7510
原创 在离线渲染器中应用MERL BRDF
BRDF(Bidirectional Reflection Density Function),即入射光线的irradiance和出射光线的radiance的比值,在图形学中被用来描述物体的表面反射属性,BRDF的值一般来说由几个参数决定,入射光线的角度、出射光线的角度、光谱以及
2011-07-14 22:50:45
6063
4
原创 CUDA 交互式光线跟踪
由于最近工作比较繁忙,博客基本不怎么更新了…… 这次也不打算写点什么,只是把之前的code开源了,把链接帖在这里,有兴趣的朋友可以check out出来简单看看。 简单列出一些信息吧: 1. 这份代码实现有UI界面,可以进行简单的交互。UI部分是用MFC实现的。 2. 在渲染图片之前,可以实时预览(当然这里不是RT)。渲染是用DX做的。 3. 有两份RT实现,
2011-06-03 21:25:00
6262
6
原创 Anti-Aliasing (SSAA , MSAA , MLAA , SRAA) 简介
前两天在浏览游民星空的时候,小编居然在文章中挂了一篇技术文章,是关于SRAA的。对于AA的了解很少,正好入职之前还有几天的空闲时间,所以就这个机会把AA的一些基本算法简单学习了一下,不过也只是学习到了一点皮毛而已。 本文将简单介绍四种反走样算法,他们分别是: SSAA: Super Sampling Anti-Aliasing MSAA: Multi Sampling Anti-Aliasing MLAA: Morphological Anti-Aliasing SRAA: Su
2011-04-09 23:23:00
24199
2
原创 PCSS 简介
本文简单介绍一下Percentage Closer Soft Shadow的原理,由于本人对于这个东西理解很浅,所以有些想法可能是不成熟的。 谈到PCSS,首先我们要介绍一下PCF(Percentage Closer Filtering),最早在1987年就被人提出的一种过虑算法,当时作者的初衷是用这种算法来改变Shadow Map的走样问题。 我把SDK中的Shadow Map简单改了一下,生成了上面两幅图片。左边的渲染图是经过PCF处理的,而右边是最普通的shadow map算法(
2011-04-05 13:50:00
18911
4
原创 关于latex制作简历(Moderncv)中文不能复制的问题
本文不是一篇技术文章,只是昨天晚上闲着没事,突然想起来Moderncv简历模板的一个问题:中文无法复制。其实之前我一直没有意识到,直到HR告诉我需要换一个能复制中文的简历,当时因为着急,所以被迫换了个word的,效果非常糟糕。因为这个问题,这个模板很可能就不再实用了。但是由于这个是我见到过的最好的简历模板,所以总觉得很遗憾的。所以今天中午花了点时间把这个问题搞定了, 首先,我们先看下这份简历吧,最开始直到这份模板是一个学长在用,我第一眼看到了就喜欢上了这个简历。很简洁,内容很清晰: 上面
2011-03-20 13:47:00
10553
1
原创 PBRT学习笔记: 颜色在离线渲染中的表示方法
本文简单总结下PBRT中的第五章的前半部分,是关于光谱的一些内容。这部分的内容相对而言比较独立,不受其他模块的制约。 计算机是一个有限的资源,我们的显示器同样是只能表示有限的信息量。举个简单的例子,对于一个普通的LCD 22寸的显示器而言,假设分辨率是1650*1080,而每个pixel只能表现出2的24次幂种不同的颜色,那么实际上一个屏幕最多能表示的信息也就是1650*1080*(2^24)。这里我们抛开分辨率不谈,只考虑一个pixel所能表示的信息量,其实只有2^24种不同颜色的表现能力。而我们现
2011-03-18 15:56:00
4151
1
原创 AMD显卡中的Hyber-Z的工作原理
本文简单总结了Emil Persson的文章Depth in Depth的一些内容,基本上是关于光栅化管线中的Z compare部分的一些工作原理以及优化方法。由于文章很早了,所以最新的硬件可能会有一些更好的特性,但是这些理解这些基本内容还是有一定好处的。 光线跟踪中,三角形的剔除是通过找到与光线的最近交点搞定的,从某种意义上说,空间划分结构(例如KD树)起了很大的作用。而光栅化采用了一种完全不同的工作原理,即深度缓冲。这种机理的好处在于工作效率较高,而且从正确性来说基本可以满足要求(当然,如果nea
2011-03-17 21:19:00
3620
原创 PBRT学习笔记:在单位圆内部均匀采样
在一个单位圆内部均匀采样,即在单位圆内部随机取一个采样点,而每个采样点被取到的概率都是1/Pi。这个问题看似非常简单,但是可能要比想象中复杂一点。这里的采样我们从canonical uniform variable开始,即我们只能够生成从0到1的随机数,而其分布是均匀分布的。 首先,最容易想到的方法就是rejection method。在单位圆的外部做一个Bounding Box,紧紧的包住这个单位圆。然后用两个随机点分别在两个轴向上取点,从而均匀的随机提取正方形内部的一个点。然后进行简单的测试,当这个
2011-03-05 18:52:00
12305
5
原创 PBRT学习笔记:利用Monte Carlo算法模拟积分
Monte Carlo算法经常会被用来进行定积分的运算。在光线跟踪中,经常会有一些不定积分的运算,由于引入了场景、光源等诸多因素,这些积分很难通过分析模型计算出积分的结果。从而这些积分的运算必须通过其他的方式进行,而Monte Carlo算法刚好可以解决其中的诸多渲染积分,从而被广泛应用到光线跟踪算法中。 对于Monte Carlo算法本身,我现在了解的十分有限,所以不乱介绍了…… 我们先来看一个最简单的Monte Carlo算法的例子吧。求一个单位圆的面积,结果很简单,就是π。当然这是前人的
2011-02-27 20:30:00
7947
1
原创 PBRT学习笔记: KD树的一点优化技巧
KD树作为光线跟踪的加速结构,一直以来是光线跟踪中的一个研究热点。一个高效的KD树对于光线跟踪算法具有非常重要的意义。本文简单总结下PBRT中的KD树的一些有价值相关内容。首先,我们看一下PBRT中的KD树的一些重要内容,然后会解释其中的一部分内容: 1. 该KD树是基于SAH模型的。KD树的创建算法的复杂度是O( n * log(n)2 )的,这个复杂度在单核算法中不并不是最好的,是一种基于入度和出度的创建算法。On building fast kd-trees for ray tracing, a
2011-02-02 16:00:00
9076
2
原创 PBRT学习笔记:光线跟踪中的景深算法
景深是人眼视觉系统中的一种自然现象。同样,相机里面也有景深的效果,这是由于相机的成像光圈的半径是有一定大小的,从而导致了成相平面中的某些点可以‘看到’镜头外面的一部分场景,而这些场景的共同作用,导致了一种模糊现象。 景深的效果在计算机图形学中被应用广泛,电影,游戏里面经常会利用景深特效来强调画面重点。相应的,已经有了很多成熟的算法在不同的渲染方法上,光栅化可以很高效的实现景深的算法。而本文将简单介绍景深效果在光线跟踪中的实现,以及一些基本原理。 首先,看看景深效果是什么样子,让我们对他有个直观
2011-01-23 13:27:00
9074
2
原创 PBRT书刚刚入手
下面是在淘宝淘到的一本PBRT第二版,等了五天终于盼到了,发个图庆祝一下。 网上有PBRT第一版的手稿pdf,之前一直用ipad读那个版本的书,不过因为太累眼睛,所以就打算买了这本了,还是有很大区别的。 首先,这个版本比网上下载到的第一版手稿好很多,解释问题也更清晰。之前看那个pdf,光谱的部分看了好几遍,也没理解它像说啥。看了这个第二版,一遍就基本理解了。 其次,ipad看paper还可以,对于这么厚的一本书来说,还是没有纸好,太累眼睛,每天都看得头痛。换了纸制版的书,还是舒服很多。
2011-01-22 02:23:00
11874
1
原创 编译luxrender源代码
又有快小半年没有更新我的博客了,这次记录下我编译LuxRender的过程吧,这东西基本上是我至今为止编译过的最麻烦的东西。这篇博文里面介绍了编译LuxRender的最基本过程,在windows下进行编译。由于LuxRender用了多个三方库,所以本文会涉及到boost、freeimage、openexr的编译过程,其中有很多需要修改才可以编译的过程。
2010-08-04 11:57:00
6311
原创 实例化的基本原理
引言: 最近刚好有个项目要用到这个技术,就学习了下DXSDK的Sample里面的Instancing10。 实例化的技术是利用多个顶点缓冲区有效的合并,减少Draw Call的次数,从而有效的提高程序的性能。实例化比较适合于相同物体的重复渲染,例如粒子系统,草被模拟等等。 本文实现了一个非常简单,甚至简陋的实例化的Demo。虽然Demo非常简单,但是实例化的每个必要的
2009-12-21 14:27:00
5905
2
原创 读取Obj格式的模型文件(Dx10)
引言: 最近开始用DirectX 10了,感觉和Dx9还是有一些变化的。虽然还不能完全理解这些变化所带来的优势,但是基本还是适应了。 唯一觉得不适应的就是在Dx10的接口里面,D3DX库里面已经没有对于.x模型文件的直接支持了。就是说不能通过D3DX来读取.x模型文件了,Dx10提供了一种新的模型格式sdkmesh。但是为了读取这种模型,或者自己写解析器,可能会很复杂,或者
2009-12-07 22:23:00
10313
5
转载 深入理解Direct3D9
深入理解D3D9对图形程序员来说意义重大,我把以前的一些学习笔记都汇总起来,希望对朋友们有些所帮助,因为是零散笔记,思路很杂,还请包涵。其实只要你能完美理解D3DLOCK、D3DUSAGE、D3DPOOL、LOST DEVICE、QUERY、Present()、BeginScene()、EndScene()等概念,就算是理解D3D9了, 不知道大家有没有同感。有如下几个问题,如果你能圆满回答就
2009-12-04 18:28:00
1573
1
原创 ATI 流计算介绍
引言: 随着GPU的并行处理能力的不断提升,GPU的特性被不断的应用于图形无关的应用中,并获得了非常大的速度提升。大量的应用开始工作在GPU上,而不是利用多核CPU进行加速。类似于光线跟踪,光子映射等开销很大的计算都可以在GPU上达到静实时的性能。 本文介绍了ATI流计算的一些基础知识,对于CAL,Brook+或者OpenCL有兴趣的朋友,可以看看。正文:ATI
2009-12-04 18:03:00
3533
4
原创 用CAL直接访问Dx的纹理资源 (interoperability)
引言: 虽然GPU已经被用于很多通用计算当中了,但是还是有很多GPGPU的研究始于图形图像相关的,例如光线跟踪, 流体模拟等等。我们经常会需要通用计算的接口去访问DX或者OpenGL里面的一些资源。由于图形接口的纹理资源都是在显存里面存储的,如果仅仅为了让GPU的内核访问这些资源,就必须把图形接口的内存从显卡传到主存,然后在转换成相应的GPGPU接口形式传会显卡中,这样无疑繁琐了
2009-11-28 20:40:00
1415
原创 利用CAL进行并行计算
引言: 对于初学GPGPU的朋友,基本上都是从Brook+,CUDA C或者OpenCL开始的,因为这些接口的Kernel都是基于类C语言进行开发的,相对来说容易很多。就现在而言,CUDA C的接口会成熟一些。但是很多人的显卡是A卡,因为A卡的Graphics相对好一些,对于这些朋友如果想在自己的机器上进行高性能计算,可以选择CAL进行开发。CAL(Compute Abstract
2009-11-27 20:37:00
1029
原创 强烈推荐使用MS的Windows Live Writer软件。
今天刚刚知道博客上的文章是可以离线发布的,接触到了MS的Live Writer,非常好用的东西。强烈推荐各位维护博客的朋友使用该软件,它可以离线编辑你的博客文章,然后发布上去。(这东西估计已经出来好几年了,但是我今天才看到……) 使用方法非常非常简单。 首先,下载这个软件:http://download.live.com/writer 然后,如果第一次运行,他会提示你设置账户。不是
2009-11-27 12:44:00
943
转载 介绍Brook+的kernel到IL的转化方法和优化技巧
引言 进行GPGPU编程,很多人(包括我在内)会选择从Brook+入手。Brook+的kernel编写是基于C语言的,易于编写和理解,而且Brook+的运行时处理了很多繁琐的细节,使到GPGPU编程变得非常的简单。但是随着设计和应用的深入,Brook+就不再是理想的GPGPU的编程语言了。主要原因有两个: 1. rook+的运行时效率不高,调用kernel有一定的额外开销,而且
2009-11-27 11:15:00
1602
Billiard
2008-06-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人