渲染(render)是图形学的核心功能,它指的是将三维场景转换为二维图像的过程。它可以按照实时性分为两类:
- 实时渲染(Real-time Rendering):用于游戏这种强交互场景,追求流畅性
- 离线渲染(Offline Rendering):用于电影特效这种弱交互场景,追求真实性
实时渲染
实时渲染技术最为常用的是图形管线(Graphics Pipeline),虽然管线这个名字很装逼,其实就是一个流水线,分为 5 个步骤:
- 顶点处理(Vertex Processing):输入是 3D 空间中的顶点,对顶点进行观测变换。
- 三角形处理(Triangle Processing):也称图元处理(Primitive Processing),三角形处理阶段就是根据顶点的定义,将顶点装配成三角形(图元)。之所以要这样,是因为三角形的数学属性更好,用它描述物体更适合渲染。
- 光栅化(Rasterization):在经过之前流程后,三角形仍然处于 3D 空间中,不过我们可以通过正交投影快速获取它们在 2D 空间中的投影。光栅化则是将连续的 2D 投影进行采样,转换成离散的 2D 投影。
- 片段处理(Fragment Processing):片段处理,也称像素处理,它会对每个片段的颜色、纹理坐标、深度值等进行计算,期间会大量应用插值法进行计算。
- 帧缓冲操作(Framebuffer Operations):帧缓冲操作包含了颜色混合、模板测试、深度测试、透明度检查等一系列操作,最终结果会保存在帧缓冲区,显示器会定时读取帧缓冲区,并将内容呈现在屏幕上。
整体而言,实时渲染管线包含观测变换、光栅化、着色三大部分。着色(Shading)就是通过计算来决定三维模型表面每个像素的颜色和亮度的过程。本质而言,着色就是 对不同物体应用不同材质 。
然而,着色(shading)其实在顶点处理和片段处理阶段都可以存在,这取决于着色频率。如果我们采用顶点着色,那么着色可以发生在顶点处理阶段;如果我们采用像素着色,那么着色可以发生在片段处理阶段。
在现代 GPU 中,实时渲染管线的部分阶段是支持可编程的,比如顶点处理阶段和片段处理阶段。在这些可编程阶段中,我们可以编写着色器(Shader)程序,从而生成自定义的着色结果。
离线渲染
离线渲染因为对于实时性要求不高,所以有更多的资源来进行更加逼真的渲染,其中最著名的技术就是光线追踪(Ray Tracing)技术,也称“光追”。
光追模拟光线与物体交互的方式以生成高度真实的图像。此方法通过追踪光线从观察者的视点出发,逆向计算光线到光源的路径,从而得出每个像素的颜色和亮度。光追技术可以处理复杂的光照和阴影效果,实现细腻的反射、折射和全局光照等效果。
RTX 是由 NVIDIA 开发的一种图形处理技术,最著名的是用于其 GeForce RTX 系列显卡。RTX 技术的核心是实现实时光线追踪(Real-Time Ray Tracing),通过硬件加速来提供更高质量的图形渲染。