版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接: https://blog.csdn.net/jxw167/article/details/80236054

近期对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编程优化的问题。

【转】学习3D引擎架构技术概述相关推荐

  1. 学习3D引擎架构技术概述

    近期对3D引擎的架构设计做了一个梳理总结,现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等.很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇 ...

  2. 3D引擎架构设计高级篇

    3D引擎架构设计最核心的技术包括:引擎框架设计,引擎内存管理,大场景加载以及卸载,引擎的渲染,模型骨骼插件:其他的模块还有粒子,AI,行为树,UI等等吧. 市场上对于引擎开发的需求也是比较大的,而且薪 ...

  3. 3D引擎架构设计篇-姜雪伟-专题视频课程

    3D引擎架构设计篇-169人已学习 课程介绍         本课程是针对3D引擎架构设计,涵盖引擎的基础模块,多线程基础框架,大场景加载,地形多纹理优化技术,GPU优化渲染,物理引擎,AI算法以及A ...

  4. 手把手教你架构3D引擎高级篇概述

    前几年写过一本书<手把手教你架构3D游戏引擎>电子工业出版社,主要内容讲的是固定流水线编程,目的是让读者理解第一代引擎是如何实现的,从本篇博客开始,给读者介绍关于使用可编程流水线自己搭建3 ...

  5. 互联网分布式架构技术概述

    简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术 ...

  6. 太空夜景_太空深度学习的模型压缩技术概述

    太空夜景 By Hannah Peterson and George Williams (gwilliams@gsitechnology.com) 汉娜·彼得森 ( Hannah Peterson)和 ...

  7. 正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合.你也许在训练模型的时候也遇 ...

  8. 多线程渲染(Multithreaded- rendering)3D引擎实例分析 : FlagshipEngine

    原文地址:http://www.cppblog.com/flagship/category/9250.html 1. 开篇:关于FlagshipEngine 首先要感谢旗舰工作室的倒掉,让我可以名正言 ...

  9. 多线程渲染(Multithreaded- rendering)3D引擎实例分析 : FlagshipEngine

    1. 开篇:关于FlagshipEngine 首先要感谢旗舰工作室的倒掉,让我可以名正言顺的使用FlagshipEngine这个 名字,话说这个实验引擎,当初只是我的大学毕业设计,工作之后实在太忙,写 ...

最新文章

  1. linux显示不在sudoers文件中,Ubuntu无法使用sudo提权提示当前用户不在sudoers文件中...
  2. ng-repeat part1 - how UI is rendered from {{name}} to actual value
  3. Mysql中explain命令查看语句执行概况
  4. Neo4j:遍历查询超时
  5. 计算机应用基础1,计算机应用基础1
  6. 网站用户修改密码源码(邮箱版)
  7. 简易调用及实例化控制器
  8. 深度相机---(1)TOF总结
  9. jz2440移植QT5.6【学习笔记】【原创】
  10. [BUG记录]java.lang.IllegalArgumentException: The observer is null.异常解决方案
  11. Singularity 代码阅读笔记[结构: Struct_Microsoft_Singularity_BootInfo]
  12. 用妙记多 Mojidoc 实践康奈尔笔记法
  13. 软件设计分为前端后端吗
  14. STM32 GPIOx_CRL/GPIOx_CRH 寄存器
  15. 计算机网口百兆改千兆,如何将电脑百兆网卡更改为千兆网卡?
  16. 蚂蚁自研移动端 xNN-OCR 技术演进与能力开放
  17. 深度学习案例2:AlexNet网络识别14种鲜花
  18. python字典zip函数_Python zip函数及用法
  19. few-shot基本概念
  20. 基于卷积神经网络的不良地质体识别与分类

热门文章

  1. IntelliJ IDEA(简称IJ)建立JAVA项目详解
  2. umi+dva+antd项目搭建
  3. java背景颜色代码_java窗口背景颜色设置
  4. 简洁美观QQ在线客服漂浮窗口代码
  5. 百度语音接口api调用
  6. 金山WPS Office 2019正式发布:一个软件操作Word、Excel、PPT
  7. 学美术还是计算机好,「热门」学画画是手绘还是电脑绘画好?
  8. 吾爱破解python就业班_吾的解释|吾的意思|汉典“吾”字的基本解释
  9. 从浏览器的角度看移动互联网入口
  10. oracle jpa字段加注释,JPA 通过注解自动生成表,添加 字段名、类型、注释