第八章:着色模型
Blinn-Phong 模型
- 漫反射
- 高光
- 环境光
着色是在某一个点进行计算的,要得到一整张图就需要在不同的位置应用着色,就涉及到着色频率
方向都是指单位向量
本节课
Blinn-phong 着色模型
- 高光和环境光
着色频率
渲染管线
纹理映射
重心坐标
高光
观察方向和镜面反射方向接近的时候,可以看到高光。此时,半程向量也和法线方向接近。
最早使用 Phong 模型:判断 R 和 v 是否足够接近,但是计算反射方向不好计算,计算量很大,所以后面优化为 Blinn-Phong 模型:判断 n 和半程向量 h 是否足够接近。
这里简化掉了表示光吸收能量的系数(n*l)
指数 p 是为了缩小高光的范围,在 Blinn-Phong 模型里一般取 100-200
环境光
这里假设任何一个点收到的环境光的强度 I_(a)都是一样的,环境光和光照方向、观测方向都没有关系,是一个常数。(计算真正的环境光远比这个复杂,需要用到环境光照的知识)
着色频率
着色分别应用在每个面、每个顶点(每个平面有四个顶点,每个顶点计算出法线,每个顶点做一个着色。三个顶点连接成三角形,三角形内部每一个点做插值)、每一个像素上(每个顶点求出法线,每个法线的方向在三角形内部做插值,得到每个像素的法线,再做一遍着色)
Flat shading
三角形的两条边做叉积得到法线
gouraud shading
每个顶点求法线,着色后,内部的点通过插值求颜色
Phong shading
顶点求出法线后,三角形内每个点通过插值求出法线方向,再进行着色
用哪种着色模型取决于模型的复杂度
顶点的法线怎么计算:相邻面的法线求(加权)平均
求出两个顶点法线后,中间的法线插值求出来,需要注意求出来的方向向量都是单位向量。
图形管线(实时渲染管线)
从一个场景到一张图经历的过程(显卡 GPU 里的操作)
这个过程是部分可编程(vertex processing 和 fragment processing)的**,**即开发者可以控制顶点和像素是如何着色的,这部分代码就叫做 Shader。
https://www.shadertoy.com/view/ld3Gz2
GPU 非常适合做图形学里的并行计算
纹理映射
纹理用来定义着色时各个点的属性**。**
任何一个三维物体表面都是二维的,这个二维的图形就认为是纹理。
纹理坐标
三角形每个顶点都对应一个坐标。
纹理可以被重复多次
这种重复使用依旧衔接的很好的纹理叫做 tiled textures。