前言-课程目录
https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
https://www.bilibili.com/video/BV1X7411F744?p=18
http://games-cn.org/forums/forum/graphics-intro/
一、变换矩阵(lecture2-4.5,homework1)
1.1 视图、相机变换
参数:lookAt向量,up向量,位置。一般位置放在(0,0,0)以及lookat -z轴有很多方便之处,也会有一些问题。
所以Mview = Rview * Tview。Rview-1 乘上x(1,0,0)或者yz均满足 t(xt,yt,zt)等结果。且旋转矩阵为正交矩阵,所以Rview即为Rview逆的转置。
正射投影&&透视投影
正交投影参数:left,right,top,bottom,near,far。先平移中心点到原点,再将xyz轴缩放到【-1,1】。Mortho=Mscale * Mt。
Mt = Translate(-(l+r)/2, -(t+b)/2,-(n+f)/2);
Mscale= Scale(2/(r-l),2/(t-b),2/(f-n));
透视投影:fov,aspect,near,far,left,right。先从锥体挤压成长方体,再做Mortho即可。Mperspective = Mortho * Msquish。
对于挤压而言,z轴不会变化,由图2可以看出点xyz投影到xy
z上满足。y
= (n/z)y。x` = (n/z)x。可得M为
且Msquish * (x,y,n,1) = (x,y,n,1)
问题:z轴上被挤压后,z值变化情况。https://www.cnblogs.com/jackmaxwell/p/6851728.html(注意Zc=W,所以可约,z值在近平面变化巨大,集中在远平面(1.0)。解决z-fighting的一种措施是增加near值,以减小斜率,使得z不过于集中在1.0附近。
答:
1.2 法线变换矩阵(https://zhuanlan.zhihu.com/p/72734738)
法向量在视图空间下如果使用mvMatrix计算不再是正确法线,正确变换矩阵为( (MV)-1)T,推导公式可见链接。一般会在顶点着色器根据MVMatrix计算viewPos lightPos、根据normalMatrix计算normal,并传递到片元着色器。在片元着色器中以视图空间坐标系(好处在于cameraPos为(0,0,0)),根据光照模型计算光照结果。
1.3 轴角+罗德里格斯公式+四元数
二、光栅化&z-buffer(lecture5-6,homework2)
pipeline
MVP变换顶点坐标→ 齐次除法→ viewport变换→ 光栅化→ 光照着色
光栅化底层实现
核心算法
判断点在三角形内:顶点V012到点P的向量分别和V0V1,V1V2,V2V0叉乘
重心坐标插值
Z-buffer
三、光照&着色(lecture7-8,homework3)
参考实时渲染学习记录第三章
四、图形管线&纹理映射(lecture8-9)
重心坐标算法(eg:用于纹理坐标插值)
面积比
纹理抗锯齿方式:nearest/bilinear/cubic采样,mipmap/trilinear采样mipmap,各向异性
切线空间(normal/displacement map)
法线一般在切线空间中为(0,0,1)所以呈现为偏蓝色,切线空间z轴表示法线方向,xy分别表示uv值的变化方向。使用切线空间的原因在于不知道法线需要经过哪种mvp变换,所以统一记录切线空间法线方向。通过在不同坐标系中,计算不同的TBN切线变换向量,用于TBN*normalMap→ 当前坐标系的normal值。
利用TBN的逆 * light→ 切线空间的光照方向,进行反算也是一种可能性。
五、几何表示(曲线曲面)、生成、简化、细分、规范化(lecture10-12,homework4)(略)
六、光线追踪(lecture13-16,homework5光线与三角形相交 6加速结构 7 路径追踪)
光追+场景加速结构
七、材质和表现
八、毛发等高级topic(略)
九、相机、光场
十、颜色感知(略)
十一、动画(略)