
OpenGL
文章平均质量分 78
BugRunner
这个作者很懒,什么都没留下…
展开
-
全局光照渲染器
游戏场景管理的实现差不多已经告一段落了,为了对场景管理的健壮性进行测试同时也为了对场景的效果进行更好的优化,决定在此前场景管理的基础上实现一个全局光照渲染器,然后将游戏场景添加全局光照的效果。当然,这个渲染器不仅实现为游戏场景添加全局光照效果的目的,同时也可以作为自己进一步学习并实现基于物理的渲染的一个基础。寒假在家时已经开始着手做了,现在已经有了初步的框架,并有了粗略的效果,在与其它原创 2010-02-28 21:38:00 · 6120 阅读 · 1 评论 -
几种主流贴图压缩算法的实现原理
前段时间一直在搞项目上线前的各种优化,关于贴图压缩这块也是需要针对不同的平台做不同的设置,这里备忘一下在各种平台中常使用的几种贴图压缩格式及其细节,以便更加适宜地选择在特定设备下的压缩格式以便节省资源。关于移动平台和硬件设备与压缩格式的对应关系可以参考下这里,基本上比较清楚了。1. DXTCDXTC(或BC)为微软为DX而推出的基于block的贴图压缩格式,其主要采用调色板的原理来进行压缩。BC1原创 2016-03-15 23:29:09 · 31500 阅读 · 2 评论 -
Voxel Cone Tracing based Global Illumination
之前很早就看到了UE4中的基于Sparse Voxel Octree的RTGI,效果很酷,一直尝试作些研究与实现,但苦于没机会。前段得空,抽时间学习了一下,这里小结一下备忘。整个算法主要分类几个过程:体素化、Mipmap OCTree、Cone Tracing。1. Voxelization体素化整个GI算法的基础。这里体素化可以采用的方法也比较多,主要有以下几种:直接将体原创 2013-05-23 16:09:33 · 15211 阅读 · 14 评论 -
Bilateral Filtering(双边滤波) for SSAO
1. 简介图像平滑是一个重要的操作,而且有多种成熟的算法。这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪。Bilateral blur相对于传统的高斯blur来说很重要的一个特性即可可以保持边缘(Edge Perseving),这个特点对于一些图像模糊来说很有用。一般的高斯模糊在进行采样时主要考虑了像素原创 2012-01-01 20:31:49 · 55397 阅读 · 2 评论 -
三维模型的网格细化
三维模型的网格细化是基于网格离散曲面的一种表示方法,它可以从任意拓扑网格构造光滑曲面。细化方法的基本思想是:定义一个网格序列的极限,网格序列是采用一定的细分规则(一般是加权平均),在给定的初始网格中插入新的顶点,从而不断细化出新的网格,重复运用细分规则,在极限时,该网格即收敛于一个光滑的曲线或者曲面。三维模型网格的细化是图形学算法以及游戏领域中一个较为常用且有代价值的算法。网络细分是由细分规则原创 2011-03-14 22:11:00 · 19563 阅读 · 30 评论 -
辐射度算法的CUDA实现
1. 简介辐射度算法是一种经典的全局光照算法,它可以解决光线跟踪等直接照明方法中所不能表现的真实世界中的照明现象问题。虽然渲染的结果表现力强,但是问题之一就是算法的耗费较大,由于其原理就是对各个多边形面片进行着色,而且常常需要较多的迭代次数才能达到比较理想的效果,因此算法原理虽然比较简单,但效率就成为一个重要的瓶颈。 2. 辐射度算法原理辐射度算法的原理就是模拟真实世界中的光照原理原创 2010-03-10 22:29:00 · 7071 阅读 · 1 评论 -
基于CUDA的光线跟踪算法
光线跟踪是目前常用的主流绘制技术之一,由于它能方便地模拟生成复杂的光照效果,生成高质量的图像,在很多领域得到了广泛的应用,如真实感绘制,虚拟现实,可视化,计算机动画等。但光线跟踪算法的计算开销较大,妨碍了其应用效率。光线跟踪渲染的主要运算操作耗费在光线与场景求交的过程中,为此,为了加快这一计算过程,人们研究了大量的技术来加快求交操作。其中,通过建立一定的空间组织结构来加速求交计算机取得了很大的进展原创 2010-09-16 20:51:00 · 12215 阅读 · 6 评论 -
OpenGL多线程多视图的实现
OpenGL在MFC下的多视图显示在很多场合都能用到,而且表现力够强。前段时间自己需要做一个类似于MAX之类的场景编辑工具,用来编辑自己正在做的FPS游戏中所需要的场景。由于自己不懂美工、不会用MAX,所以在学习MAX与做一个自己更容易操作的编辑器两者间,就一直很纠结,最终还是选择做一个自己的编辑器。现在看来这个选择是明智的,因为用自己的编辑器来处理自己胡思乱想出来的场景时能更方便地与自己的游戏进原创 2010-01-26 20:39:00 · 10919 阅读 · 31 评论 -
光照贴图生成中的精度问题
使用全局光照贴图对场景进行渲染,首先就需要对场景进行光照贴图的生成,同时计算出场景中各个多边形的顶点所对应的纹理坐标,然后再对多边形列表的光照贴图进行合并,并进行纹理坐标的重新定位,这样就可以生成整个场景的一张光照贴图,从而实现带有光照效果的高效率渲染。理论上,在渲染时各个多边形根据它所对应的纹理坐标来访问场景光照贴图就能得到正确的显示效果,但在实际中却由于浮点运算的精度误差而使得到的纹理坐标原创 2010-03-20 23:28:00 · 5532 阅读 · 0 评论 -
Screen Space Ambient Occlusion(SSAO)
1. 简介AO(Ambient Occlusion)是全局光照中(Global Illumination)中一个很重要的概念,主要用来描述物体间的相互遮挡关系 以及漫射光线之间相互作用的效果。AO的主要方法是在每个采样点上计算它被其它几何体元遮挡的程度,进而得到在一个统一的光照强度下场景中的软阴影效果的图形算法。一般的3D处理软件中均有该算法提供,但是所有这些都是基于离线的渲染,直到在CryT原创 2011-12-25 19:04:22 · 19125 阅读 · 11 评论 -
SouTek Engine(一)之UI
引擎的第一个主部分是UI系统,而UI的主要原则就是尽可能地简约。最典型的例子就是Source引擎下的半条命中的UI系统,其尽管简单却令人印象深刻且操作方便。其实,现在想来觉得不使用第三方库,转而来做自己的UI系统是一个不太好的想法,毕竟这部分也需要很大的工程量,而且做出来之后有没有美感、效果如何等还是很重要的问题。不过由于最初已经决定了实现自己的UI系统,而且此前已经实现了大部分的工作,那就将它彻底完成得了。在目前的情况看来对ST的UI系统还是比较满意的。原创 2010-06-09 21:32:00 · 2582 阅读 · 0 评论 -
10 Fun Things to do with Tessellation
Direct3D11 extends the Direct3D10 pipeline with three new stages: Two programmable shader stages (the Hull and Domain Shaders), and a fixed function stage (the Tessellator). More details can be foundhere and here.Rendering of Catmull-Clark subdivision su转载 2010-07-10 15:17:00 · 4520 阅读 · 0 评论 -
非真实渲染(二)——Toon Shading
Toon Shading是一种简单、基本的卡通着色方式,其着色的主要效果是用大块、突变的色调来代替正常情况中的渐变色调,从而表现出卡通效果。使用这种渲染方法,然后再结合轮廓边界线的勾勒,这种渲染方式也能得到很赏心悦目的表现效果。 其主要实现方式即是计算得到当前像素得的法线与光线之间的夹角,然后根据此夹角大小在颜色表中查找当前像素所应具有的Toon color,用这个颜原创 2010-04-02 22:09:00 · 9206 阅读 · 0 评论 -
OpenGL Geometry Shader
Geometry Shader可以处理Vertex Shader和Fragment Shader不能完成的一些操作。不含GS的可编程管线的传统处理流程是:1. 顶点数据准备2. Vertex Shader操作3. 完成Vertex Shader4. 光栅化操作5. Fragment Shader6.原创 2010-04-06 17:18:00 · 7914 阅读 · 2 评论 -
非真实渲染(一)
轮廓和边界的提取是非真实渲染中一个常用的表现方法,由于它的卡通描述风格,尽管结构简单但却对整体效果的表现有极大的增强效果。基本的轮廓边界提取方法有基于图像空间和基于3D空间的方法:基于图像空间的方法利用传统渲染管线来得到当前模型投影的辅助信息,然后用这些信息来提取模型的轮廓和边界。这种方法速度较快,效率较高,但是提取的轮廓可能会不连贯,而且得到的轮廓是基于像素而非几何的,因此一般不可控,不太原创 2010-03-30 23:04:00 · 7876 阅读 · 0 评论 -
GLSL实现ShadowMap及阴影软化
Shadow Map是一种成熟的实时阴影生成技术,由于其实现较为简单、方便,而且因为是基于图像空间的,故而与场景的空间复杂度关联度不大,故而在游戏中广为使用。原理:1. 生成深度纹理。将场景的深度值在光源所在的投影坐标系下进行生成并存储,进而得到深度纹理。 2. 正常渲染场景并查询深度纹理进行阴影判断。在片断着色器中将当前片段变换到光源矩阵中,得到该片段在此坐标原创 2010-03-27 19:25:00 · 8932 阅读 · 4 评论 -
OpenGL Buffer Object
OpenGL的缓冲对象提供了一种高效的数据操作及吞吐方式,这此操作涉及整个渲染管线的多个环节,用来提高OpenGL的实现效率。常见的缓冲对象有:顶点缓冲对象(VBO)、像素缓冲对象(PBO)和帧缓冲对象(FBO),各种缓冲对象的操作方式及应用场合不尽相同,但主要都是在关系到内存与显存之间需进行数据传输与交互时而进行的优化操作,因为内存与显存之间的数据交互在当前的硬件渲染架构下是必须的,但效率却又受原创 2010-03-08 16:08:00 · 6635 阅读 · 0 评论 -
VS中CUDA环境的配置
首先,需要安装CUDA显卡驱动、CUDA Sdk及CUDA Tool-Kit。 1. 自定义链接模式a. 在*.cu上右键【属性】->【常规】->【工具】,选择“自定义生成工具”b. 选择“自定义生成步骤”,在“命令行”使用以下设定: Release模式:"$(CUDA_BIN_PATH)/nvcc.exe" -ccbin "$(VCInstallDir)bin"原创 2010-03-07 20:04:00 · 4420 阅读 · 0 评论