摘要: Bloom,又称“全屏泛光”,是大名鼎鼎的虚幻3游戏引擎中最通用的后期特效技术~ Bloom特效的实现主要依赖于PostProcess框架,即实时绘制当前场景到一后台渲染表面,而后针对其对应贴图进行像素级渲染~ 大家还记得我们之前实现的水面效果中的反射和折射贴图吗?此即为PostProcess的典型 阅读全文
posted @ 2012-01-18 10:31 oayx 阅读(2090) 评论(0) 推荐(1) 编辑
摘要: 2009年3月17日 阅读评论 发表评论 这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这里发一点关于其中一个用来完成凹凸贴图计算中将光向量转向顶点所在的切向量的细节,这个在当时的例子中是通过API实现的,这里简单描述一下原理,以下翻译自OpenGL.org中关于Tangent Space的阐述。 为了能够正确的完成凹凸贴图中偏移的计算,光向量L必须转换到切向空间中,所谓的切向空间包括3个轴:T,B和N。其中T是该点切线向量,平行于参数曲面上S方向上的增量(我理解应该就是在多边形曲面上的切.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(1869) 评论(0) 推荐(0) 编辑
摘要: 这是个最近几年才开始出现在实时游戏中的技术,其实概念早在2001年的时候就由一个日本人在论文中提出了,而后又有很多人在实时贴图方面上发表过各式各样的论文,到2006年的时候由另一个日本人(看来日本人在视频游戏中做出的努力和贡献确实不小)在论文中较好的实时呈现了这个算法,这些人为了区分自己的算法,不停地添加了各种各样的副名称”with offset limited”、“Occlusion”、”with Approximate Soft”等等,不过宗旨都是一样的~ 我在网上大概搜了搜,找到几篇也都是把它讲的很玄的,真正清楚阐述的,不多,呵呵,在这里把我的理解记下来,权作笔记。 视差映射的宗旨和.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(3313) 评论(2) 推荐(0) 编辑
摘要: 动态模糊近几年广泛应用于游戏制作的一种特效,可以使得游戏所呈现出的运动画面更接近于真实相机所拍摄出的效果。 在真实世界中,运动模糊是指在相机拍摄画面时,由于被拍摄物体在相机快门曝光的短暂时间内有一定幅度的运动,造成拍摄出的画面产生残影和模糊的效果,通常相机只有在捕捉高速运动物体或者相机本身处在高速旋转中会出现这种效果。 那么如何能利用GPU在游戏画面中实现这一效果的呢? 其实原理和实现都非常的简单,实现Motion blur的方法也有很多,这里以DirectX9自带Sample中的方法为例进行说明。 我们知道在游戏中对于画面的渲染是一种单帧渲染,通常情况下,两帧之间并没有直接关联,但是... 阅读全文
posted @ 2012-01-18 10:11 oayx 阅读(798) 评论(1) 推荐(0) 编辑
摘要: 如何能够高效的产生更接近真实的阴影一直是视频游戏的一个很有挑战的工作,本文介绍目前所为人熟知的两种阴影技术之一的ShadowMap(阴影图)技术。 ShadowMap技术的概念应该说是最早应用在视频游戏中的阴影实现技术,有着非常高效和快速的特点,在实现阴影的同时只需要相对很小的计算负担。 ShadowMap绘制阴影主要是通过一张额外的阴影贴图来实现的,在早期的3D游戏中人物等动态运动的物体通常不绘制阴影,而场景内遮蔽关系相对确定的静态物体的阴影通常是在建立模型之初便已绘制到场景的贴图之中,这是利用ShadowMap来实现阴影概念的最初形成,而现在我们说到的 ShadowMap只是在游戏绘制.. 阅读全文
posted @ 2012-01-18 10:10 oayx 阅读(3682) 评论(0) 推荐(0) 编辑
摘要: Percentage Closer Filtering简称PCF是常用于柔化Shadow Map边缘,产生软阴影的一种技术,最早来源于1987年Computer Graphics上的论文,因为算法原理简单,实现快速而且并不会占用太多运算,所以广泛的应用于实时视频游戏的阴影计算中。 前面我们介绍过了Shadow Map的实现原理,Shadow Map的一个比较明显的缺点即是在生成的阴影边缘锯齿化很严重,而PCF则能有效地克服Shadow Map阴影边缘的锯齿。 PCF通过在绘制阴影时,除了绘制该点阴影信息之外还对该点周围阴影情况进行多次采样并混合来实现锯齿的柔化,这也是抗锯齿最通用也是最简易.. 阅读全文
posted @ 2012-01-18 10:09 oayx 阅读(2617) 评论(0) 推荐(0) 编辑
摘要: Multiple Render Target(MRT)是一种指可以使绘制程序在单帧中同时渲染多个Render Target,也就是一次Draw可以将不同的信息分别画入多个Surface。是利用Pixel Shader实现Post-Process效果中很重要的一部分。 如在上一篇Pixel Motion Blur中,单帧渲染中返回了场景中原有的画面颜色同时还有该像素点的运动速度,超出单一Surface所能表现的数据宽度的部分就是通过Multiple Render Target渲染到另一个Surface上,有了Multiple Render Target的支持,我们在Pixel Shader中就. 阅读全文
posted @ 2012-01-18 10:08 oayx 阅读(2423) 评论(0) 推荐(0) 编辑
摘要: Post Process一般是指后期效果处理,在游戏中诸如全屏模糊一些可以在渲染完整个场景后通过PS独立实现的一些效果都可以算在Post Process之列,DirectX SDK中自带了一个Post Process的例子,通过几个简单的效果阐述了后期特效的原理。 Monochrome 单色效果作用是将彩色图案转为同样对比关系的黑白图,原理很简单就是将表示颜色的RGB值转换相应的亮度值即可,这里所用的是一个亮度公式 L = 0.27R + 0.67G + 0.06B; Blur 模糊是很常见的一种后期效果,实现的方式也很简单,通过对像素点周围点多次采样混合即可得到理想的模糊效果,通... 阅读全文
posted @ 2012-01-18 10:08 oayx 阅读(2836) 评论(0) 推荐(1) 编辑
摘要: 这个比较基础了,不过基础最重要,往往应该理解透彻,并且反复复习。 我们知道在3D画面渲染过程中对于模型的计算的一部分被称为Transforming and Lighting(T&L)阶段,其中Lighting表示光照,而Transforming就是指的坐标变换,这两部分的计算也是3D场景中计算最重要基础的一步。 空间坐标变换主要的工作就是将处于局部坐标系的模型转换到用户屏幕所在的屏幕坐标系内。 而这个过程的计算上主要是来自线性代数中的知识,我们知道在线性代数中,线性的变换是可以用矩阵来表示的,而通过将向量[x,y,z,w]同变换矩阵相乘即可完成相应的变换,这正是我们实现空间坐标变换的数 阅读全文
posted @ 2012-01-18 10:07 oayx 阅读(12985) 评论(1) 推荐(0) 编辑
摘要: 环境映射是一种用来模拟光滑表面对周围环境的反射的技术,常见的如镜子、光亮漆面的金属等等。 这种技术的实现主要通过将一张带有周围环境的贴图附在所需要表现的多边形表面来实现的。目前在实时3D游戏画面渲染中经常使用的有两种环境映射。 球形环境映射(Spherical Environment Mapping) 球形环境映射是模拟在球体表面产生环境映射的技术,通过对普通贴图的UV坐标进行调整计算来产生在球体表面应产生的扭曲。 UV的计算利用球体表面的法线来计算。计算公式如下: u=Nx/2+0.5 v=Ny/2+0.5 计算公式中的Nx和Ny是表面法线的x和y分量,除以2将区间限制在[-0... 阅读全文
posted @ 2012-01-18 10:06 oayx 阅读(1598) 评论(0) 推荐(0) 编辑
摘要: 好吧,既然顶点变换都花那么多时间写了,把光照也写了吧。 不过这个比起顶点变换应该好写多了,至少不用画那么多矩阵和公式了。 经过是空间坐标变换的模型的位置和角度得到了正确的诠释,但是这些信息只够我们来绘制模型的边框,对于物体表面的细节表现,就无能为力了,这就需要我们来进行光照的计算。 实时渲染的游戏画面通常使用经典的Phong光照模型来进行计算,不同的情况下可能计算的公式会有细微调整,但都是利用环境光+漫反射光+镜面反射光的模型来描述光对物体表面的影响。 环境光 环境光主要模拟场景中普遍存在的光源和各个物体反射过来的光线,位于理想的模型中的环境光是均匀的分布在场景的各个角落,均匀的照射在... 阅读全文
posted @ 2012-01-18 10:06 oayx 阅读(741) 评论(0) 推荐(0) 编辑
摘要: Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。人的眼睛也是相同的原理,这就是为什么当我们从一个明亮的环境突然到一个黑暗的环境时,可以从什么都看不见到慢慢可以适应周围的亮度,所不同的是人眼是通过瞳孔来调节亮度 阅读全文
posted @ 2012-01-18 10:04 oayx 阅读(4883) 评论(0) 推荐(0) 编辑
摘要: 老早就想实现 Depth of field 的效果了,这几天终于有点时间来好好学习并加以实现。使用的是Render Monkey 1.71, Render Monkey的sample里的DOF的稍微有点复杂,不过效果很漂亮。我觉得只要知道了原理并实现了基本的效果就可以了o(∩_∩)o...一共分为4个pass 前两个pass效果一样 在两个不同的位置渲染两个teapot到BackBuffer这张纹理,并保存下相对聚焦区域的深度值 //渲染物体的VS代码structVS_OUTPUT{float4Pos:POSITION;float2Tex:TEXCOORD0;float3View:TEXCO. 阅读全文
posted @ 2012-01-18 10:02 oayx 阅读(952) 评论(0) 推荐(0) 编辑
摘要: 原文链接: http://www.ownself.org/oswpblog/?p=50 算法原理来自ATI实验室Guennadi Riguer、Natalya Tatarchuk、John Isidoro的论文“Real-Time Depth of Field Simulation”,本文只是对原理和过程进行简述,具体内容请参见原文。 我们知道视频游戏追求的目标就是完全真实的画面,但是早先的大部分游戏的画面在看上去似乎都缺了些什么,让画面看上去在任何角度任何距离都是完全锐利的,而这种情况在现实中是不存在的,因为有景深的存在。完全锐利的画面虽然完美,但是却让人看上去感觉不真实,这是因为在现实世. 阅读全文
posted @ 2012-01-18 09:59 oayx 阅读(1953) 评论(0) 推荐(0) 编辑