游戏引擎中的渲染系统的挑战
挑战一:复杂性问题
一个场景中可能存在着成千上万个物体对象,而且每个对象的形式都不一样。比如场景中可能同时出现水体、植被(foliage)、角色、云朵等对象。每个对象需要用到的绘制算法,比如水体的算法、植被的算法、毛发的算法、皮肤的算法、还有地面上的材质的算法等等,这些算法都完全不同。
但渲染理论通常是针对一种对象解决问题。
挑战二:硬件的深度适配问题
游戏绘制系统的实现是一个实践性问题,它需要运行在各种性能的现代硬件上。
同学们需要对经典计算机的架构有所了解,比如南桥和北桥的概念、显卡和CPU的通信方式等等。游戏绘制系统所实现的所有算法必须要在这些现代的PC或者主机(比如Switch)上高效运行。因此我们需要对这些设备的硬件进行非常深入的了解,才能充分利用各种硬件的特性,从而实现高效的算法。
但在图形学理论中,我们一般不会特别关注具体的硬件实现,而只关注图形学理论在算法或者数学上的正确性。
挑战三:性能预算问题
- 游戏中的场景是千变万化的,而且必须在这种情况下保证稳定的帧率。
- 每帧的时间预算越来越少,30FPS -> 60 FPS -> 120 FPS
- 对画质的要求越来越高,1080P -> 4K -> 8K
但在学习图形学理论时,如果实现了一个算法的效果,并且达到了相对较好的帧率,我们认为就可以了。
挑战四:时间预算分配问题
工业级游戏引擎的绘制系统和同学们在图形学课上所学到渲染算法有所不同,它并不能将100%的计算资源全部用掉。一般来说,绘制系统只能使用大概10%-20%左右的计算资源,剩下的大部分计算资源需要分配给其他的系统,比如Gameplay等模块。这也是一个硬性要求。
本课程内容
接下来所讲的所有内容,并不是纯粹的理论模型,而是非常具有实践性的工程知识,在经过了游戏行业接近30年的迭代优化所形成的软件系统,属于实践科学的范畴。
第一节课
- 介绍基础的GPU硬件的相关知识
- 在基于GPU硬件的架构上,如何对渲染数据,以及整个渲染体系进行管理
- 包括可见性裁剪等基础知识
同学们会了解到GPU绘制物体的基本原理。
第二节课
- 介绍游戏开发实战中用到的光照和材质的知识。
- 包括现代游戏中使用的光照模型的介绍
- 以及著名的IBL模型
- 介绍现在行业内最标准的材质系统
- PBR材质
- 两种最经典的材质模型之间的优异度差别
- 介绍Shader模型相关的知识。
第二节课结束之后,大家应该能够了解如何绘制出接近于现代游戏画质的画面表现,做出来的内容看上去会很接近工业级产品画质的画面。
第三节课
- 介绍游戏中很多很重要的子系统
- 地形系统
- 天空系统
- 后处理系统
经过前三节课的知识储备,大家会对基础的数据组织,基础的绘制算法,以及材质模型有所了解。
第四节课
- 开始讲解管线(Pipeline)方面的相关知识,比如延迟着色(DeferredShading)。
- 讲解延迟着色的设计原理
- 延迟着色的关键点。
- 在实际开发过程中,完成绘制之后,如何将画面提交到屏幕上
- 显卡所绘制的内容是如何管理的,包括如何在屏幕上进行同步。
- Tiled-Based Rendering方法
由于受到课程时长的限制,因此本课程不会涉及:
- 卡通渲染方面的知识
- 非真实感渲染(Non-Photorealistic Rendering
- 2D游戏引擎方面
- 一些酷炫的效果,本课程也不会涉及,包括皮肤的次表面散射材质效果、毛发效果等。
这些内容适合作为一些特定的专题讲座来介绍。