随着车载芯片工艺和性能的不断升级迭代,仪表、中控显示元素中3D车模的身影变得越来越常见,汽车可视化带来优势的同时也为开发人员带来了一定的挑战——如何消除模型的锯齿?通常的消除模型锯齿的方法是两种:模型素材优化和软件抗锯齿技术。我们今天要了解的就是一种软件抗锯齿技术。
Kanzi中支持的抗锯齿功能包括全应用程序抗锯齿、应用多重采样或超级采样功能的局部抗锯齿,这里我们以多重采样抗锯齿为例探究一下更深层的图像渲染原理。
Kanzi的多重采样抗锯齿功能设置过程简单,创建对应的Render Pass,并在Render Pass上设置好Multisample Level的值,将该Render Pass通过属性设置到相应的Scene节点,即对该Scene节点下的内容使用了多重采样抗锯齿(具体的操作手顺请参考:Documentation > Best practises > Rendering > Applying anti-aliasing),那么它对应的内部渲染过程是什么样子的呢?
在这之前我们先来看一下OpenGL图形渲染管线与Kanzi的对应关系。
OpenGL的图形渲染管线包括以下几个阶段:
顶点缓冲区/数组对象 ---> 顶点着色器 ---> 图元装配 ---> 光栅化 ---> 片段着色器 ---> 逐片段操作 ---> 帧缓冲区

Vertex Shader和Fragment Shader在Kanzi中都有直接的功能对应,那么Render Pass对应图形渲染管线的哪个阶段?多重采样是应用在哪个阶段的抗锯齿技术呢?
逐片段操作是OpenGL在片段管线执行片段着色器(Fragment Shader)之后,可以对整个帧缓冲区或者单独的片段进行额外的操作,进而影响像素的可见性和最终颜色。
片段在前往帧缓冲区会经历的测试和操作有:片段着色器 ---> 剪裁区域 ---> 模板测试 ---> 深度测试 ---> 混合 ---> 抖动,多重采样就是该过程中的一种抗锯齿技术,它在子片段级别上复制操作。
逐片段操作的大部分功能都是通过Render Pass在Kanzi上设置使用。
模型锯齿的产生原因是OpenGL渲染的几何图片在一个网格上进行光栅化时图元边缘可能在这一过程中变形,导致绘制跨越显示器的对角线时,肉眼可见这种阶梯效应。多重采样作为OpenGL支持的一种减少这种锯齿失真的方法,它将几何图元边缘的每个像素分成一组样本,每个样本在光栅化期间被当作“迷你像素”对待,在渲染几何图元时,就像在帧缓冲区渲染比真实的显示表面上多得多的像素一样。每个样本都有自己的颜色、深度和模板值,这些值在图像做好显示准备前一直存在,在组成最后的图像时,样本被解析为最终的像素颜色。
看到这里你有没有对Kanzi的渲染原理多了一些了解呀?如果有任何问题欢迎下方评论区留言哦。
更多精彩推荐:
帧缓存(FrameBuffer)与Kanzi Render Pass


