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
六. 参考书籍
基础入门:
- 3D数学基础:图形与游戏开发 https://book.douban.com/subject/1400419/
- C++程序设计语言 https://book.douban.com/subject/1099889/
- 精通DirectX 3D图形与动画程序设计 https://book.douban.com/subject/2115210/
- DirectX 9.0 3D游戏开发编程基础 https://book.douban.com/subject/2111771/
- 实时计算机图形学 https://book.douban.com/subject/1231141/
- Character Animation With Direct3D https://book.douban.com/subject/3863786/
进阶:
- 3D绘图程序设计 https://book.douban.com/subject/3725456/
- CG教程-可编程实时图形权威指南 https://book.douban.com/subject/1231160/
- GPU精粹系列