第八章:着色模型

Blinn-Phong 模型

  • 漫反射
  • 高光
  • 环境光

着色是在某一个点进行计算的,要得到一整张图就需要在不同的位置应用着色,就涉及到着色频率

方向都是指单位向量

本节课

  • Blinn-phong 着色模型

    • 高光和环境光
  • 着色频率

  • 渲染管线

  • 纹理映射

  • 重心坐标

高光

观察方向和镜面反射方向接近的时候,可以看到高光。此时,半程向量也和法线方向接近。

image

最早使用 Phong 模型:判断 Rv 是否足够接近,但是计算反射方向不好计算,计算量很大,所以后面优化为 Blinn-Phong 模型:判断 n 和半程向量 h 是否足够接近。

这里简化掉了表示光吸收能量的系数(n*l

指数 p 是为了缩小高光的范围,在 Blinn-Phong 模型里一般取 100-200

image

image

image

环境光

这里假设任何一个点收到的环境光的强度 I_(a)都是一样的,环境光和光照方向、观测方向都没有关系,是一个常数。(计算真正的环境光远比这个复杂,需要用到环境光照的知识)

image​​image

着色频率

着色分别应用在每个面、每个顶点(每个平面有四个顶点,每个顶点计算出法线,每个顶点做一个着色。三个顶点连接成三角形,三角形内部每一个点做插值)、每一个像素上(每个顶点求出法线,每个法线的方向在三角形内部做插值,得到每个像素的法线,再做一遍着色)

image

Flat shading

三角形的两条边做叉积得到法线

image

gouraud shading

每个顶点求法线,着色后,内部的点通过插值求颜色

image

Phong shading
顶点求出法线后,三角形内每个点通过插值求出法线方向,再进行着色

image

用哪种着色模型取决于模型的复杂度

image

顶点的法线怎么计算:相邻面的法线求(加权)平均

image

求出两个顶点法线后,中间的法线插值求出来,需要注意求出来的方向向量都是单位向量。

image

图形管线(实时渲染管线)

从一个场景到一张图经历的过程(显卡 GPU 里的操作)

image

这个过程是部分可编程(vertex processing 和 fragment processing)的**,**即开发者可以控制顶点和像素是如何着色的,这部分代码就叫做 Shader。

image​​image

https://www.shadertoy.com/view/ld3Gz2
GPU 非常适合做图形学里的并行计算

image

纹理映射

纹理用来定义着色时各个点的属性**。**

image

任何一个三维物体表面都是二维的,这个二维的图形就认为是纹理。

image

纹理坐标

三角形每个顶点都对应一个坐标。

image

纹理可以被重复多次

image

这种重复使用依旧衔接的很好的纹理叫做 tiled textures。

image