随笔分类 -  图形

摘要:Shadow Mapping已经成为当前3D游戏的标配。传统SM+PCF可以很好地实现日光环境下的Hard Shadow,但如果要实现由昏暗灯光所产生的Soft Shadow,则要么效果过于生硬(sample次数少)要么效率低下(sample次数多)。因此,越来越多的游戏开始使用能够充分利用硬件特性的软阴影算法。这里主要总结各种Soft Shadow Mapping的算法思想和推导过程,不提及实现上的细节和具体代码,等有空再写写Demo。本文为原创内容,转载请注明出处。Standard Shadow MapsShadow Map的基本思想:Light View画一遍Depth,然后Camera 阅读全文
posted @ 2012-02-07 12:09 oayx 阅读(4442) 评论(0) 推荐(0) 编辑
摘要:完美的画面已经离我们不再遥远——反锯齿技术浅析不管现今的游戏画面有多完美,人物和环境有多真实,但游戏画面的构成的主要方式仍然没有得到改善:一帧画面由成千上万像素构成。这意味着物体多边形的轮廓最终是锯齿状的图形。所以画面质量不可能达到理想的标准,除非完全消除“锯齿”。 别担心,精美的画面品质是要牺牲速度的代价来换取的,并且各大显卡厂商都有自己独到的反锯齿技术,他们新的图形加速卡都纷纷支持全屏抗锯齿。完美的画面已经离我们再遥远。超级采样(Supersampling)无论是什么样的抗锯齿技术都是在超级采样技术的基础上发展而来的。在超级采样技术中,画面里的每一个像素点都被拆分成了几个子像素点,然后对它 阅读全文
posted @ 2012-01-20 15:27 oayx 阅读(1615) 评论(0) 推荐(0) 编辑
摘要:懒病又犯了,很多事情,你自以为囫囵吞枣,会了,可其实你不会,但亦有很多事情,你害怕你不会,但其实不妨来个囫囵吞枣先!戒贪戒急,戒骄戒躁,多谢多想多练,得时常打开RM和Word压压自己,好吧,继续上篇所讲,由于前人已有铺路,我就偷懒了,仅作实现,本篇内容同样转自逍遥剑客的Blog:1, 热流扰动 柏松分布• 每个人都对自然界中的这种大气效果很熟悉• 光线在穿过不同密度的介质时会弯曲热微光• 热空气密度比冷空气小• 密度影响介质的折射率• 热空气上升的同时会被冷空气替代, 这会改变光射入眼睛的路线折射率的部分改变会导致我们看到的景物发生扭曲,具体可以参照一下实现:• 渲染场景到RGBA离屏缓存(可 阅读全文
posted @ 2012-01-20 15:26 oayx 阅读(2538) 评论(0) 推荐(0) 编辑
摘要:这是个最近几年才开始出现在实时游戏中的技术,其实概念早在2001年的时候就由一个日本人在论文中提出了,而后又有很多人在实时贴图方面上发表过各式各样的论文,到2006年的时候由另一个日本人(看来日本人在视频游戏中做出的努力和贡献确实不小)在论文中较好的实时呈现了这个算法,这些人为了区分自己的算法,不停地添加了各种各样的副名称”with offset limited”、“Occlusion”、”with Approximate Soft”等等,不过宗旨都是一样的~ 我在网上大概搜了搜,找到几篇也都是把它讲的很玄的,真正清楚阐述的,不多,呵呵,在这里把我的理解记下来,权作笔记。 视差映射的宗旨和.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(3355) 评论(2) 推荐(0) 编辑
摘要:2009年3月17日 阅读评论 发表评论 这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这里发一点关于其中一个用来完成凹凸贴图计算中将光向量转向顶点所在的切向量的细节,这个在当时的例子中是通过API实现的,这里简单描述一下原理,以下翻译自OpenGL.org中关于Tangent Space的阐述。 为了能够正确的完成凹凸贴图中偏移的计算,光向量L必须转换到切向空间中,所谓的切向空间包括3个轴:T,B和N。其中T是该点切线向量,平行于参数曲面上S方向上的增量(我理解应该就是在多边形曲面上的切.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(1887) 评论(0) 推荐(0) 编辑
摘要:动态模糊近几年广泛应用于游戏制作的一种特效,可以使得游戏所呈现出的运动画面更接近于真实相机所拍摄出的效果。 在真实世界中,运动模糊是指在相机拍摄画面时,由于被拍摄物体在相机快门曝光的短暂时间内有一定幅度的运动,造成拍摄出的画面产生残影和模糊的效果,通常相机只有在捕捉高速运动物体或者相机本身处在高速旋转中会出现这种效果。 那么如何能利用GPU在游戏画面中实现这一效果的呢? 其实原理和实现都非常的简单,实现Motion blur的方法也有很多,这里以DirectX9自带Sample中的方法为例进行说明。 我们知道在游戏中对于画面的渲染是一种单帧渲染,通常情况下,两帧之间并没有直接关联,但是... 阅读全文
posted @ 2012-01-18 10:11 oayx 阅读(805) 评论(1) 推荐(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 阅读(2632) 评论(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 阅读(2453) 评论(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 阅读(2855) 评论(0) 推荐(1) 编辑
摘要:这个比较基础了,不过基础最重要,往往应该理解透彻,并且反复复习。 我们知道在3D画面渲染过程中对于模型的计算的一部分被称为Transforming and Lighting(T&L)阶段,其中Lighting表示光照,而Transforming就是指的坐标变换,这两部分的计算也是3D场景中计算最重要基础的一步。 空间坐标变换主要的工作就是将处于局部坐标系的模型转换到用户屏幕所在的屏幕坐标系内。 而这个过程的计算上主要是来自线性代数中的知识,我们知道在线性代数中,线性的变换是可以用矩阵来表示的,而通过将向量[x,y,z,w]同变换矩阵相乘即可完成相应的变换,这正是我们实现空间坐标变换的数 阅读全文
posted @ 2012-01-18 10:07 oayx 阅读(13067) 评论(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 阅读(1650) 评论(0) 推荐(0) 编辑
摘要:好吧,既然顶点变换都花那么多时间写了,把光照也写了吧。 不过这个比起顶点变换应该好写多了,至少不用画那么多矩阵和公式了。 经过是空间坐标变换的模型的位置和角度得到了正确的诠释,但是这些信息只够我们来绘制模型的边框,对于物体表面的细节表现,就无能为力了,这就需要我们来进行光照的计算。 实时渲染的游戏画面通常使用经典的Phong光照模型来进行计算,不同的情况下可能计算的公式会有细微调整,但都是利用环境光+漫反射光+镜面反射光的模型来描述光对物体表面的影响。 环境光 环境光主要模拟场景中普遍存在的光源和各个物体反射过来的光线,位于理想的模型中的环境光是均匀的分布在场景的各个角落,均匀的照射在... 阅读全文
posted @ 2012-01-18 10:06 oayx 阅读(747) 评论(0) 推荐(0) 编辑
摘要:Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。人的眼睛也是相同的原理,这就是为什么当我们从一个明亮的环境突然到一个黑暗的环境时,可以从什么都看不见到慢慢可以适应周围的亮度,所不同的是人眼是通过瞳孔来调节亮度 阅读全文
posted @ 2012-01-18 10:04 oayx 阅读(4887) 评论(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 阅读(958) 评论(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 阅读(1960) 评论(0) 推荐(0) 编辑
摘要:OpenGPU这些天又冷下去了, 转篇Napoleon314 大牛的分析,排版好乱,见谅,耐心读,这是个好东西,注意看他自己的实现,是个技术狂人啊,Ogre焕发次时代的光芒啊~~~努力-----------------------------------------------------------------------转载自:http://www.opengpu.org/viewthread.php?tid=2870&extra=page%3D1&page=1--------------------------------------------------------- 阅读全文
posted @ 2011-10-09 17:28 oayx 阅读(1193) 评论(0) 推荐(0) 编辑
摘要:Azure大大那里转来:http://www.azure.com.cn/article.asp?id=429一、游戏光影的范畴 实际游戏制作当中,狭义的灯光只是指程序实时根据灯光影响的顶点色和动态阴影,但实际应用当中,影响玩家整体感觉的光影效果,也就是广义上的光影效果包含的范围要更加广泛。程序的即时光影,shader的定制固然对光影效果至关重要,美术制作的lightmap,normalmap,VertexColor乃至Glow都可以构成一般玩家认知上的灯光效果。即是说,在游戏制作应该以游戏玩家的感觉为基准整体的设置光影的效果,而并非仅以技术手段作为分界,对于游戏制作来说,综合程序美术的多种表现 阅读全文
posted @ 2011-10-09 17:05 oayx 阅读(544) 评论(0) 推荐(0) 编辑
摘要:ATI 的头发渲染方案: 1. 在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。 2. 渲染时使用需要以下 4 个 pass 3. 最终的渲染效果 此方案不需要实时的三角形排序,效果也比较理想。但是 4 个 pass 开销比较大。 Pass1 和 pass2 可以合并成一个 pass ,最终可能需要三个 pass 。 经试验,此方法非常适合头发这种大部分不透明,少部分半透明的物体渲染。效果相当理想。同时应该也比较适合大面积植被渲染。 参考: Practical Real-Time Hair Rendering and Shading hair rendering and shad 阅读全文
posted @ 2011-08-18 16:43 oayx 阅读(6484) 评论(0) 推荐(0) 编辑
摘要:延迟渲染亦即延迟着色是近几年流行起来的技术,它最大的优势是可以实现同屏中n多的动态光源(十几到几十个)。这在以往的渲染管线中是很难实现的。以下是我对现有的相关技术文献的摘录和总结。渲染流程延迟渲染管线可分为四个阶段:geometry, lighting, composition, post-processingPost-processing阶段与传统的forward shading没有太大差别,这里不提,只说明一下前三个阶段。Geometry阶段:将本帧所有的几何信息光栅化到G-buffer。包括位置,法线,贴图等。Lighting阶段:以G-buffer作为输入(位置,法线)进行逐像素的光照 阅读全文
posted @ 2011-08-18 16:15 oayx 阅读(3705) 评论(0) 推荐(0) 编辑
摘要:DirectX 10另一个引人瞩目的特性便是引入了Shader Model 4.0,那么,Shader Model 4.0能够带来怎样的新特性,特别是将它与DirectX 9.0c中Shader Model 3.0相比时? 引入新Shader : Geometry shader DirectX 10新引入的Geometry Shader,可以简单地编程操纵几何图元,同时, vertex、geometry、pixel shader采用了统一的Sahder架构。 Geometry shaders是可编程图形流水线的一大进步。它第一次允许由GPU来动态的生成和销毁几何图元数据。通过和新的数据流输出功 阅读全文
posted @ 2011-08-18 15:48 oayx 阅读(1693) 评论(0) 推荐(0) 编辑