Games101 图形学入门笔记

着色(Shading)

着色模型

在图形学中的定义就是对每个物体应用不同的材质,那也就是说材质跟着色是相关的

演示图片

Blinn-Phone reflectance model

下面主要举例这个着色模型的定义实现,先说明一个着色模型主要干的事就是对一个Shading Point(也就是一个点)干的事,至于做什么下面会进行讲解:

直接光照造成的高光,和旁边的漫反射效果,和背面的环境光所造成的效果,基本形成了材质,应用这几种光照效果

演示图片

一个着色点我们会定义一些基本的属性:指向视角的向量v,垂直与点的法线向量n,指向与灯光方向的l,还有表面参数,颜色, 发光等等

演示图片

着色是一个只跟自己有关的行为,只考虑当前这个点是明还是暗,不考虑是否在阴影中,被其他物体遮挡等

演示图片

漫反射

定义,当光线照射到这个点会向四面八方规则的反射出去,这种现象称为漫反射

演示图片

给定一个漫反射点,能接受到多少光照的能量,是法线个灯光方向的夹角来决定的,可以根据他们的余弦值来确定当前能量的大小

演示图片

光线的传播,根据能量守恒,我们认为每个扩散的环形的总能量是不变的,那由于距离也就是半径的增加,每个r距离的单位面积所受到的能量值就是I/r的平方

演示图片

然后根据前面已知着色点到达了多少能量,和接受到了多少能量,就可算出最终这个点的最终我们能看到多少能量,也就是下图公式,kd代表的是这个点本身的扩散系数(色值),又知漫反射是朝着四面八方扩散出去的,所以从每个方向观测时能量应该都是一样的,所以这里不需要考虑view方向

演示图片

高光

定义:当观察视角v跟镜面反射方向R足够接近的时候我们就会看见高光表现

演示图片

在这个blinn-phong模型中他就发现只要半程向量跟法线向量接近的时候就代表着视角方向跟镜面反射方向接近,半程向量就是v+l/v+l的模就是v和l的半程单位向量,记做h,那高光的的公式就是依然是 到达的能量乘以半程跟法线的夹角大小

演示图片

后面有一个指数p,来控制夹角的范围更小的时候才会产生高光,第二张图就是指数增大的效果对比

演示图片

演示图片

环境光

我们假设环境光是从四面八方照射进来的,跟灯光方向l和观察方向v都无关,那就是一个常量强度和环境光的系数就组成了环境光

演示图片

总览

演示图片

着色频率

分为下面几种Shading

在一个三角形里面算出一条法线,然后做一次Shading,称为 flat shading,对每个三角形进行的着色

演示图片

对三角形的三个顶点各算出一条法线,然后对三角形内部的点进行插值,叫做 Gouraud Shading,对顶点进行的着色

演示图片

对每个顶点做一条法线,然后对三角形内每个像素插值一条法线,然后对每个像素进行着色,称为Phong Shading,对每个像素进行的着色

演示图片

视模型而定,每种频率所带来的效果和消耗都会不一样

演示图片

顶点法线计算:对于一个球来说只要是圆心向这个顶点做的向量就是他的法线,但是对于普通几何体来说,大家会用该顶点与之关联的三角形的所有法线求平均得到该顶点法线,更精确一点就是通过与之关联三角形的面积占比来加权得到改顶点法线

演示图片

每个像素的法线计算,通过重心坐标来计算,后面说,不要忘了每个法线转换成单位向量

演示图片