主页 关于 链接

30 Jan 2018
3D游戏引擎概览


一. 主流商业3D游戏引擎介绍

  • Unreal Engine
  • Unity Engine
  • Gamebryo Engine

二. 3D引擎包含的内容

  • 美术工具链
    • 1.1 制作工具
      • 地图编辑器
      • 特效编辑器
      • 材质编辑器
      • 动画编辑器
      • 水流编辑
      • 天气编辑
    • 1.2 导出工具(插件)
      • 贴图
      • 动画数据
      • 模型数据
      • 粒子参数
      • 材质
      • 物理数据
  • 策划工具链
    • 2.1 角色系统
      • 关键帧打点反馈
      • 动画融合
    • 2.2 逻辑数据编辑
      • 障碍点编辑
      • 步怪
      • 怪物AI设定
    • 2.3 音效数据
      • 导入,设置播放方式,回调
  • 程序框架与工具
    • 3.1 程序系统
      • 内存管理系统(内存池,内存分配器)
      • 虚拟文件系统
      • 数学库
      • 渲染系统(API,材质,光照)
      • 基础的Actor,GameObject对象
      • 对象管理系统
      • 场景管理系统
      • UI系统
      • 动画系统
      • 物理引擎
      • 音效引擎
      • 视频播放
      • 事件触发系统
      • 脚本系统
      • 网络通讯
    • 3.2 工具
      • 资源打包工具
      • 材质生成工具
      • 场景生成工具
      • 性能profiler工具

三. 如何系统的学习一款引擎

  • 美术:
    • 1.看官方例子和文档
    • 2.熟悉各种导出,3D工具设置,参数意义
    • 3.尝试导出模型、贴图到编辑器,尝试调整材质球,了解材质球参数意义
    • 4.导出动画数据到编辑器中,能正确播放
    • 5.尝试制作一个场景(包含地形,河流,天空,灯光,树,动画模型,后期处理)
    • 6.了解编辑器各个功能如何使用,参数的意义,不懂就再看文档
    • 7.尝试去了解如何制作效果更高级的一个DEMO
    • 8.了解如何控制资源,减少材质链,减少贴图大小,在有限资源下做出更好的效果
  • 程序
    • 1.学习上面美术部分前6条
    • 2.大概阅读代码,了解那一部分的用途是什么
    • 3.了解各个模块间如何协作
    • 4.用工具列出来大概的框架
    • 5.尝试根据项目需求添加一些模快
    • 6.尝试扩展编辑器
    • 7.扩展或调整框架适应项目需求

四. 渲染流程

  • 渲染阶段概览
    • 工具阶段(定义几何和材质)
    • 资源处理阶段 处理数据,生成引擎所用的格式
    • 应用程序阶段 可见性处理,然后交由GPU渲染
    • 几何阶段 (三角形变换,照明,裁剪)
    • 光栅化阶段 (三角形转换为片段,片段着色,测试,输出)
  • 渲染流程
    • 更新所有可渲染对象
    • 可见性判断
    • 排序
    • 把数据给GPU渲染
    • 几种渲染流程
      • Forward Rendering
        • PreZ这一步是优化可能没有
        • 由近到远渲染Solid Object
        • 由远到近渲染Transparent Object
        • 弊端多光照支持不好
      • Deferred Rendering
        • 渲染每个像素数据(颜色,深度,法线,坐标)到Buffer(MRT)
        • 基于屏幕的每一个像素做光照渲染输出
        • 弊端AA支持不好,半透明支持不好
      • Forward+ Rendering
        • Z-prepass,很多forward shading都会用这个作为优化,而在forward+中,这个变成了必然步骤。
        • 把Z-Buffer划分成许多16×16的tile,每个tile根据depth得到bounding box。
        • 对于每个tile,把它的bounding box和light求交,得到对这个tile有贡献的light序列。
        • 对于每个物体,在PS中用该pixel所在tile的light序列累加计算shading。
      • Tiled-based Deferred Shading
        • 生成G-Buffer,这一步和传统deferred shading一样。
        • 把G-Buffer划分成许多16×16的tile,每个tile根据depth得到bounding box。
        • 对于每个tile,把它的bounding box和light求交,得到对这个tile有贡献的light序列。
        • 对于G-Buffer的每个pixel,用它所在tile的light序列累加计算shading。
    • 渲染一个物件的流程
      • 准备顶点数据
      • 顶点变换(vertex shader)
        • 顶点位置变换
        • 顶点光照
        • 纹理坐标变换
      • 图元装配(Primitive Assembly)
        • 视锥裁剪
        • 背面剔除
        • Early Z(取决于显卡是否支持)
      • 纹理映射着色(fragment shader)
        • 裁剪测试(Scissor Test)
        • Stencil Test
        • Depth Test
        • Alpha Test
        • 光照,阴影
        • Alpha Blend
      • 光删化(Rasterization Stage)
      • 输出到屏幕

五. 渲染部分学习技巧

  • CPU
    • 1.搜索源代码中的Render 或者 Draw 关键字
    • 2.在相关地方打断点
    • 3.跟无数遍,一遍一遍的看
  • GPU
    • 1.用工具截图一帧,然后看一帧内都做了什么事,具体工具
    • 2.Mobile: Intel GPA, snapdragonprofiler,
    • 3.PC: Intel GPA , Microsoft PIX, Nvidia perfHud

六. 参考书籍

基础入门:

  1. 3D数学基础:图形与游戏开发 https://book.douban.com/subject/1400419/
  2. C++程序设计语言 https://book.douban.com/subject/1099889/
  3. 精通DirectX 3D图形与动画程序设计 https://book.douban.com/subject/2115210/
  4. DirectX 9.0 3D游戏开发编程基础 https://book.douban.com/subject/2111771/
  5. 实时计算机图形学 https://book.douban.com/subject/1231141/
  6. Character Animation With Direct3D https://book.douban.com/subject/3863786/

进阶:

  1. 3D绘图程序设计 https://book.douban.com/subject/3725456/
  2. CG教程-可编程实时图形权威指南 https://book.douban.com/subject/1231160/
  3. GPU精粹系列

引擎架构与设计

  1. 3D游戏引擎设计 https://book.douban.com/subject/25821829/
  2. 游戏引擎架构 https://book.douban.com/subject/25815142/

源码与资源

  1. https://www.geometrictools.com/Downloads/Downloads.html
  2. https://github.com/EpicGames/UnrealEngine
  3. https://www.ogre3d.org/
  4. https://www.siggraph.org/
  5. http://www.realtimerendering.com/
  6. https://www.shadertoy.com/

最重要的:

  1. 程序员健康指南 https://book.douban.com/subject/25981248/

每天进步一点点.