08 2011 档案
摘要:Hi,大家好,好久没有写过东西了.最近在研究物理引擎,在网上搜索了一下,发现相关的技术文章特别少,于是我心血来潮,决定给有兴趣向这方面发展的朋友写一篇入门教程,希望有所帮助。 如果你是一名超级游戏爱好者,那想必你会听说过PPU。要是你不知道什么是PPU,那也不要紧,但至少你要知道什么是"物理加速卡"。 Ageia是PhysX物理芯片的开发商,一家名不见经传的公司,成为敢吃螃蟹的第一人。说不定不久的将来,我们的计算机里会出现CPU,GPU,PPU三足鼎立的局面,而物理编程,也将成为游戏程序员的必修课程。 一、安装 在国际上,出名的物理引擎有Havok,Vortex,ODE,N
阅读全文
摘要:产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必
阅读全文
摘要:天龙八部(武侠世界)的源码很可能是天龙八部代码流出后改写的,因为在看了代码中可以找到一些证据,整个客户端分为:一个是编辑器,一个是客户端,采用OGRE+cegui+自写的简单的物理碰撞检测+FMOD+自写的网络库。 服务器端代码目前没仔细关注 客户端总体的描述如下: UI系统 CEGUI UI基础系统CEGUI渲染器Expat XML解析器 CEGUI依赖,估计编写者不喜欢用 FreeType2 跨平台、开源的字体渲染器 用于绘制中文 脚本 luaPlus3D显示引擎Ogre开源的高效渲染引擎 最新的OGRE是1.7.2 碰撞检测 Opcode 开源,占用内存少 其他可考虑使用bullet,O
阅读全文
摘要:ATI 的头发渲染方案: 1. 在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。 2. 渲染时使用需要以下 4 个 pass 3. 最终的渲染效果 此方案不需要实时的三角形排序,效果也比较理想。但是 4 个 pass 开销比较大。 Pass1 和 pass2 可以合并成一个 pass ,最终可能需要三个 pass 。 经试验,此方法非常适合头发这种大部分不透明,少部分半透明的物体渲染。效果相当理想。同时应该也比较适合大面积植被渲染。 参考: Practical Real-Time Hair Rendering and Shading hair rendering and shad
阅读全文
摘要:延迟渲染亦即延迟着色是近几年流行起来的技术,它最大的优势是可以实现同屏中n多的动态光源(十几到几十个)。这在以往的渲染管线中是很难实现的。以下是我对现有的相关技术文献的摘录和总结。渲染流程延迟渲染管线可分为四个阶段:geometry, lighting, composition, post-processingPost-processing阶段与传统的forward shading没有太大差别,这里不提,只说明一下前三个阶段。Geometry阶段:将本帧所有的几何信息光栅化到G-buffer。包括位置,法线,贴图等。Lighting阶段:以G-buffer作为输入(位置,法线)进行逐像素的光照
阅读全文
摘要: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来动态的生成和销毁几何图元数据。通过和新的数据流输出功
阅读全文
摘要:就在SIGGRAPH大会刚结束之后,AMD和暴雪在AMD官方网站上放出了《星际争霸II》的官方技术文档,通过游戏引擎技术的展示让星际迷们感受到越来越多的惊喜。画面优化给CPU带来考验着色方面,在使用原型的基础上利用3D Studio MAX让程序员对整体效果做最大的优化,反复的提炼使得整个作品就像被艺术家精心雕琢一样,配合上8000个独特的、不重复的线性着色渲染代码,使得Starcraft II与早期的游戏代码相比增加了N倍。 在游戏制作初期,暴雪就认识到GPU的强大性能,因此在设计的时候就采用了以GPU为主的优化和大幅度图像质量增加。 由于使用大量像素渲染操作,如果在游戏中当你选择了控制成百
阅读全文
摘要:市面上所说的64位处理器包括AMD Athlon 64与INTEL的EMT64处理器都是指通用寄存器的位宽,不是总线。但要从数据总线方面来说,从80386开始就已经是32bit而奔腾级别以上的CPU数据数据总线都是64bit了,包括安腾在内的64位服务器处理器。而我们通常所说的32bit向64bit过度都是习惯上以通用寄存器的位宽来区分的。还有一种更具体的说法是:这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。
阅读全文
摘要:延迟着色有别于以前的流程,光照信息不在固定管线第一阶段或VS里面计算,而是在PS里面计算。目的就是为了提高性能,一个是在3D空间计算,一个是在2D空间计算分两步一 把位置,发现,材质等信息渲染到纹理,纹理需要创建浮点型的。这一步需要利用d3d多渲染目标float4x4matWorld;float4x4matViewProjection;structVS_INPUT{float3Pos:POSITION;float3Normal:NORMAL;};structVS_OUTPUT{float4Pos:POSITION;float3PosInWorld:TEXCOORD0;float3NormalI
阅读全文
摘要:DX9c中提供了非常简单的多渲染目标的使用方法。它的原理就是在一次绘制中,将一些不同的信息绘制到许多张纹理中,以便之后对这些纹理进行合成处理,以实现一些不可思议的效果。比如将法线,深度,颜色等信息分别保存到几张纹理中,可以进行关照计算,并且可以实现HDR的效果。D3D9中支持超过4个以上的渲染目标。具体步骤十分简单。假设我们已经创建了几张RenderTarget的纹理。pTexDepth, pTexColor, pTexNormal;在C++中pTexDepth->GetSurfaceLevel( 0, &pSurfDepth); // 得到深度纹理的SurfacepDevice
阅读全文
摘要:SSAO全称“Screen-Space Ambient Occlusion” (屏幕空间环境光遮蔽)。其最先运用于 Crysis(孤岛危机) 游戏中,通过GPU的 shader实现 SSAO通过采样象素周围的信息,并进行简单的深度值对比来计算物体身上环境光照无法到达的范围,从而可以近似地表现出物体身上在环境光照下产生的轮廓阴影。可以利用“逐象素场景深度计算”技术计算得出的深度值直接参与运算。 现在的效果确实错误还比较大,应该先进行简单的空间划分(或类似处理)然后计算。 不过个人认为这种方法只是近似地模拟,效果并不正确,但确实能增强场景的层次感,让画面更细腻,让场景细节更加明显。 不同于显卡驱.
阅读全文
摘要:[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题。1 内存管理伟大的Bill Gates 曾经失言: 640K ought to be enough
阅读全文