学习目标:
提示:这里可以添加学习目标
1.可见性/遮挡(属于光栅化的内容)
解决方法 : Z-buffering(深度缓存或深度缓冲)
2.着色
学习内容:
提示:这里可以添加要学的内容
一.可见性问题引入:
场景中有很多不同的物体,要把这些物体放到屏幕上,自然涉及一个顺序的问题,很直观的想法,先把最远的物体放到屏幕上,再把近的物体放到屏幕上,近的物体遮挡远的物体(这也是油画作家的作图手法,所以这也叫画家算法)
画家算法不能解决的问题:
引入:Z-Buffer
思想:既然对空间中的三角形不好排一个远近顺序,但是对每个像素的远近顺序是好排的
深度缓存算法:
二.着色
通用定义:引入明暗和颜色的不同
图形学中着色的定义:对不同的物体应用不同材质的过程
材质和着色:不同的材质就是不同的着色方法
1.高光
2.漫反射
3.环境光照
着色有局部性(不考虑其他物体的存在,所以没有阴影)
Blinn-Phong反射模型
4.着色频率:所谓着色频率就是说把着色应用到哪些点上
(1)逐三角形(着色应用到一个平面)
(2)逐顶点(每个平面有四个顶点,每个顶点算出对应的法线,然后对每个顶点做一次着色,顶点围成的内部通过插值的方法实现像素的渐变)
(3)逐像素(着色应用到每一个像素上)
5.渲染管线(实时渲染管线)
给出三维模型,给出不同的光照条件,就可以得出渲染的结果了,把所有的东西都合到一块,得到的东西就叫图形管线
从场景到一张图,中间到底经历了什么样的过程,这个过程就叫做管线,管线就是一系列的过程
–>Vertex Processing(顶点处理)
–>Triangle Processing(三角形处理)
–>rasterization(光栅化)
–>Fragment Processing(碎片处理)
描述:
输入是空间中的一些点
第一步,把三维空间中的点投影到屏幕上
这些屏幕上的点形成三角形
通过光栅化把三角形在屏幕上打散为不同的像素,然后进行着色
以上的操作是显卡实现好的,在GPU里进行
6.纹理映射
问题(1):纹理的放大(Texture Magnification, 纹理太小了)
例:一个高分辨率 ( 4k ) 的墙和一个256 * 256的贴图,纹理太小了,纹理就会被拉大
高分辨率的墙,查纹理的时候会查到一些非整数的值,对于每个墙上的点,可以找到对应纹理上的位置,这个位置可能不是整数,可以把他round(四舍五入)成整数
解决方法
(1)双线性插值(Bilinear) : 取周围4个点做插值
(2)Bicubic : 取周围16个点做插值
问题(2):纹理太大了(纹理大了,反而会引起更大的问题–>走样,如下图所示)
三线性插值
各向异性过滤
纹理的应用:
(1)用纹理描述环境光
(2)凹凸贴图
什么是纹理:
在现在的GPU里,我们可以把纹理理解为就是一块内存,以及包括可以对这块内存上的区域进行范围查询或滤波
7.插值(三角形的三个顶点有各自不同的属性,如何把这个不同的属性在三角形内部做一个平滑的过渡–>用到重心坐标)
重心坐标: