图形学笔记(六)光栅化2 —— Artifacts、时域与频域、滤波、卷积定理、超采样、MSAA、深度缓存
图形学笔记(八)着色 —— 纹理映射、重心坐标、双线性插值、Mipmap、三线性插值、各向异性过滤、纹理的应用(环境贴图、法线贴图等)
文章目录
1 着色 Shading
shading:The darkening or coloring of an illustration or diagram with parrel lines or a block of color.
引入明暗和颜色的不同。
着色:对不同物体应用不同材质(material)的过程。
2 Blinn-Phone 反射模型
2.1 基本的定义
计算某一着色点(shading point)对于相机的光照。
输入(v,n,l,长度都是1):
- 观察方向,v
- 表面法线,n
- 光照方向,l
- 物体表面的参数(颜色、shiniess…)
着色具有局部性(不用考虑阴影)。
2.2 漫反射 Diffuse Reflection
2.2.1 定义
当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。
Tips:
对于漫反射,所有观测方向颜色是相同的
2.2.2 计算shading point能接收多少光
由于shading point法线角度的不同,会使得吸收的光照不同,。
2.2.3 根据点距光源距离求光强
光的能量会随着距离衰减,如下图所示。
2.2.4 获取漫反射的反射光
下面的公式是到达的能量乘接收的能量,即为最终反射的能量。(着色与观测方向无关)
2.3 高光项(Specular Term)
入射光通过反射进入人眼就会形成高光,为了方便表示,使用法线与半程向量(入射光和反射光的中线)的夹角余弦来表示高光的强弱。
结果为 L s = k s ( I / r 2 ) m a x ( 0 , n ⋅ h ) p L_s=k_s(I/r^2)max(0,n · h)^p Ls=ks(I/r2)max(0,n⋅h)p
2.4 环境光项 Ambient Term
环境光很复杂,所以假设任何一个点接收的环境光都是相同的为
I
a
I_a
Ia。
环境光其实是一个常数。
2.5 Blinn-Phong 反射模型
将三项相加,得到反射模型的结果。
3 着色频率 Shading Frequency
3.1 什么是着色频率
着色模型(频率)就是如何运用(也可以不用)光照模型计算的结果显示由多边形表示的曲面。
如下所示是不同着色频率作用于同一模型获得的不同渲染效果。
3.2 Flat Shading —— 对每一个三角形着色
- 一个三角形面一个颜色(三角形的法线通过两边的叉积获得)
- 不能很好的表示光滑的平面
3.3 Gouraud Shading —— 对每个顶点着色
3.3.1 概览
- 求出每个顶点的法线后,构成三角形,对三角形内部的颜色做插值。
3.3.2 获得逐顶点的法线
常使用周围平面法线的加权平均来计算顶点的法线。
3.4 Phong Shading —— 对每个像素着色
3.4.1 概览
- 对于每个三角形的像素通过插值计算法线
- 计算每个像素的着色结果
3.4.2 获得逐像素的法线
通过重心坐标获得法线(下一篇博客)
3.5 三种渲染的结果
并不是Phone Shading一定慢,比如三角形数超过像素数。
4 图形管线 Graphics Pipeline / 实时渲染管线 Real-time Rending
4.1 顶点和三角形变换处理
对应MVP变换。
4.2 光栅化
4.3 判断是否可见(深度缓存)
4.4 Shading 在顶点和像素都会发生
对顶点做shading得在第一步,对像素做着色得在第四步(即产生像素了才能着色)
shader就是控制像素和顶点如何着色的。
5 Shader Programs
5.1 概览
- 对每个顶点和每个像素都会执行(不用写for循环)
- 有顶点着色器 (vertex shader)和片段着色器(fragment shader) (也称为像素着色器)
5.2 GLSL着色器例子
注意由于坐标系选用,光照方向为负数。
上面的程序中,一些参数解释:
5.3 推荐:Shadertoy 网站
Shadertoy 网站:https://www.shadertoy.com/
6 GPUs —— Graphics Pipeline Implentation
GPU是整个图形渲染管线的实现。
GPU的一部分是可编程的。
但是随着GPU的发展,有了几何着色器(可以定义几何的操作动态产生三角形)、compute shader(又称为GPGPU,可以完成通用的计算)
GPU又分为独立显卡和集成显卡。
GPU是一个高度并行的处理器,远远超过CPU的几十倍。特别适合做图形学的项目。