序言
随着控制技术的发展,如前所述 GPU 的图形控制技术得到了应用,现实生活中常用的 3D 动画电影和格斗游戏都是透过排序机系统图形控制技术来同时实现。现阶段主要就的 3D 图形数学模型包括点阵化图形和强光跟踪两类,责任编辑主要就紧紧围绕点阵化图形进行如是说,叙述了单纯情景下3D图形操作过程,主要就协助听众介绍如前所述点阵化的 3D 图形基本原理及操作过程。责任编辑为系列产品该文,并在下一则系列产品该该文以 Intel Gen12 为例,讲诉 GPU 许多基本硬体模块及如何借助硬体加速图形操作过程。期望透过这种应用软件排序 + 硬体同时实现的方式,让大家介绍 GPU 3D 图形基本原理及操作过程。
在已经开始正式宣布的如是说前,有几点表明:在图形操作过程中,牵涉到矢量、行列式等微积分无须阐释。在前面加进的时候会有提到。该文优先选择了两个单纯的数学模型情景,操作过程也尽量精简。意在重点项目讲诉点阵化业务流程,易于听众认知。所推荐专业课程 GAMES101,该文前面加进的许多相片出自于该幻灯片。
点阵化操作过程
图0 点阵化左图
图0 是点阵化的两个固定式图,当中点阵化主要就顺利完成下列三个机能:将欧几里得光栅(正方形/矩形)二维到萤幕上将二维之后的光栅还原成短片
数学模型建立
Nenon已经开始譬如说点阵化操作过程,为了更单纯的表明点阵化,我们换用相对单纯的数学模型,在四维空间中存在三个正方形,当中正方形1 四个三角形座标分别为(-2, 0, -2)、(2, 0, -2)、(0, 2, -2),正方形2 四个三角形座标分别为(-1, 0.5, -20)、(2.5, 1, -20)、(3, -1.5, -20),或许前面正方形 z 斜率比较大,是为了前面观察透视二维近大远小的效果。在数学模型中,除了被观察物体,还需要确认观察点的位置,这里将相机放在位置(0, 0, 0),观察方向是 z 轴负方向(z-),向上矢量为 y 轴正向(y+)。数学模型如图1所示:图1 数学模型顶视图物体和相机的位置已经放好了,那么我们接下来要做的就是要将相机实际看到的内容最终显示到萤幕上。数学模型是三维的,而最终的成像是二维,所以这当中必然要有二维操作。
正交二维和透视二维
先来看一下透视二维和正交二维的效果图:
图2 透视二维 & 正交二维对比正交二维和透视二维效果可以发现,透视二维的结果会有近大远小的效果,而正交二维不会。正交二维中,以平行线投射方式二维,在工程制图等情景应用广泛。透视二维这种近大远小的效果和人眼成像效果基本一致,前面主要就针对透视二维讲解。也正是因为这种效果,才有了”道理我都懂,可是为什么鸽子这么大”这个梗。绿色的球在视野之外,会被裁剪掉。透视二维本质就是对两个平截头体及平截头体里的物体(图2左半边虚线内部分,包含红球和黄球)做变换,这时候平截头体会被压成长方体(图3-1),变换后的物体也包含在这个长方体中,最终长方体标准化生成[-1, 1] ^ 3标准正方体(图3-2),然后再针对[x, y]平面做二维,二维操作过程中z轴作为深度覆盖参考。图3-1 透视压缩图3-2 座标标准化再看下面三个效果图:图4-1图4-2图4-1铁轨是平行的,但在透视二维的作用下,原本的平行线在远处变得相交。图4-2是观察正交视图和透视视图来对比两者区别,同样,在透视二维下,会有近大远小的效果,(图中四个三角形座标分别为(-1, 10, -20), (1, 10, -20), (-1, -1, 0), (1, -1, 0),z 轴俯视观察。
关于透视二维部分还有几点表明:这里没有推导透视二维行列式,而是直接给出了行列式变换后的效果图,一是期望听众从直观上感受透视二维的效果,二是该文主要就内容是点阵化操作过程的概述,推导不作为重点项目。如果想介绍透视二维的基本原理,可以学习《GAMES101》或者从《Fundamentals of Computer Graphics》中寻找答案针对透视二维的效果,最终呈现出来的就是近大远小的视觉效果无论是正交二维还是透视二维,我们目前做的都是针对欧几里得图形的变换,但是最终的目的是萤幕显示,萤幕显示必然牵涉到分辨率和萤幕尺寸。所以,正交二维和透视二维的最后一步都是标准化(图3-2),最终得到[-1, 1] ^ 3的标准立方体。萤幕上的窗口可以是动态变化的,如:400 x 600,600 x 800等,标准化后透过单纯平移 + 缩放即可顺利完成视口变换。结合我们的数学模型,对三个正方形做透视二维(图5-1),可以看到三个正方形都在平截头体中,做透视二维后(乘透视矩阵)会先得到标准立方体,然后向[x, y]平面二维(暂时忽略z),得到具有近大远小效果的图(图5-2),图5-2动态比对正交二维和透视二维差别,可以很明显看到透视二维之后,z斜率大的正方形会变小很多。图5-1 包含在平截头体中的正方形图5-2 最终显示的正方形(透明)
点阵化 & 着色
在透视二维之后,得到的是[-1, -1] ^ 3标准立方体,这一小节要讲的是如何将这个标准立方体二维并绘制在萤幕上。具体操作过程如下图所示。图6-1
图中有如下两点需要注意:这里先对萤幕做个单纯的抽象,将各个像素抽象为正方形,像素中心即为正方形中心,每个小格子就是两个像素,每个小方格子为 1 * 1,像素位于中心,座标为(x + 0.5, y+0.5)上一小节提到了透视二维之后,会标准化成 [-1, 1] ^ 3 的标准化立方体,这时先忽略 z 座标,根据立方体中各个点的 [x, y] 座标投在萤幕上。现阶段的[x, y]是标准化座标,需要做个单纯的平移 + 缩放操作,将 x -> width,y -> height,当中 width、height 代表的萤幕中显示窗口大小,这一步叫做视口变换。回到我们已经开始的数学模型,三个正方形,共有 6 个三角形,这里假设所有的图形都不会被裁剪,我们假设正方形四个三角形在在经历透视二维 –> 标准化 –> 视口变换后的座标与萤幕座标关系如下图所示(这里是效果左图,并不是按照上文数学模型中的座标得出):图7-1 二维左图
图7-2 包围盒点阵化
图7-3 包围盒点阵化
图7-1在不考虑覆盖的情况下,根据三个正方形各自三角形变换后的结果,确定三个正方形的位置。图7-2、7-3是在确定三角形位置后,根据正方形覆盖的像素对其着色。具体步骤如下(以图7-2为例):首先根据二维后四个三角形的范围确定两个包围盒,这么做的好处是减少搜索范围。确定了包围盒后,依次判定包围盒中的像素是否在正方形内,这里可以用矢量叉乘方法,根据叉乘方向是否同向判定。对于包含在正方形内的像素,对其进行着色。着色操作过程中,牵涉到纹理座标、法矢量等要素的排序,图7-2中我们知道二维之后的四个三角形座标、纹理座标、法矢量,但是无法获得正方形内任一点的这些数据,这时候就会加进正方形的重心座标,借助重心座标透过插值的方法获得正方形内任一点的数据。比如已知正方形四个三角形的纹理座标(u, v),想知道正方形内任一点的纹理座标,就存在三个问题:图7-2、7-3考虑的都只针对自身正方形的点阵化,对于三个正方形的重叠部分没有考虑,前面讲的深度缓冲会解决这个问题。在判定像素与正方形位置关系时,我们判定的是小方格中心点与正方形关系,即使中心点不在正方形内,像素的小方格子仍然会被正方形覆盖,那么小格子是标记为不亮、还是按照被覆盖的面积来着色,这块如果处理的不好很容易出现锯齿,这里就需要反走样控制技术,这里无须阐释。深度缓冲
在透视二维之后得到两个标准正方体,在向 x、y 确定平面二维时会遇到这样的情况,对于三个不同三角形,x、y 相同,z 不同,这时候就要借助深度缓冲方法。不考虑透明效果,上述三个三角形,谁距离摄像机近,前面的就会被遮挡。具体方法如下。图8-1 深度缓冲基本原理在点阵化操作过程中,被着色的像素会记录现阶段点在空间中距离摄像机深度,如果再次被着色的时候,会与之前记录的深度值做比对,如果新的值距离摄像机更近,那么会覆盖掉旧的颜色,否则仍然用旧的颜色。这样就解决了点的覆盖问题,上文仅仅是方法上的阐释,还有很多优化空间,比如我们可以提前深度值的判定,对于被覆盖的点省掉不必要的着色操作。图8-2是实例数学模型执行深度缓冲后的二维结果。图8-2 最终二维
总结
上图是图形管线的主要就操作过程,对照上文例子中的单纯数学模型阐释各个环节工作:Vertex Processing: 三角形处理,对空间中三角形进行变换,针对我们例子中精简的三个正方形数学模型,透视二维包含在三角形变换中。Rasterization: 点阵化操作,对于我们这个例子就是对三个正方形做透视二维 –> 然后向[x, y]平面做二维 –> 视口变换,然后判定二维后的正方形内包含了多少像素。Fragment Processing: 像素着色,例子中就是针对二维后三个正方形内的像素进行着色,这里与光照、纹理映射相关,对于正方形任一点的纹理座标、法矢量可以透过正方形三角形的这些信息及正方形重心座标(透视二维前)排序得到。Blending: 混合上屏,将最终混合结果填充到图形缓冲区,进而刷到萤幕。
END
程序员称8k工资高只要2k,这波MongoDB输麻了🌟 活动所推荐
2023 年 5 月 27-28 日,GOTC 2023 全球开源控制技术峰会将在上海张江科学会堂隆重举行。
为期 2 天的开源行业盛会,将以行业展览、主题发言、特别论坛、分论坛、快闪演讲的形式来诠释此次大会主题 ——“Open Source, Into the Future”。与会者将一起探讨元宇宙、3D 与格斗游戏、eBPF、Web3.0、区块链等热门控制技术主题,以及 OSPO、汽车应用软件、AIGC、开源教育培训、云原生、信创等热门话题,探讨开源未来,助力开源发展。