Lecture 7:Shading 1(lllumination,Shading and Graphics Pipeline)
Visibility / occlusion 解决可见性和遮挡的问题
可见性,Z-buffering
Z-Buffer 深度缓存
Idea:
- Store current min. z-value for each sample (pixel)
- Needs an additional buffer for depth values
- -- frame buffer stores color values
- -- depth buffer (z-buffer)store depth
利用深度缓存的想法维护遮挡信息,维护深度缓存算法即可,与顺序无关
更新示例
--对于MSAA来说,深度缓存应该针对的是采样点而不是像素点
shading:着色
引入明暗的不同,引入颜色的不同
给物体施加材质的过程。包括光照和texture。
Blinn-Phong Reflectance Model
specular高光:与观察方向有关 镜面反射相关
diffuse漫反射:与观察方向无关,光线打过来,均匀地反射到四面八方。比如墙面
ambient环境光:间接光照,可以设置为常数
着色具有局部性,比如下面这张图,它只考虑了光照和自己,不考虑其他物体的存在,没有阴影
漫反射 Diffuse Reflection
光线考虑衰减,I/r^2,实际衰减的是irradiance(单位面积的光的power)
max的作用,如果点乘是负数的话没有物理意义,所以直接记为0
物体有颜色是因为会吸收一部分颜色光,然后反射不吸收的颜色光。
考虑每一点有不同的吸收率 就是图中的系数 kd (表示成三通道的rgb)
不管从哪里观测,看到的应该都一样,因为漫反射是均匀的射向四面八方
Lecture 8: Shading 2 (Shading ,Pipeline and Texture Mapping)
高光 Specular Term(Blinn-Phong)
简化了吸收的计算--Blinn-Phong 还是一个经验模型
指数p的作用是为了更合理的模拟
常用的p是 150 ~ 200
环境光 Ambient Term
常数
着色频率
顶点求法线 -- 与这个顶点有关系的所有三角形的发现求平均,也可以加权平均(三角形大小不一样)
Graphics (Real - time Rendering) Pipeline 实时渲染管线
如何从场景到一张图,经历的过程就是管线
图形渲染管线
- 三维空间顶点经过mvp矩阵变换,变成屏幕空间的顶点。
- 屏幕空间的顶点,经过三角形处理,组成三角形。
- 三角形经过光栅化,变成fragment(片元)。
- fragment经过shading,计算光照、纹理映射(比如采用布林冯模型、微表面模型,就在此处进行相应的计算),变成fragment。
- 带材质的fragment经过framebuffer(比如深度处理),变成屏幕上的图像。
*具体过程是,先进行mv矩阵变换,然后对顶点进行着色(包括法向量、纹理坐标、颜色等),之后投影矩阵变换,得到一个标准化立方体(正交投影得到标准立方体好理解,但其实透视投影得到的也是标准立方体,经过压缩之后的),之后经过视锥剔除这一步操作,避免不必要的时间消耗,此时得到的还是标准化立方体,顶点的坐标还是三维的,然后经过视口变换,得到对应屏幕大小的二维图像,此时的顶点包括所有需要的信息(包括法向量、纹理坐标、颜色等)。然后进入光栅化阶段,先进行三角形处理,对顶点与顶点之间做插值,然后做光栅化,对应到像素,然后做shadding(包括纹理映射),对像素着色,之后做可视化处理、alpha测试、模板测试等,上屏到显示设备
GPU -- 高度并行化的处理器
纹理映射
*重心坐标,用来做插值
参考文章:GAMES101 梳理 / 个人向图形学笔记-CSDN博客