图形学笔记(七)着色 —— Blinn-Phone 反射模型、着色频率、渲染管线、GPU

图形学笔记(六)光栅化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 获取漫反射的反射光

下面的公式是到达的能量乘接收的能量,即为最终反射的能量。(着色与观测方向无关)
b

2.3 高光项(Specular Term)

入射光通过反射进入人眼就会形成高光,为了方便表示,使用法线与半程向量(入射光和反射光的中线)的夹角余弦来表示高光的强弱。

### 2.3.1

结果为 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,nh)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的几十倍。特别适合做图形学的项目。

猜你喜欢

转载自blog.csdn.net/weixin_43399489/article/details/120933184