目录
上节课:
(binn-phong反射模型)高光反射 + 漫反射 + 环境光
漫反射项:
高光项 specular term
高光::物体比较光滑,,则反射方向接近镜面反射方向。
高光项产生:观察方向v和镜面反射R方向足够接近时。
那么判断n和h是否接近(n h点乘),就可以判断是否能看到高光项。
ks镜面反射系数,通常认为是白的(镜面反射)。
这里是经验模型,没考虑有多少能量被吸收max(l`n).
这里用半程向量算,而不是用反射方向算,因为h方向更好算。
为什么上面图中公式有指数p:
如果没有p,从0到90度都有高光项,只是强度大小的区别,显然不现实。
blinn-phong模型中,通常p=100~200。
环境光照项 ambient term
假设任意一个shading point,接收到的环境光强度相同,上图公式
I
a
I_{a}
Ia,
k
a
k_{a}
ka相当于shading point的颜色吸收系数。也就是环境光是个常数。
这里是简化了,但实际涉及到全局光照。
如何对所有的点着色?–着色频率 shading frequencies
着色频率:即把着色应用到哪些点(面)上。
上图:
左Flat shading:求每个平面的法线(三角形的两个边做叉积),对每个平面做一次着色。
中Gouraud shading:计算每个三角形顶点的法线方向。每个顶点做一次着色,三个顶点内部的颜色做插值。
右Phong shading:对每个像素做着色。对每个四边形/三角形顶点求法线,对法线方向在三角形内部插值,对任意一个像素自己的法线方向做着色。
这里Phong shading 指的是着色频率,而不是前面提到的着色模型。
每到下面一行,有更多的三角形(和模型本身的几何结构有关)。当模型足够复杂时,逐面flat shading效果不一定差。
如何计算逐顶点法线
- 法一:认为顶点法线是相邻面的法线求平均。
- 法二:认为更大的三角形面贡献的更多----->加权,求平均。
如何定义逐像素法线
求出顶点法线后,用重心坐标插值求各像素法线。
图形(实时渲染)管线 graphics (real-time rendering)pipeline
从三维场景到一张二维图的整个过程:管线。(在gpu里进行的操作)
(z-buffer深度缓存)
(如果顶点着色,那么在顶点就可以着色;如果是逐像素着色,就要在着色阶段着色)
gpu:允许自己编程解决顶点和像素的着色。(shader)
(纹理映射)
shader programs
shader 每个顶点或者像素都会应用,不用for循环(定义顶点或像素如何操作)
纹理映射 texture mapping
即定义不同点的基本属性。
物体表面和一张图有一一对应的关系。
将物体上的某个三角形对应到纹理上的某个三角形。
实现方法:(1.美工;2.自动映射:参数化(几何一个重大研究方向))
这里认为已知不同三角形顶点对应的纹理坐标。
纹理坐标
认为u v范围[0, 1],方便处理