计算机图形学GAMES101(七)着色(着色频率、图形管线、纹理映射)
本文最后更新于 2024年5月26日 下午
一个物体的着色工作主要考虑:
- 高光
- 漫反射
- 环境光
接下来是高光
已知 当摄像机的视角越接近R则高光越强。
Blinn-Phong模型
计算公式:
使用l和v两个向量夹角的角平分线h(也叫做半程向量)和法线n的接近程度来计算高光,越接近高光越强。这里的h和n接近一定程度上就反应了上面的v和R接近。n点乘h 表示接近程度,越接近则值越靠近1,如果离得比较远则接近0。这里不考虑有多少光被吸收。
Phong模型是通过计算过v和R的接近程度来计算高光(计算反射方向R不好算)
Blinn-Phong模型是通过计算过h和n的接近程度来计算高光(是Phong模型的改进,半程向量h比较好计算过)
其中
右上角的p代表cos α的指数
下面不同p的值对于高光的影响
环境光
计算环境光时,通常假设任何一个点接收到的环境光都是相同的,任何一个点也会有反射系数。La是计算结果
从这个公式可以看出环境光和光照方向,观测光线都没有关系。
Blinn-Phong反射模型
只需要对于场景中的每一个点都应用Blinn-Phong模型就可以对这个物体进行着色了
着色频率
着色频率就是指把着色应用到那些点上面
第一个球:对于每一个四边形面进行一次着色,这个面上的像素都是同一个颜色
第二个球:对于每一个平面的三个顶点,都计算它的法线然后对每一个顶点都做一次着色,而平面内部的点使用插值来确定颜色
第三个球:对于每一个三角形的平面求出一个法线然后把这些法线在三角形平面内部进行插值就得到了任何一个像素自己的法线方向,然后再进行着色。
三种着色模型:Flat shading、Gouraud shading、Phong shading
Flat shading
对三角形两边做叉乘就可以求出三角形法线,然后三角形进行一次着色,三角形内部都是这个颜色。(为每一个面着色)
Gouraud shading
先求出三角形的顶点的法线然后对每一个顶点做一次着色,三角形内部用插值的方法来确定其颜色。(为每一个顶点着色)
Phong shading
对于每一个像素进行一次着色
不同着色模型的对比
几何的形体足够复杂(细分曲面的面数足够多)时,其实就可以用一些相对简单的着色模型,效果与利用复杂的着色模型的效果几乎没有差别。相反当模型不太精细时应使用逐像素的着色。
怎么求一个面的顶点的法线
将该顶点所关联的三角形平面的法线求一个平均(简单平均或者加权平均),作为顶点的法线。顶点的法线为Nv
实时渲染管线 Graphics (Real-time Rendering) Pipeline
怎么去渲染图形
过程:
- MVP变换
- 抽象成三角形
- 进行深度缓充
- 着色
- 纹理映射
纹理映射
又称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。简单来说,就是把一幅图像贴到三维物体的表面上来增强真实感
其中那个球的不同颜色就是由k_d的只来确定的(球上的所有点都是用的同一个着色模型,只是漫反射系数k_d不同),也就是说我们希望在物体不同位置定义不同的属性。因此引入纹理映射。
怎么定义一个点的基本属性
任何一个三维物体的表面都是二维的,也就是三维空间表面的点都可以对应二维空间中的一个点
纹理其实就是一张二维的图。将其覆盖在一个三维物体的表面这个叫做映射,合起来叫做纹理映射
怎么确定纹理和三维物体的对于关系
纹理上每个点都有其坐标(u,v) 。u,v的范围是在0~1
三角形三个顶点,每个顶点都对应一个uv。
越红则u越大
越绿则v越大
有一张图
这张图片的纹理坐标为
观察地面部分的纹理可得:
同一个纹理可以被重复应用到不同位置