随笔分类 -  渲染

摘要:在实时渲染中,渲染不同物体时进行的材质切换是影响效率的主要因素之一。为了减少材质切换带来的负面影响,对需要渲染的物体进行材质排序是优化的主要思路。通过将材质进行排序,可以尽可能的减少材质切换的次数和每次切换带来的效率损耗。本文通过引入一种简单的数据结构来完成这个功能。该方案目前仅限于设计和功能实现阶段,没有进行实际的测试和优化。材质排序主要需要考虑两个方面,1-尽可能少的切换次数,2-尽可能低的效率影响。在实际操作中,这两个要求其实是相互制约的。举个例子:假设在整个渲染周期最复杂的材质包括以下3部分:纹理贴图,光照,Alpha混合。需要渲染的物体为4个:A,B,C,D。它们的材质分布如图: . 阅读全文
posted @ 2007-07-05 16:32 BadKeeper 阅读(2316) 评论(3) 推荐(0)
摘要: 阅读全文
posted @ 2007-05-12 23:23 BadKeeper 阅读(825) 评论(3) 推荐(0)
摘要:因为项目要求,最近在研究无缝漫游的室外场景技术。由于前期缺少人力,现在是直接把魔兽世界的资源转成自定义的格式来使用。转资源没什么好说的,网上已经有很多人把魔兽的资源格式拆得很详细了,包括模型格式,地图格式,DBC格式。在实现无缝漫游时,发现魔兽的数据量其实挺大的,对资源,内存和线程管理都是一个很大的考验。实现部分经过4-5次修改,目前终于基本确定的方案。现在在保持正常的前进速度的前提下,在中低档的机器上能保持较好的效率。但如果速度比较快就会出问题。优化的路途还很漫长:)。预计明天上传一些截图 阅读全文
posted @ 2007-05-11 21:37 BadKeeper 阅读(1527) 评论(2) 推荐(0)
摘要: 阅读全文
posted @ 2006-09-21 21:44 BadKeeper 阅读(479) 评论(1) 推荐(0)
摘要: 阅读全文
posted @ 2006-09-14 20:33 BadKeeper 阅读(573) 评论(4) 推荐(0)
摘要:云是用Perlin noise动态生成的,流动的效果不错。但是虽然使用光线追踪的方式计算云体的亮点,始终无法很好的作出云的体积感。等Demo完成后再修改算法吧。 阅读全文
posted @ 2006-09-11 11:24 BadKeeper 阅读(898) 评论(3) 推荐(0)
摘要:通过用躁点扰动法线图,水面显得更有质感Real time Shadow 阅读全文
posted @ 2006-09-05 16:36 BadKeeper 阅读(744) 评论(0) 推荐(0)
摘要:草是动态的,效果类似于GpuGem和Titan的结合。水面目前没有使用FFT,根据后期Demo的需要也许会加上。6400下有20-30帧左右,6800超过60帧。看来草造成的填充率瓶颈比较明显 阅读全文
posted @ 2006-09-02 21:44 BadKeeper 阅读(767) 评论(3) 推荐(0)
摘要:3D引擎作为一个名词已经存在了很多年,但即使是一些专业的引擎设计师,也很难就它的定义达成一个共识。通常来说,3D引擎作为一种底层工具支持着高层的图形软件开发。你可以把它看成是对3D API的封装,对一些图形通用算法的封装,对一些底层工具的封装。我无法准确的定义3D引擎的含义和作用,因为针对不同的用户和开发项目,3D引擎完成的功能可能都有不同。因此,我将从功能的角度来定义3D引擎,这种定义法也许能更确切的表达出一个3D引擎的真实含义。 3D引擎最基本的功能应该包括:1. 对3维场景的数据管理 这里的数据管理是一个比较广泛的定义,不同的3D引擎也许会拥有其中一个或多个功能。这些功能包括:场景管理. 阅读全文
posted @ 2006-07-30 12:12 BadKeeper 阅读(4712) 评论(3) 推荐(0)
摘要:离最后一次更新已经有1年了,实在是一段漫长的日子。虽然中间有好多次想写点东西,但总是被这样那样的事打断。在过去的一年中经历了很多,也收获了很多。有很多想法经过慢慢的积累,终于到了要爆发的境界:)。 现在学校的事已经完结,工作也进入了正轨。我决定继续保持更新这个Blog。 在过去的一年中也看了很多国内外同好/同行的blog,其中不乏经典之作。经常思考一个问题,我应该写点什么呢?继续写开发日记还是写一些图形学相关的教程?我一直对真实感渲染很感兴趣,也在作一些这方面的研究。因此一开始想写一些关于这方面的文章,但是还是否定了这个选择。因为这方面的资料实在是太多了,以其看一个初学者的简陋之作,不如go. 阅读全文
posted @ 2006-07-30 11:01 BadKeeper 阅读(345) 评论(0) 推荐(0)
摘要:最近一直在看照片级渲染方面的资料,包括信号分析,数值积分,物理光学等多个学科,越看越觉得复杂,本来开始只想看下阴影算法方面的,结果一发不可收拾了。通过一段时间的充电,发现原来对图像学中很多基础的东西都没搞懂,现在打算把光线追踪这部分也作为CAE的一大功能,虽然不是实时的,不过其中有很多算法都可以用到实时引擎那部分。这又是个大工程啊。实验室的游戏开放平台项目也开始了,CAE的实时部分暂时会放一放,目前主要的任务是两个,一个是光线追踪这部分,一个是实验室的项目。 阅读全文
posted @ 2005-08-15 18:23 BadKeeper 阅读(1267) 评论(4) 推荐(0)
摘要:看着自己的成果逐渐的成型,满足感油然而生。虽然CAE在功能,设计上都无法和商业引擎相比,但在写CAE的同时,我的确学到了很多东西。目前CAE的大体结构已经成型,当然还有很多功能需要完成。最近打算加入对CG和GLSL的支持,等功能进一步完善后我打算开放源码。注释我也大多用英文写的,希望开放出来后能有爱好者能跟我共同维护改进,就向OSG一样。 毕业设计也打算用CAE来充数了。顺便也能作为CAE的参考文档,真是一石多鸟之计,呵呵 阅读全文
posted @ 2005-07-21 23:13 BadKeeper 阅读(879) 评论(2) 推荐(0)
摘要:日期:6/28/2005完成任务:1. 特征系统数值算法(MathNew/Numerica/EigenSystem)2. 高斯点集分布算法(FitMethod/GaussPointFit) 注:只完成的高斯点集分布的3维情况,2维情况还未完成3. AABB包围体和OBB包围体创建算法(BoundingMethod/CreateBox3.cpp)注:只完成的3维情况,2维情况未完成4. BoudingVolumn的封装策略: 每个Geometric拥有>=3个BoundingVolumn(目前只考虑有3个的情况).BoundingVolumn是一个包围体的封装类,具体的几何特性由成员指针指 阅读全文
posted @ 2005-07-17 19:42 BadKeeper 阅读(697) 评论(0) 推荐(0)
摘要:为了测试最近写的代码的可行性,并对不足和功能不够的地方进行修补,我准备花一个星期时间来写一个地形的DEMO。目前完成了地形的数据结构和一些分形生成地形的算法。我采用的结构是用一个Terrain来管理NxN个TerrainPath。Terrain只是一个Node节点,本身不含顶点数据。但是提供统一接口供外部调用。TerrainPath是(2^n + 1)x (2^n + 1)大小的网格,N级Lod。这种结构便于制作超大地形,并且Lod和Cull起来都很方便。贴上两张图,都是没加纹理的。 阅读全文
posted @ 2005-06-10 12:43 BadKeeper 阅读(906) 评论(3) 推荐(0)
摘要:这段时间一直都在忙着写CoagelEngine,没时间上来更新。花了一个月的时间,现在基本把渲染器的框架写好了。渲染器是用Visitor模式实现的。同时API无关,理论上来说同样可以支持Directx,不过我没用过DX,现在只实作了GLRender。通过在场景的主节点Root(唯一)上调用Root->accept(GLRender*),就可以自动的渲染整个场景,GLRender会遍历整个场景图,智能的判断需要渲染的物体是什么类型,比如是Camera,TriMesh,TriStrip,BSpline等等。场景中的每个节点都可能在程序运行时刻改变,比如Camera会相应键盘和鼠标来改变当前的 阅读全文
posted @ 2005-06-04 13:34 BadKeeper 阅读(548) 评论(0) 推荐(0)
摘要:地形在计算机图形学中是一种比较特殊的物体,通常地形被设计为规则的网格,网格上每个顶点都根据不同的高度在网格的法线量方向进行位移.地形的高度被保存为一个名为高度图的文件中.当地形的网格结构越密集,地形的外观就显得越平滑.但同时也增加了需要被渲染的顶点和三角形数量.怎么才能在保证地形的外观平滑的前提下尽量减少需要渲染的数据呢,LOD就是基于这种想法应运而生的算法. 第一章 建立地形网格 图 1-1 如上图,先将所有的虚线当做实线看待.我们可以定义一个5X5的地形网格结构.该结构有25个顶点,其中每个顶点的X,Y坐标 [0,5]. Z坐标也就是所谓的高度值被保存在一个float[5X5]的... 阅读全文
posted @ 2005-04-18 16:20 BadKeeper 阅读(2445) 评论(1) 推荐(0)
摘要:最近看了一本Foucus on 3D Terrain,是一个16岁的高中生写的,虽然这本书主要是总结了当时的大部分地形算法,不过也很让我吃惊了.想想我16岁的时候还在干什么,真的感到荒废了太多的时间. 地形是3D引擎中的一个很重要的部分,最近写的象素误差的东西其实会用到其中的大部分基础原理和算法,所以我决定干脆直接写一篇完整的论文,从地形的生成到地形的绘制,LOD,纹理等各大方面.至于源码因为我需要将这部分从引擎中分解出来,所以如果需要的人比较多我才会提供. 阅读全文
posted @ 2005-04-12 10:45 BadKeeper 阅读(2364) 评论(11) 推荐(0)
摘要:LOD是指在实时运行状态下动态的改变物体网格的结构,以增加或减少物体的多边形数量.这种技术的目的是为了减少距离视线较远的物体的信息数据,减轻整个系统的负担.而当物体离视线越近时,该物体的多边形数量就会增多,使视觉效果不会下降.普通不规则物体的LOD是通过合并顶点,塌陷边等方式进行的.但对于有特殊结构的地形,LOD的方式有很大的改变.这几天作了一下这方面的东西.现在把关于地形LOD的相关算法,包括摄像机的基本投影算法作个总结. 地形在计算机图形学中通常是通过构造一个规则的(2^n +1) * (2^n + 1)的网格,在网格节点上导入地形高度数据而形成的.由于地形的网格结构非常规则.所以... 阅读全文
posted @ 2005-04-07 16:00 BadKeeper 阅读(3180) 评论(2) 推荐(0)
摘要:写了将近两万行代码了,却基本没有测试.因为这段时间写的都是些框架性的东西,类与类之间的关系很复杂,而要作一些比较详细的测试就需要从一些层次上比较高级的类开始.不过最近看到了一些关于单元测试的资料,在Open Scene Graphic里有一个UnitTest的类是用来作这个的.打算先把这部分代码读一下,自己也写一个,能够对当前的程序进行一下比较基础测试.最后转贴一篇关于UnitTest的文章.如果大家对这个有兴趣,请和我联系.大家交流起来进步得更快嘛:)http://dotnetjunkies.com/WebLog/seichert/archive/2004/06/19/17046.aspx 阅读全文
posted @ 2005-03-30 17:31 BadKeeper 阅读(892) 评论(1) 推荐(0)