您好,欢迎访问三七文档
3D引擎原理conanshao目录•什么是3D引擎?•引擎的二次开发,以及最近的技术趋势。•怎样开始你的引擎学习?什么是3D引擎?•帮助开发人员合成一个3D的世界,并且把这个世界显示到桌面上。场景文件3D引擎桌面显示解剖3D引擎•从一个简单的模型的显示开始。•3D图形中表示模型的最普遍模式。•模型=网格+材质。=+3D图形管线应用程序顶点处理几何处理光栅化片元处理帧缓存3D图形管线相机的概念渲染器•将场景管理器提交的几何数据,着色数据,状态数据,环境数据渲染到渲染目标上。渲染器•几何数据的组织:实时图形学里面用一堆三角形面片(Mesh)来表达几何形状。•Mesh由一系列顶点(顶点缓冲区)以及索引(索引缓冲)组成。•顶点格式,至少有顶点位置,还可能包含法线、切线、副法线、纹理坐标等。渲染器•材质:描述物体表面着色特性的属性,在实时图形学中,通常用着色器,以及一组参数、渲染状态来描述材质。•着色器是用来描述着色过程(顶点处理、几何处理、像素处理)的程序。材质系统材质系统材质系统材质系统材质系统•材质系统进一步的思考–1.材质系统如何与环境信息的交互?–2.如何重复利用shader程序,管理好渲染状态?–3.如何给美术人员提供一个灵活高效的可编辑的材质工具?另一个问题的产生,场景管理•有了渲染器,准备渲染整个世界。•新问题产生,世界太复杂了!•如果每个东西都要渲染,不可能实时。•Weneedacull.•裁剪,物体的包围盒同视锥体比较。如果有交集,则物体可见,反之则不可见。•但是问题仍然没有解决,成千上万的物体,比较视锥会占去大量的CPU资源。•需要一个空间数据结构,来组织裁剪。场景管理八叉树场景管理•高效组织和管理虚拟场景中实体(相机,物体,灯光等),处理实体之间的关系。•实体的关系有包含,碰撞,层次关系等。•例如:相机视锥是否包含一个实体,灯光的包围盒是否包含一个物体。场景图•用于场景管理的具有层次性,空间性,状态性的结构称为场景图(SceneGraph).•场景图主要包含下面三部分:•一个层次结构的场景树,用于处理层次动画,例如一个怪物在场景中走动,另外一个光球绕着这个怪物转动。•一个用于裁减的空间结构。•一个组织Renderstate的rendergraph。场景图•以上图战争机器中一个场景为例,场景图如下:监狱室外室内房间石墩马库斯……马库斯资源管理•渲染资源管理:•仍以GOF为例,一个场景的贴图和模型:•3Dmmog中,大量的贴图,模型,动画等资源。•资源需要重用,解决创建,引用,销毁的问题。•而对于另外一些无缝大场景,需要进行资源动态加载,资源回收的机制。图1场景中使用的纹理渲染器•渲染状态的管理:图形流水线中有多组渲染状态,切换渲染状态是一个较大开销,因此对渲染状态进行一个有效的管理,才能保证渲染效率和渲染结果的正确性。渲染器•光照和阴影保证了场景的真实性。渲染器•静态光源对静态物体可以渲染到lightmap或者vertexcolor上。•判定每盏动态光源影响那些物体,注意空间的变换。•实时阴影算法:–1.Shadowmap–2.ShadowVolume–3.ProjectShadow动画系统•让场景中的角色动起来。•动画:物体的属性随时间变化。•关键帧动画:记录某些时刻物体的属性,例如A,B时刻的位置属性。A,B之间的时刻的属性通过差值得到。骨骼动画•骨骼动画:骨架(skeleton)是由一系列具有层次性的骨骼(bone)组成,通过关键帧动画来描述骨骼的运动。蒙皮•蒙皮:把人物模型(mesh),蒙到骨骼上面,就是确定每个mesh顶点会受到哪些骨骼的影响。动画系统•粒子系统:用大量的,具有一定规则的微小物质来模拟图形学中火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹等效果。•几种常用的基础粒子效果有粒子发射器,条带,波带,公告板。物理引擎•要创造出真实的交互环境,仅模拟图像表现是不够的,还需要游戏中物体满足物理定理。•例如可破坏的游戏环境带来的感受是不同的。物理引擎•基础需求:角色和场景之间的相交检测,角色之间的检测(单机游戏)。•高级需求:可破坏的环境,布料系统,毛发效果等,最好使用一个物理引擎来解决这些。•Nvidia的PhyX,Intel的Havok。物理高级渲染效果•高级渲染效果,比拼引擎的技术实力。•后期处理效果:Bloom,ToneMapping,景深,动态模糊等。•复杂的光影效果,实时阴影,镜面反射等效果•水面效果。•大规模植被效果。3D引擎的基础模块•场景管理•资源管理•渲染器•动画和粒子•高级渲染•物理引擎3D引擎的二次开发3D引擎的外围:•1.场景编辑器,特效编辑器,材质编辑器,UI编辑器,模型max/maya导出插件。•2.环境系统。•3.换装系统和技能系统。•4.音乐音效系统。3D引擎的二次开发•为什么需要一个对3D引擎的二次开发:购买的3D引擎缺少游戏所需的引擎基本功能和外围功能•以GameBryo2.1为例:•没有适用的场景编辑器,特效编辑器.•没有适用的资源管理器(贴图管理都没有).•没有适用的高级渲染模块,虽然有一些samplecode,但是需要做一个组织和封装.•场景管理也需要重写部分.•换装系统和技能系统引擎的分类,代表作品•高层,魔兽争霸地图编辑器。快速、简单易用。只适用于某个游戏,用来做新关卡、资料片。•中层,unreal、lithtech。相对快速、简单易用,对开发人员要求较低。(三个月学习期)。灵活性中等,适合某一类游戏(第一人称射击、即时战略)•底层,gamebryo、ogre。需要二次开发,对开发人员要求高。灵活性大,适合各种游戏。国内技术现状•天龙八部ogre引擎的成功,完美自主研发引擎的成功使国内游戏开发界认识到3D游戏引擎的威力。•目前多采用基于对Gamebryo,Ogre的二次开发,或者是自主引擎的研发。•国内整体引擎开发能力较低,经常会犯严重的错误。近期技术路线趋势•may引擎架构图近期技术趋势•支持多核,渲染线程化。•任务从CPU到GPU的转移。•可编程渲染管线的支持。100人测试场景(单线程)100人测试场景(多线程)100粒子反射器测试场景(单线程)100粒子反射器测试场景(多线程)怎样开始你的3D引擎学习•门槛:c\c++,3D图形数学基础,超强的耐心,英文基础。•1.选择一个图形API(D3D\OpenGL,连Carmark都放弃了OpenGL,所以还是D3D吧)•2.D3D的学习,最好的参考文档还是DXSDK的帮助文档。从DXSDK最简单的Tutorial程序开始,逐渐的研习其中复杂的例子,并且同时开始实时图形学的学习。•3.当比较精通D3D,和图形学时,可以开始看一些引擎设计的书籍,研习一两个商业引擎的代码(推荐Gamebryo,结构清晰,不推荐unreal3)。•4.开始写自己的引擎,或者参与到一个引擎的项目中去。怎样开始你的3D引擎学习•重要的资料•1.DXSDK帮助文档•2.RealtimeRendering•3.3D.Game.Engine.Architecture.Engineering.Real-Time.Applications.with.Wild.Magic.•4.•5.developer.nvidia.com•6.TheCgTutorial•7.Real-time.Rendering.Tricks.and.Techniques.in.DirectX•8.Microsoft.DirectX.9.Programmable.Graphics.PipelineThankyou!•AnyQuestion?
本文标题:3D引擎原理课件
链接地址:https://www.777doc.com/doc-5553330 .html