腾讯游戏学院课程1:实时图形渲染管道
时间:2019年11月23日
地点:清华大学深圳研究生院C1
目录
- 腾讯游戏学院课程1:实时图形渲染管道
- 宏观渲染系统
- 图形渲染
- 管线与管道
- 应用阶段
- 查找
- 可见性检测
- 分组和排序(按什么顺序绘制)
- 提交图元
- 几何阶段
- 光栅化阶段
- 总结&参考
- 参考网站及书籍推荐
宏观渲染系统
图形渲染
从而为/三维模型生成图像,数学上可以用渲染方程表示
两种方法:
离线渲染(光线跟踪、路径跟踪、辐射度算法)
实时渲染(光栅化)
画家算法
深度缓冲(z-buffer)无需排序,分辨率与图像(颜色缓冲)相同。
管线与管道
宏观渲染管道
输入场景-应用阶段(cpu)-几何阶段(gpu)-光栅阶段(gpu)-输出图像
应用阶段
输入场景-可见性检测–分组和排序-提交图元-输出图元
场景图Sence Graph需要组织场景中的物体(摄像机、光源、网格 、骨骼)
查找
使用空间分割技术加速场景查询,包括:二元空间分割BST Tree、八叉树BVH Tree(现在用的比较多)、入口(Protal)
可见性检测
平截头体剔除、遮挡剔除、细节LOT
分组和排序(按什么顺序绘制)
通常按渲染层layer分组
半透明物体不能用z-buffer排序
所以需要半透明物体运用与渲染无关的技术OIT(Order Independant)
提交图元
drawcall
图元:顶点数据(存放在顶点缓冲区,vertex buffer)与索引数据(存放在索引缓冲区,index buffer)
几何阶段
渲染图元-顶点着色-裁剪-屏幕映射-变换后顶点
输入装配,读取vb ib,生成三角形的顶点数据
顶点着色,执行顶点着色器,输入顶点属性,输出
包括:空间变换(模型空间-世界空间-观察空间(透视投影or正交投影)-齐次坐标空间-屏幕空间)几何图元的顶点定义在模型空间,需要变换到屏幕空间
三个矩阵:Oject2World,View,Projection,
投影变换(观察空间-齐次坐标空间)
几何着色器
朝向剔除:渲染时只渲染正面/背面
三角形裁剪:裁剪超出裁切平面的部分
透视除法及
光栅化阶段
变换后的顶点-扫描转换-像素着色-输出合并-渲染目标
扫描转换:把三角形数据转换为像素的位置。需要对颜色、纹理坐标进行插值(须透视正确)会出现锯齿
像素着色:执行像素着色器,比如对问题采样、光照计算、阴影计算,最后输出颜色的修正
总结&参考
前向管线与延迟管线 Geometry-VS-OS-FS-Render Target
前向 O(M*N)
延迟 O(M+N) more buffer
参考网站及书籍推荐
《游戏引擎装配》
http://www.realtimerendering.com/portal.html
http://jcgt.orge
http://github.com/miloyip/game-programmer
《Real-time Rendering》
《腾讯游戏开发精粹》
腾讯-魔方工作室群