GPU渲染管线概述

article/2025/7/24 3:02:37

在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。这个教程里,我们会简单地讨论一下图形渲染管线,以及如何利用它创建一些漂亮的像素。

2D坐标和像素也是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。

图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。所有这些阶段都是高度专门化的(它们都有一个特定的函数),并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每一个(渲染管线)阶段运行各自的小程序,从而在图形渲染管线中快速处理你的数据。这些小程序叫做着色器(Shader)。

有些着色器可以由开发者配置,因为允许用自己写的着色器来代替默认的,所以能够更细致地控制图形渲染管线中的特定部分了。因为它们运行在GPU上,所以节省了宝贵的CPU时间。OpenGL着色器是用OpenGL着色器语言(OpenGL Shading Language, GLSL)写成的,在下一节中我们再花更多时间研究它。

下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。

如你所见,图形渲染管线包含很多部分,每个部分都将在转换顶点数据到最终像素这一过程中处理各自特定的阶段。我们会概括性地解释一下渲染管线的每个部分,让你对图形渲染管线的工作方式有个大概了解。

首先,我们以数组的形式传递3个3D坐标作为图形渲染管线的输入,用来表示一个三角形,这个数组叫做顶点数据(Vertex Data);顶点数据是一系列顶点的集合。一个顶点(Vertex)是一个3D坐标的数据的集合。而顶点数据是用顶点属性(Vertex Attribute)表示的顶点属性有顶点坐标,顶点颜色,纹理坐标等,它可以包含任何我们想用的数据。

为了让OpenGL知道我们的坐标和颜色值构成的到底是什么,OpenGL需要你去指定这些数据所表示的渲染类型。我们是希望把这些数据渲染成一系列的点?一系列的三角形?还是仅仅是一个长长的线?做出的这些提示叫做图元(Primitive),任何一个绘制指令的调用都将把图元传递给OpenGL。这是其中的几个:GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP。

图形渲染管线的第一个部分是顶点着色器(Vertex Shader),它把一个单独的顶点作为输入。顶点着色器主要的目的是把3D坐标转为另一种3D坐标(标准化设备坐标),同时顶点着色器允许我们对顶点属性进行一些基本处理。

图元装配(Primitive Assembly)阶段将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状;本节例子中是一个三角形。

图元装配阶段的输出会传递给几何着色器(Geometry Shader)。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。例子中,它生成了另一个三角形。

几何着色器的输出会被传入光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素生成供片段着色器(Fragment Shader)使用的片段(Fragment)在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。

OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据。

片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。

在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度和模板(Stencil)值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。

可以看到,图形渲染管线非常复杂,它包含很多可配置的部分。然而,对于大多数场合,我们只需要配置顶点和片段着色器就行了。几何着色器是可选的,通常使用它默认的着色器就行了。

在现代OpenGL中,我们必须定义至少一个顶点着色器和一个片段着色器(因为GPU中没有默认的顶点/片段着色器)。出于这个原因,刚开始学习现代OpenGL的时候可能会非常困难,因为在你能够渲染自己的第一个三角形之前已经需要了解一大堆知识了。在本节结束你最终渲染出你的三角形的时候,你也会了解到非常多的图形编程知识。

渲染流程可分为:应用程序阶段(CPU)->几何阶段(GPU)->光栅化阶段(GPU)


http://chatgpt.dhexx.cn/article/dcmxM6ht.shtml

相关文章

Unity渲染管线详解

1.UnityBuild-in渲染管线 当双摄像机的时候,注意Camera中的Clear Flags 和 Depth。 其中Clear Flags在摄像机在渲染时,会进行清屏的操作。选择skybox是除了天空盒都会被清除。 Depth数值越小越先被渲染。 层级剔除:culing mask选择被剔除的…

渲染管线详细概念讲述

1、渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景。 2、渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。一个流水线是一序…

渲染管线概论

什么是渲染管线 渲染管线(渲染流水线)是将三维场景模型转换到屏幕像素空间输出的过程。图形渲染管线主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。 渲染管线的流程 渲染管线的一般流…

unity默认渲染管线切换到URP渲染管线并切换材质

先简单介绍一下渲染管线(URP)是什么,最初的名称是LWRP(Lightweight Render Pipeline),从2019.3版本以后改名为URP(Universal Render Pipeline),提供了对美术师友好的工作…

渲染管线

概述 (Introduction) 图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。如上图所示,场景中的3D物体通过管线转变为屏幕上的2D图像。渲染管线是实时渲染的重要工具,实时渲…

Unity渲染流程(渲染管线)(渲染流水线)

Unity渲染流程(渲染管线)(渲染流水线) 一 渲染的任务二 三个概念阶段三 应用阶段1 准备好需要被渲染的场景数据,做粗粒度剔除2 设置每个对象的渲染状态。3 发送DrawCall。 四 几何阶段1 顶点着色器2 裁剪3 屏幕映射 五…

UE4渲染管线学习笔记

菜鸡入门学习笔记,各种不足还请大佬指点 CSDN传上来的图会变糊,将就看了只有,理解就行。。 个人比较推荐的学习顺序: 1.UE官方渲染介绍: Epic Games 2.UE是如何渲染一帧的: 原文 Unreal – Interplay of Light 译 译:UE4是如…

Render Pipeline渲染管线概述

渲染(Render)定义 渲染在电脑绘图中是指软件从模型生成图像的过程,通俗讲就是在计算机里面给虚拟世界"拍照"。渲染主要分为两种,一种是预渲染(pre-rendering),它的计算强度很大,通常用于电影制作;另一种是实…

【Unity】Unity Shader学习笔记(二)渲染管线

文章目录 渲染管线(Randering Pipeline)渲染流程可编程渲染管线应用阶段把数据加载到显存中设置渲染状态调用DrawCall 几何阶段、光栅化阶段 渲染管线(Randering Pipeline) 渲染管线是将网格、纹理等信息从加载到展现在屏幕上的整…

Unity渲染管线简介

unity渲染管线分为 Build in Render(内置渲染管线)和Scriptable Render Pipline(可编程渲染线) 1.Build-In Render 内置渲染器(默认)兼容太多,反而不能面面俱到,效果不好 2.Scriptable Render Pipline 可编…

Unity3D 渲染管线全流程解析

目录 渲染管线(流水线,流程) 一、渲染任务 二、三个阶段 1、应用阶段 1-1:数据的准备 1-2:设置渲染状态 1-3:发送DrawCall 2、几何阶段 2-1:顶点着色器 2-2:裁剪 2-3&#xff1a…

unity渲染管线及升级URP

unity渲染管线及升级URP 一,unity渲染管线简介二,通用渲染管线URP三,shader升级URP1,Builtin RP和URP中内置Shader 的对应2,总体结构3,include4,光照模式LightMode5,变体Variants6&a…

Unity2020高清渲染管线

一、高清渲染管线加载与环境配置 这里使用2019.3.0f6版本 1、加载高清渲染管线(High Definition RP) 2、创建高清管线脚本文件 3、配置高清渲染管线环境(把色彩空间改为线性空间) 4、把高清渲染管线脚本添加到图形(G…

渲染管线流程

应用阶段--->几何阶段---->光栅化阶段---->逐片元操作----->后处理 1,应用阶段:粗粒度剔除,进行渲染设置,准备基本数据,输出到几何阶段。 2,几何阶段:顶点着色器,曲面细…

渲染管线入门

渲染管线中一些技术名词大部分是英文直译,光看中文很容易被误导。所以我们必须在了解一个技术的具体作用之后,才能了解它到底是什么。这篇博客我主要翻译自Minh Tri Do Dinh的GPUs - Graphics Processing Units一文。也就是一些论坛里推荐给新手阅读的图…

【OpenGL ES】渲染管线

1 前言 渲染管线是指图形渲染流程,涉及到的概念非常多,主要包含图元、片段、光栅化、空间、变换、裁剪、着色器、片段测试、混合等。渲染管线主体流程如下: 为方便读者理解渲染管线,本文将先介绍顶点数据、图元与片段、空间与变换…

渲染管线----通俗易懂向面试官介绍

本文通过简短的语言解释渲染管线,无论是第一次了解渲染管线,还是回顾,都有帮助。 一、完整渲染流程 在介绍渲染管线之前,先全局视角了解一下整个渲染引擎。 整个渲染分为五个阶段,如图 工具阶段、资产调节阶段、应用程…

学习笔记(一)渲染管线

目录 前言 一些疑问 一、什么是渲染管线? 二、为啥这玩意是个流水线? 1.CPU与GPU 2.CPU和GPU数据交互 3.CPU和GPU并行工作 Step1.应用程序阶段(The Application Stage) 一、把数据加载到显存中。 二、设置渲染状态。 三…

计算机图形学笔记(一)渲染管线概述

计算机图形学笔记(一)渲染管线概述 写在前面:因为之前有学习过图形学,博文是对过去知识的拾遗和对学习过程中的总结记录,所以在内容组织上可能不符合逻辑,某些比较熟悉的内容不会体现或简述;在整…

渲染基础-渲染管线(Render-pipeline)

一开始学习计算机图形学的小伙伴们肯定对于渲染管线有一点迷茫,至少当初我就有点迷茫,为了能对后来对计算机图形学感兴趣的萌新小伙伴起到一些帮助,在这里简单讲解一下渲染管线(Render-pipeline)。 该文章还有很多不足…