学习3D引擎架构技术概述_二三维引擎-程序员宅基地

技术标签: 算法与游戏  图形学编程  3D引擎  

      近期对3D引擎的架构设计做了一个梳理总结,现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等。很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇到Shader编程以及优化就感到头疼,长此以往对自己技术提升非常不利的。要改变现有的状态,就必须要系统的学习相关3D引擎技术,这样才能在使用引擎开发产品时得心应手。本篇博客从三个方面给读者做讲解,一是学习3D引擎;二是选择引擎开发产品,三是如何学习一款引擎,下面先从学习3D引擎开始。

学习3D引擎

   经历过多年的引擎研发和引擎使用,在此我先把学习引擎以及相关技术模块给读者列出来,技术框架图如下所示:


在上述框架图中共分为七部分,每一部分所包含的技术点并不局限于图中所列,在此一一给读者解释一下:

第一部分内容:是告诉读者学习3D引擎架构知识的前提,就是要掌握引擎的编写语言和引擎使用的图形库API接口,以及图形学渲染也就是GPU编程使用的Shader语言,基础知识是必须要掌握的。学习时可以参考这些API提供的Demo,把执行流程搞清楚,自己调试一下就可以了。

第二部分内容: 3D基础知识,比如一个3D模型要在二维屏幕上显示出来,这中间要经历一些矩阵变换才能将其在二维屏幕上显示出来,这种变换过程通常称为固定流水线,就是告诉读者它的显示是按照固定流程,它的计算都是在CPU中完成的;对应的就是可编程流水线,也就是在GPU中完成,其实就是将矩阵变换放到GPU中计算了。

第三部分内容:3D游戏引擎的技术点,在掌握了第二部分内容后,再开始学习第三部分内容,该部分内容针对的是DX的SDK或者OpenGL的SDK,二者都提供了Demo供读者学习,我们要把这些基础的3D引擎技术掌握,最好的方式是自己用手把代码敲一遍,调试一下。

第四部分内容:需要一定的数学知识,引擎的开发或者游戏的开发离不开算法的支持,当然大家也不用对其产生畏惧心理,学习任何事情都不是一蹴而就的,循序渐进的,先从基本的数据结构入手,逐步深入,图中列出的几种算法是引擎中常用的算法,四叉树或者八叉树可以用作地形的绘制,插值算法可以用于实现刀光拖尾等等,A*算法比较经典是寻路使用的,另外还有后处理算法实时阴影的网上都有很多现成的案例。

第五部分内容:这部分内容是核心的架构设计,图中所显示的是组成引擎的各个模块,场景管理模块,该模块非常重要,地形的加载通常是通过分块的方式处理的,比如魔兽地图,显示的是9块,在缓冲中的是16块,随时提供加载,场景中少不了水的渲染,这个也体现了引擎的技术层次,大家可以看看虚幻水的渲染,达到了一个顶级水准。模型插件也是必须的,Unity和现在开源的虚幻使用的都是AutoDesk提供的FBX模型,AutoDesk提供了FBX的API可以直接使用,当然自己也可以开发适用于自己引擎的模型插件,自定义格式。AI模块这里主要是指行为树算法,各种各样的灯光模块也是必须的,对应的就是相机模块,比较常用的是透视摄像机和正交摄像机,特效和UI也是引擎的组成部分,剩下最重要的是物理引擎模块,碰撞检测处理,常用的碰撞算法:Mesh碰撞,球体碰撞,胶囊体碰撞,立方体碰撞,这些碰撞算法的核心是OBB或者AABB算法,当然还有肉体碰撞处理,另外,引擎很重要的部分是关于内存管理,这部分内容将在后面的博客中介绍。

第六部分内容:3D引擎中的GPU编程,这个是令大部分程序员头疼的问题,不同的引擎使用的渲染算法是不一样的,它们主要区别还是在细节贴图方面的区别,以UE4为例,他渲染一个物体使用的材质相比Unity多一些,通过它们渲染的物体就可以看出来。快速的学习GPU编程,网上都有对应的Shader代码,可以直接在此基础上修改。还有可以直接使用Shader编辑器用于Shader的编写,调Shader效果我们可以参考Max或者Maya模型工具中的渲染效果,Max或者Maya中都有渲染Shader,它们功能很强大,引擎是无法与其攀比的,只能与其无限靠近。而且Max和Maya可以为我们提供使用了哪些Shader。该部分内容主要是针对模型的材质渲染。

第七部分内容:主要是针对引擎的后处理渲染,常用的有PSSM,HDR,Blur,Deferred等等,这些效果是在游戏的每帧图像显示之前再进行一遍后处理渲染,然后显示出来,这就是后处理渲染效果。

上图只列举了七部分内容,还有一个技术点,开发者要掌握——设计模式,与引擎开发相关的设计模式比如:单例模式,工厂模式,观察者模式,状态模式等等吧,只要能熟练掌握这些就足够了。上面框架图是给想学习引擎的读者推荐的,作为游戏开发者来说,学习引擎对自己技术提升帮助还是非常大的,不要只局限于逻辑的编写,要想成为主程,技术经理,技术总监必须要学习引擎技术。

以上是关于读者自己学习引擎的内容,现在网上有很多开源引擎,比如:Ogre引擎,虚幻引擎。。。。。

面对这么多开源引擎,作为读者如何去选择一款适合自己产品研发的引擎至关重要。

选择适合项目的引擎

  开发产品首先要做的事情是选择引擎,市面上很多引擎供读者使用,游戏产品从大的方面说是页游,端游,手游;从表现形式来说有2D,3D之分。不同的产品设计对应着不同的引擎选择,现在H5游戏逐步出现了,相关的H5引擎也跟着出来了,比如:白鹭,layaBox,cocos-js。2D引擎目前还是cocos2dx引领,3D引擎的选择有Unity3D引擎和虚幻引擎,二者最大的区别是一个开源,一个不开源,当然掌握难度要看不同的人使用。选择引擎首先要考虑的问题是:

一、是该引擎是否有对应的上线产品出来,可以去下载玩玩,体验一下。

二、与该引擎相关的工具是否完备,比如场景编辑器,特效编辑器。。。。

三、该引擎上手是否比较快,这个也是重点考量的;

四、该引擎相关的文档是否完整或者详细,另外对应的论坛或者社区是否能够快速响应;

五、不同的机型适配性是否满足项目需求;

六、功能扩展性,这个涉及到代码的开源了,有第三方库并且支持第三方库开发;

七、对引擎支持的场景面数以及骨骼动画,特效做一个压力测试;

选择引擎一定要根据自身项目需求来定,这个也关系到项目成败,比如做一些3D仿真项目,要求品质比较高,这个就要考虑虚幻引擎了,当然使用的人必须具备C++编程能力,否则即使你选择对了引擎,但是项目组的人不会用也是不行的。

3D手游开发,这个选择Unity引擎开发,Unity引擎的优点这个大家都知道,就不介绍了,当然缺点也比较明显。

选择好了引擎,如何学习一款引擎,因为你不能保证项目组的每一个人都会使用。

学习一款引擎

 选择好了引擎后,下面就要开始学习了,学习一款引擎可以从先整体后部分,或者说先粗后细的原则。

首先,看一下这款引擎的文档,它主要能解决啥问题。

其次,引擎的架构设计图,从整体上对整个引擎有所了解,以及类层次关系。

以上是粗看,目的是至少做到对引擎有个整体的概念。下面就是细看了,

先从引擎提供的官方Demo入手,把整个执行流程通过调试的方式学习一下,在此过程中也能了解引擎使用的坐标系以及模型格式,模型插件等等吧。而且能对场景的加载处理都有所了解,通过调试的方式可以深入到引擎内部,假设该引擎提供了源代码。下一步再demo的基础上尝试做一些修改,加一些功能,加深对引擎的理解。

对于程序开发者来说,市面上比较常用的引擎技术都是相通的,深入理解了一款引擎,再学习其他引擎就很容易了。我以前是做端游开发的,端游开发的经验对我开发手游帮助很大,我自己也写过引擎,自研引擎的经验对于使用Unity引擎和虚幻引擎这些成熟引擎开发产品就非常容易了。

  开发者在学习引擎时,可以先从Ogre引擎入手,该引擎对与渲染做的比较好,而且该引擎没有其他杂七杂八的东西,比较干净非常有助于开发者学习。以前用Ogre引擎开发过比较著名的端游是《天龙八部》,效果也是不错的,证明该引擎可以用于商业开发,本篇博客只是从大的方面给读者聊了聊3D引擎技术,下一篇给读者介绍关于GPU编程优化的问题。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jxw167/article/details/80236054

智能推荐

STM32CUBEMX学习笔记——陶晶驰串口屏中断接收数据_陶晶瓷串口屏怎么接收-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏26次。网上很多串口屏的开发都是基于标准库开发的,我本人接触到的开发模式是CUBEMX,两种开发环境导致很多资料之间有点割裂,因此我将自己之前学习标准库的开发方式利用CUBEMX实现的方法写在这,防止自己忘记。开发环境还是之前做的项目,以一个按钮为例通过这个按钮学习串口屏的通讯 。b4和b6还需要按下一秒后连续改变h1和n1的数值,因此顺便回顾一下如何实现:b4的按下事件中加入定时器,如果连续1000ms就进入使能:tm2.tim=1000tm2.en=1使能后就在定时器模块中:t_陶晶瓷串口屏怎么接收

web前端培训分享JavaScript学习笔记分支结构_if(ture)前端-程序员宅基地

文章浏览阅读169次。web前端培训分享JavaScript学习笔记分支结构,我们的 js 代码都是顺序执行的(从上到下)逻辑分支就是根据我们设定好的条件来决定要不要执行某些代码IF 条件分支结构if 语句· 通过一个 if 语句来决定代码执行与否a· 语法: if (条件) { 要执行的代码 }· 通过 () 里面的条件是否成立来决定 {} 里面的代码是否执行// 条件为 true 的时候执行 {} 里面的代码if (true) {alert(‘因为条件是 true,我会执行’)}// 条件为 false 的_if(ture)前端

Java ExecutorService四种线程池的例子与说明_java executorservice 多线程 例子-程序员宅基地

文章浏览阅读160次。一、为什么使用线程池使用new Thread执行多个线程有如下一些问题: 每次new Thread新建对象性能差。 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。 缺乏更多功能,如定时执行、定期执行、线程中断。相比new Thread,Java提供的四种线程池的好处在于: 重用存在的线程,减少对象创建、消亡的..._java executorservice 多线程 例子

高级映射(一):一对一、一对多,多对多查询总结_购物车和商品是一对多还是多对多-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏18次。多表之间的数据交互其实一对一和一对多映射,在前面的配置中已经接触到,我没在日志里直接说明,是因为想要在之后写一篇总结日志(就是本篇),总结这些高级映射的配置。例如一对一查询在关联的嵌套结果集查询中就涉及到,一对多查询则在这个基础上再加上一个或多个嵌套结果集,它们可以是一个实体类,或者是一个集合。多对多查询稍微有点复杂,举个例子来说,一个商城管理系统中,一名顾客在一个购物清单中可以有多件商品,而..._购物车和商品是一对多还是多对多

值得关注的 CI/CD 主要趋势-程序员宅基地

文章浏览阅读909次,点赞10次,收藏9次。CI/CD 是那些想要加速应用程序交付、发布周期、控制成本并降低开发风险的人的首选。适应用户反馈、提高对市场变化和业务优先级的响应能力以及提升竞争力取决于应用程序质量,CI/CD 成为提高开发速度的宝贵推动者。

个推图可视化应用实践_d3js和g6|graphin对比-程序员宅基地

文章浏览阅读5.2k次。个推资深前端开发专家 东风图可视化应用是数据可视化的一个重要组成部分。图指的是知识图谱(Knowledge Graph),此概念于2012年由Google正式提出,旨在帮助Google优化搜索引擎返回的结果,提升用户搜索质量及体验。个推作为专业的数据智能服务商,在图可视化应用方面也进行了丰富的实践。本文将从四部分讲述图可视化应用:应用场景、组成部分、个推图可视化组件、个推图可视化展望。(文末附视频版讲解及完整资料下载)01图可视化应用场景..._d3js和g6|graphin对比

随便推点

Linux里的防火墙:netfilter简介与Iptables的使用(上)_netfilter (policy drop)-程序员宅基地

文章浏览阅读3.6k次。什么是防火墙?防火墙可以是像360,金山,卡巴斯基等软件,也可以是硬件,我们来用OSI七层模型来划分的话。那么分为:1. 三层防火墙:它只负责检查数据从进入到第三层,还有从第三层流出,是否符合它规定的条件,如果是,那么就放行,反之就拦截。2.七成防火墙:它_netfilter (policy drop)

你了解 JDK 8 Stream 数据流效率吗?千万级数据量性能如何?-程序员宅基地

文章浏览阅读921次,点赞9次,收藏20次。当数据源中的数据上了流水线后,这个过程对数据进行的所有操作都称为“中间操作”;中间操作仍然会返回一个流对象,因此多个中间操作可以串连起来形成一个流水线;stream 提供了多种类型的中间操作,如 filter、distinct、map、sorted 等等;当所有的中间操作完成后,若要将数据从流水线上拿下来,则需要执行终端操作;stream 对于终端操作,可以直接提供一个中间操作的结果,或者将结果转换为特定的 collection、array、String 等;

2023最新软件测试学习思维导图(从小白到大师进阶之路)_测试进阶路线图-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏41次。2023最新软件测试学习思维导图_测试进阶路线图

Zabbix监控系统与部署Zabbix5.0监控(系列操作完整版)-程序员宅基地

文章浏览阅读4.9k次,点赞17次,收藏38次。Zabbix监控系统的理论介绍与部署安装Zabbix5.0服务端、客户端、自定义监控项模板、设置邮件报警、自动发现、自动注册、代理服务器、SNMP监控实操_zabbix监控系统

在MyEclipse中将项目部署Tomcat_myeclipse部署web项目到tomcat-程序员宅基地

文章浏览阅读2k次。(1)配置Server(2)选择Tomcat 7.0 的解压目录。点击apply。点击ok即可。5.部署到Tomcat点击finish即可。然后ok。6.启动Tomcat,_myeclipse部署web项目到tomcat

Linux系统部署可视化数据多维表格APITable并实现无公网IP远程协同办公-程序员宅基地

文章浏览阅读7.9k次,点赞105次,收藏108次。Linux系统部署可视化数据多维表格APITable并实现无公网IP远程协同办公