GAMES101笔记(04)

本篇对应的是第七课

上节课讲完了光栅化的内容,这节课讲的有深度测试,光照和着色

深度测试我在学校看shader入门精要的时候有些印象,但也仅此而已了,我觉得还是要先补一下图形学的知识再去啃入门精要会好一些


 

深度缓存

在计算机成像时,对于一个我们要输出的画面,如何确保画面上的东西的前后遮挡关系正确?普遍运用的一种做法是对于每个像素都记录下它的深度(和摄像机之间的距离),然后在计算新的像素时和原来在这个点上的最浅深度比较,若更浅则替换。由于这些像素和自己的深度值均有一一对应关系,所以所有的深度也可以组成一个图像,深度图和输出的图像是同时存在的

 这是替换部分的代码,就是比较深度后替换或保留

深度值一般用浮点数,因为两个浮点数(尤其是通过计算得到的)很少出现相等的情况,因此能很大程度上保证比较深度时有大小关系


 

着色

着色具有局部性,着色时并不需要考虑阴影,只需要考虑着色点自身的属性

属性主要有高光、漫反射和环境光

漫反射

接收

根据接收光照的方向不同,接收到的能量也不同,当接收面法线和光照方向平行则完全接收,同时接收能量与“法线和光照方向夹角的余弦值”成正比

发射

 当一个点光源发出光,所有光的路线大致是一个不断扩大的球形,假设距离光源距离为1的球型上某个点的光照强度为I,这个球体的表面积是4π,那么距离光源为r的点所在的球形面积为4πr2,光照强度就是I/r2

结合以上两点,我们便可在清楚距离光源位置和法线方向的情况下算出该点的漫反射情况

n*I是表示法线和光照方向的单位向量点乘,众所周知a·b=abcosΘ,ab=1故n·I表示的就是Θ余弦值(庄懂的课第一节就有这个但他没说原因,至此恍然大悟)

kd表示漫反射系数,取值0~1,决定这个点的明暗程度,主要和吸收率有关。但如果我们把kd表示为三通道颜色的rgb值对应红绿蓝,我们就可以在这个点上表示一种颜色

后续高光和环境光也准备在本篇更新(主要还是这篇有点短了而且连续性还蛮强的)

 

posted @ 2023-08-10 22:05  miku今天吃什么  阅读(28)  评论(0)    收藏  举报