markexin / markexin.github.io

Keep learning......
4 stars 0 forks source link

计算器图形学概念 #7

Open markexin opened 8 months ago

markexin commented 8 months ago

3D 管线

又称图形学管线(graphics pipeline),是计算机将 3D 模型渲染至 2D 屏幕上的一个概念模型。

渲染管线一般仅指 3D 多边形渲染的渲染流程,与 光线追踪(ray tracing) 等不同。光线追踪是根据光路可逆原理,从视点发出光线,当其碰撞到物体表面时,根据表面材质计算出对应的颜色和光强,并继续计算反射与折射等,最终追溯到光源或无贡献点。而 3D 多边形渲染,则是从物体发出光线,并最终落到视点。

渲染管线一般分为 4 个部分,应用(Application)、几何处理(Geometry Processing)、光栅化(Rasterization) 和 像素处理(Pixel Processing)。不同资料、不同实现可能有不同的划分方法,但总体的流程是相似的。

image

着色器

着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。

着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。如果你不知道什么是uniform也不用担心,我们后面会进行讲解。

3D 网格

网格(Mesh),是计算机图形学中用来表示模型的顶点与多边形集合,其中多边形通常为三角形。在现实世界中,物体的表面都是光滑的曲面,但在3D渲染过程中,物体表面由大量细小的多边形组成,当使用的多边形数量足够多,最终可以渲染出非常光滑的曲面。比如我们可以使用大量三角形网格来组成一个球体模型,模型的表面包含了三角形顶点,法线,切线等信息。

3D Engine会把模型的信息存到Mesh中,包含了顶点、三角形、纹理坐标、法线和切线。

3D Engine与3D建模软件的尺寸单位大小可能不一样,所以导入的时候可能会有差异。

渲染管线

在渲染流程中,CPU与GPU正如上文一样通力合作渲染图像。在运算过程中,CPU如同进货的卡车不断地将要处理的数据丢给GPU,GPU工厂调动一个个如工人一般的计算单元对这些数据进行简单的处理,最后组装出产品——图像。 image

渲染引擎分类

  1. 光栅化渲染引擎:

光栅化渲染引擎是最常见的一类渲染引擎。它的工作原理是将三维场景中的几何体转换为二维图像。在这个过程中,光栅化渲染引擎会对三维模型进行三角形分割,并根据顶点的属性(如颜色、纹理坐标等)在像素级别进行插值。最终,渲染引擎会将生成的像素数据发送给显卡进行显示。著名的光栅化渲染引擎包括Unity的Built-in渲染管线和Unreal Engine。

  1. 基于物理的渲染引擎:

基于物理的渲染引擎是近年来较为流行的一类渲染引擎。它基于物理光学原理对光线进行追踪和模拟,以实现更加真实的光照效果。这种引擎能够考虑材质的反射、折射、漫反射等特性,并且通过逼真的全局光照算法提供更加逼真的渲染结果。目前,基于物理的渲染引擎在高质量游戏、电影制作等领域得到广泛应用,例如Pixar的RenderMan和NVIDIA的IRay等。

  1. 实时渲染引擎:

实时渲染引擎是一类专注于实时性能的渲染引擎。在电子游戏、虚拟现实和实时建模等场景中,实时渲染引擎能够快速处理大量的三维数据并在短时间内生成渲染结果。为了实现实时渲染,这类引擎通常会使用各种优化技术,如级别LOD(Level of Detail)、遮挡剔除(Occlusion Culling)等。在实时渲染引擎中,Unity和Unreal Engine都是业界知名度很高的代表。

  1. Ray Tracing渲染引擎:

Ray Tracing渲染引擎是一种基于光线追踪的高级渲染技术。与传统的光栅化渲染引擎不同,Ray Tracing通过模拟光线在场景中的传播路径来计算光照效果。这种引擎能够产生逼真的阴影、反射、折射等效果,为渲染图像带来更高质量的表现。然而,由于Ray Tracing需要大量的计算资源,目前大多数应用还主要局限在高端游戏和电影制作领域,例如NVIDIA的RTX技术和AMD的Radeon Ray Tracing。

skia

Android 框架提供了各种用于 2D 和 3D 图形渲染的 API、图片解码库,以及各种Driver支持。 • 绘图API:2D引擎 Skia,3D引擎 OpenGL ES,RenderScript,OpenCV和Vulkan。 image

impeller

Impeller 为 Flutter 提供了新的渲染运行时。Flutter 团队相信这可以解决 Flutter 早期出现的卡顿问题。Impeller 在引擎构建时预编译一组更小、更简单的着色器 ,因此它们不会在运行时编译。