动漫游戏开发人员负责设计游戏的整体概念,包括故事背景、游戏机制、角色设定等。他们通常需要与其他开发人员密切合作,以确保游戏的设计能够实现。
1. 什么是渲染管线
(1). 渲染管线就是一堆原始图形数据经过各种变化处理最终出现在屏幕的过程。渲染管线可分为三个阶段,应用程序阶段,几何阶段,和光栅化阶段
(2). 应用程序阶段由CPU主要负责。CPU将GPU渲染需要的灯光、模型准备好,并设置好渲染状态,为GPU渲染做好准备。
(3). 几何阶段把输入的3D数据转换成2D数据。包括顶点着色器、图元装置、裁剪和屏幕映射几个过程。顶点着色器主要进行顶点坐标变换。将输入的模型空间顶点坐标变换到裁剪空间顶点坐标。图元装配将顶点装配成指定图元的形状。几何着色器改变图元。通过产生新顶点构造出新的图元来生成其他形状。
(4). 光栅化阶段把图元映射为最终屏幕上显示的颜色。包括光栅化,片段着色,深度测试和混合。光栅化将顶点转为屏幕上的像素。片段着色器计算每个像素的最终颜色。深度测试通过深度信息判断像素的遮挡关系。混合阶段通过透明度将像素进行混合。
(5). 最终渲染好的颜色先被送入后置缓冲,随后再替换前置缓冲,显示在屏幕上
2. 什么是depth buffer
深度缓冲也称z-buffer,用来存储深度值以及在深度测试时确定一个片段是否被其他片段遮挡。深度缓冲由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。在大多数系统中深度缓冲区为24位。
当深度测试启用的时候,如果此测试通过,深度缓冲内的值将被设为新的深度值。如果深度测试失败,则丢弃该片段。
3. 为什么做提前深度测试
提前深度测试(Early depth testing)是一个由图形硬件支持的功能。
提前深度测试允许深度测试在片段着色器之前运行。可以更早地踢掉一些片段永远可见的片元,节省GPU资源 。
4.对 phong和billin-phong做出解析
Phong光照模型将光照分为三部分:环境光(Ambient)、漫反射光(Diffuse)和镜面(Specular)光照。环境光即来自其它物体,而非直接光源的光照。在Phong模型中是一个常数。漫反射即粗糙物体表面均匀的反射光线到各个方向所产生的光照效果。镜面光照也称高光反射,由光滑物体表面平行地向一个方向反射出来的光照效果。Phong光照模型中,视线向量和反射向量的角度不允许大于90度。如果大于90度的话,点乘的结果就会是负数,镜面的贡献成分就会变成0。Blinn-Phong镜面反射的计算引入了半程向量(halfway vector)向量,半程向量是视线方向和反射向量之间的夹角。通过测量法线和半程向量之间的角度计算镜面反射。
5. 前向渲染和延迟渲染的区别
前向渲染对于每一个需要渲染的物体,都要逐光源渲染,每个光源都会带来一定的渲染成本。
延迟渲染将计算量非常大的渲染(如光照)延时到后期进行处理。包含两个处理阶段(Pass):在几何处理阶段中,先渲染场景一次,之后获取对象的各种几何信息,并储存在G缓冲(G-buffer)的纹理中。随后在光照处理阶段中使用G缓冲内的纹理数据对每一个片段计算场景的光照。
延迟渲染只需要对每一个像素执行一次光照运算,能够渲染大量的光源而不消耗大量的性能。
延迟渲染不能进行混合(Blending),因为G缓冲中所有的数据都是从一个单独的片段中来的,而混合需要对多个片段的组合进行操作。延迟渲染需要大内存开销,没有MSAA。延迟渲染对小且没有很多的光源的场景,并不一定会更快。延迟渲染不支持半透明物体渲染。