Shading
定义:将材质作用于对象的流程
Z-Buffer
-
帧缓存(Frame Buffer)
Frame Buffer是一个用于存储图像像素数据的内存区域。它通常由一个二维数组表示,每个元素对应屏幕上的一个像素。Frame Buffer中的每个像素可以存储颜色信息(如红、绿、蓝三个分量)或其他图像属性。在渲染过程中,图形管线将计算得到的像素颜色值写入Frame Buffer中的相应位置,最终显示在屏幕上。 -
深度缓存(Depth Buffer)
Depth Buffer是一个用于存储每个像素的深度值(或称为Z值)的缓冲区。深度值表示像素在场景中的距离或深度信息。在渲染过程中,深度值可以用于判断像素的可见性和遮挡关系。当多个物体重叠时,深度测试可以根据像素的深度值决定是否更新Frame Buffer中的像素颜色。 -
深度测试
深度测试是通过比较像素的深度值和Depth Buffer中对应位置的深度值进行的。如果像素的深度值比Depth Buffer中的值更小(或更接近相机),则更新Frame Buffer中的像素颜色,并更新Depth Buffer中的深度值。否则,像素被认为是被遮挡的,不进行更新。
Frame Buffer和Depth Buffer在渲染过程中起着重要的作用。它们可以帮助确定像素的可见性、处理遮挡关系,并最终生成最终的图像。深度缓冲技术可以提高渲染效率和真实感,特别是在处理复杂的三维场景时。
着色模型
Lambertian (Diffuse) Shading
- 输入参数
- Viewer direction, v
- Surface normal, n
- Light direction, l (for each of many lights)
- Surface parameters (color, shininess, …)
- 光照衰减
某点光强:I/r^2
3.漫反射着色
Ld = kd * (I / r^2) * max(0, n*l) = 漫反射系数 *
Phong Shading
经典的光照模型,计算每个像素的漫反射、镜面反射和环境光照分量来确定像素的颜色。Phong Shading的计算过程如下:
-
计算漫反射分量
漫反射分量表示了光线在物体表面上的散射程度,与光线入射角度和表面法线的夹角有关,对于每个像素,根据其表面法线和光源的方向。 -
计算镜面反射分量
表示光线在物体表面上的反射程度。镜面反射分量的计算涉及到光线的反射方向、观察者的方向和物体表面的光滑程度。 -
添加环境光照分量
指物体表面接收到的来自周围环境的光线。环境光照分量通常是一个常量或者通过全局光照模型计算得到的。 -
将漫反射、镜面反射和环境光照分量相加,得到最终的像素颜色。
Blinn-Phong Shading
在Phong Shading的基础上进行了改进。
- 通过半程向量进行计算
- 指数p控制高光范围
镜面反射计算:
整体光照计算(对每个像素做同样的计算):
着色频率
- Flag shading:对面着色
- Gouraud shading:在三角形的顶点处计算颜色,然后通过插值的方式将这些颜色值在三角形内部进行平滑过渡。每个顶点指定一个颜色值。这些颜色值可以通过光照计算、纹理映射或其他方式得到。接下来,在三角形的内部,通过插值的方式计算每个像素的颜色值。
- Phong shading:逐像素着色
顶点个数、着色方法、着色频率关系如下图:
实时渲染管线
- 顶点输入(Vertex Input):
- 从应用程序中获取顶点数据,包括顶点的位置、法线、纹理坐标等信息。
- 顶点处理(Vertex Processing):
- 对每个顶点进行变换操作,将其从模型空间转换到世界空间、相机空间和投影空间。
- 进行光照计算,计算顶点的颜色或光照强度。
- 图元装配(Primitive Assembly):
- 将顶点组装成图元,如点、线、三角形等。
- 光栅化(Rasterization):
- 将图元转化为屏幕上的像素。
- 根据图元的形状和位置,在屏幕上生成对应的像素片段。
- 片段处理(Fragment Processing):
- 对每个像素片段进行插值和纹理映射,获取片段的颜色和纹理坐标。
- 进行光照计算,计算片段的最终颜色。
- 像素操作(Pixel Operations):
- 执行深度测试等操作
- 最终将像素颜色写入帧缓冲(Frame Buffer)。
- 输出合成(Output Merger):
- 将帧缓冲中的像素数据输出到显示设备,生成最终的图像。
纹理映射
- 3D空间对应的2D平面点
- 为每个三角形顶点指定一个纹理坐标(u,v)
重心坐标
-
重心坐标计算
给定三角形的三点坐标A,B,C,该平面内一点(x,y)可以写成这三点坐标的线性组合形式。α+β+γ=1,则对应(x,y)为重心坐标。
-
应用
用于插值,根据三个顶点A,B,C的属性插值出点的属性,位置,颜色,深度,法线向量等等;判断点受否在三角形内。
纹理抗锯齿
- MIPMAP技术
通过预先生成一系列不同尺寸的纹理贴图,根据物体的距离和尺寸选择合适的MIPMAP级别进行采样,从而减少对原始纹理贴图的采样次数。
纹理的应用
-
环境光
-
凹凸纹理