1.描述一下渲染管线 2.几何着色器和细分着色器的作用(这里着重问了几何着色器) 3.几何着色器可以实现细分着色器的功能吗 4.顶点着色器的作用、细分着色器的作用 5.一个几何体会走几次顶点着色器 6.深度测试有办法提前吗,为什么要提前,怎么提前的(Early-Z) 7.Early-Z有使用限制吗(一般不能与AlphaTest混用),为什么不能 7.几何着色器处理的对象是什么,片元着色器处理的对象是什么 8.多个不透明几何体在摄像机前完全重叠会渲染几次(非透明物体的渲染顺序) 9.非透明物体是怎么实现从前往后渲染的 10.透明物体的渲染顺序,为什么透明物体要从后往前渲染 11.顶点光照和像素光照是怎么做的,假如要用高质量的光照用哪个 12.SSAO具体说一下,其中SS是什么意思,为什么叫SS 13.假如一个场景很复杂且有很多个光源,如何优化(延迟渲染,以及具体的实现) 14.NormalMap了解吗,有没有在不使用NormalMap的情况下计算出法线
1.正交投影和透视投影
opengl右手坐标系,变换后的z分量在[-w,w]之间,directx这样的左手坐标系z在[0,w]之间,正交投影保持原来物体的比例和尺寸,而透视投影投出来的结果是近大远小。
透视投影:
一种比较通用的做法是确定一个投影矩阵,将顶点转换到一个裁剪空间,而裁剪空间中w分量特殊的意义将会使得判断顶点在不在视椎体范围内变得很容易,计算后的顶点坐标(书79)可以看出,实际上就是对xyz分量进行了不同程度的缩放,w = -z,然后在这个新的裁剪空间内,如果满足x,y,z全部在-w到w之间 就说明当前顶点在视椎体范围内,不需要被裁剪。
正交投影:
正交投影也同样是确定一个投影矩阵,只不过更加直观和简单,毕竟投影出来的视椎体还是保持了原来物体的平行关系和大小,不会出现近大远小
2.顶点着色器,细分着色器,几何着色器,片元着色器
顶点着色器:
主要是处理顶点数据,空间变换,法线处理
细分着色器:
细分图元
几何着色器:
在顶点着色器和片元着色器之间的可选的几何着色器,位于细分着色器之前,几何着色器的输入是一个图元(如点或三角形)的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而,几何着色器最有趣的地方在于,它能够将(这一组)顶点变换为完全不同的图元,并且还能生成比原来更多的顶点。
说白了几何着色器阶段就是对顶点进行操作,比如生成更多的顶点,通过一定的方式变换顶点,向外扩充顶点位置,实现爆炸效果等等,他的输出类型可选,point,line,triangle 等。
片元着色器:
逐片元着色操作
3.early-Z和alpha test
alpha test会进行片元的discard,导致很多设备上的early-Z无法正常执行,反而降低了这个优化策略的效率
4.SSAO
屏幕空间环境光屏蔽(Screen Space Ambient Occlusion,SSAO),半球的区域内,随机的小蓝点和整个半球空间的比例来衡量遮蔽因子,从而将暗处的环境光和普通平面的环境光区分,也就是明暗程度,基于后处理,复杂度和屏幕的像素即片元数量有关,开销很大
5.几何着色器能实现细分着色器的功能吗
6.一个几何体会走几次顶点着色器
7.多个不透明几何体在摄像机前完全重叠会渲染几次(非透明物体的渲染顺序)
8.透明物体的渲染顺序,为什么透明物体要从后往前渲染
颜色缓冲,顺序反过来的话看起来会是完全相反的效果
9.不用normalmap怎么计算法线方向
两个切线向量叉乘计算出垂直于两个切线向量平面的的法线向量