把空间里的物体画在屏幕上。
屏幕由一个个阵列排布的像素点组成,屏幕大小指宽度方向由width个像素点,高度方向由height个像素点。
像素点索引范围:(0, 0) 到 (width - 1, height - 1)
像素点(x, y)的中心坐标为(x + 0.5, y + 0.5), 每个像素点是有面积的。
Canonical Cube:由MVP矩阵变换后所得,xyz在[-1, 1]之间的正方体。
模型是由三角形组成的,因为三角形是最基本的几何平面,能保证是平面,且容易进行插值操作(重心坐标)。
光栅化的过程就是将三角形离散显示在屏幕的每个像素点。
判断三角形abc 和 点p 的关系
方法如下:
点p在三角形abc内,满足以下等式:
Sabp+sbcp+scap≤sabcS_{abp} + s_{bcp} + s_{cap} \leq s_{abc}Sabp+sbcp+scap≤sabc
点p在三角形abc外,满足以下等式:
Sabp+sbcp+scap>sabcS_{abp} + s_{bcp} + s_{cap} > s_{abc}Sabp+sbcp+scap>sabc
如果p在ab的左侧,p在bc的左侧,p在ca的左侧,则p在三角形内,否则不在三角形内。
即红绿蓝三组向量分别叉乘,同号为同一侧。
采样就是把一个函数给离散化的过程
循环屏幕上每个像素格子,判断中心是否是否在三角形内部,是的为1,否为0。
使用AABB包围盒,获取三角形xy的最小/最大的坐标形成AABB包围盒,在包围盒外的像素绝对不会在三角形内,以此剔除屏幕上大部分像素。
获取每一行像素在三角形内的起始点和终止点,则中间的像素均在三角形内,适合斜45。45^。45。狭长的三角形。
因此需要抗锯齿,反走样
抗锯齿其实并没有让像素面积更细,而是让像素颜色不是非0即1,取中间的某一个值,从而在宏观上看不会锯齿明显。
抗锯齿后,边界看上去会模糊。
同样的采样方法采样两种不同频率的函数,得出的结果我们无法区分它。
即采样不足导致锯齿。
傅里叶级数展开: 任何一个周期函数,可以写成一系列正弦、余弦的组合以及一个常数项。
傅里叶变换: 所谓傅里叶变换就是将函数分解成各个不同频率的函数的组合。
傅里叶变换可以理解为将信号从时域变换成频域。
滤波:
从频率的角度上来说,去掉一些特定的频率
通过频域上的分析,不同的频率和信号的变化
去掉中中间的低频信息 高通滤波
高频率 边界
低通滤波,去掉高频信息,变模糊
低频高频都去掉了 留下了其他信息
简单的定义:Filtering(滤波) = Convolution(卷积) = Averaging(平均)
卷积定理:时域的卷积等于频域的乘积
Sampling = Repeating Frequency Contents
采样 = 重复频域上的内容
走样:采样不够快,导致频谱上复制粘贴间隔变小,发生混叠
增加采样率(受制于物理限制,不可能将屏幕分辨率弄高)
即先把一个信号 高频信息拿掉,让频谱覆盖的面小一些,再采样,以原本的间隔复制它,
在一个像素格子里增加多个采样点,得到近似的像素格子覆盖率。
增大了计算量来达到抗锯齿的效果。
如下图:每个像素采样四个点,最后按采样点在三角形内的个数比例决定颜色比例。
找到有锯齿的边界,把边界换成没有锯齿的边界(和采样无关,在图像层面上抗锯齿)
通过颜色变化找到边界后,进行颜色混合,起到抗锯齿的作用
在不同的帧时间上,用像素中的不同的点来采样像素颜色。即将MSAA的采样分解在时间上。
通过降低游戏内的渲染分辨率,同时再通过人工智能算法模型和AI加速硬件单元(Tensor Core)来拉伸输出画面,提高显示分辨率,例如使用1080P的渲染分辨率再通过AI算法和Tensor Core运算输出4K(2160P)的显示分辨率,以此来达成提升帧数的目的。
上一篇:Linux基础命令-setfacl设置文件ACL策略规则
下一篇:微服务导学