GPU图形绘制管线

GPU渲染管线——处理流程总结 cesium 高级渲染引擎,自定义着色器,采用GPU渲染管线的方式,自定义定点渲染器和片段渲染器,本文梳理 GPU管线渲染流程以及主要概念和 处理方式 阅读详情

GPU图形绘制管线

字数2062 阅读167 评论2 

图形绘制管线的三个主要阶段

1、应用程序阶段:

使用高级编程语言(C、C++、Java)进行开发,主要和CPU、内存打交道。诸如碰撞检测,空间八叉树更新,视锥裁剪等经典算法都在此阶段进行。

在该阶段的末端,几何体数据(顶点坐标、法线量、纹理坐标、纹理等)通过数据总线传送到图形硬件。

2、几何阶段:

主要负责顶点坐标变换、光照、裁剪、投影以及屏幕隐射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。

3、光栅阶段:

基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘制完整图像,该阶段进行的都是单个像素的操作,每个像素的信息存储在颜色缓冲器(color buffer 或者 frame buffer)中。

值得注意的是光照计算属于几何阶段,因为光照计算设计视点、光源和物体的世界坐标,所以通常放在世界坐标体系中进行计算;而雾化以及设计物体透明度的计算术语光栅化阶段,因为上述两种计算都涉及深度值信息(Z值),而深度值信息是在几何阶段计算的,并传递到光栅化阶段的。

2.1 几何阶段

几何阶段的主要工作是“变换三维顶点坐标”和“光照计算”。

根据顶点坐标变换的先后顺序,主要有如下几个坐标空间,或者说坐标类型:

Object space,模型坐标空间

World space,世界坐标空间

Eye space,观察坐标空间

Clip and Project space,屏幕坐标空间

GPU处理流程图

GPU.png
GPU.png

1、从object space 到 world space

object space coordinate:表示模型文件中的顶点值,这些值是在模型建模时就得到的。object space coordinate与其它物体没有任何的参照关系,这是区分object space和world space的关键。(也可以理解为object space的参考系是模型的自身原点,每个模型都会相对自身有一个参考系。)

我们将一个模型导入一个场景中以后,就会给它一个相对于坐标原点的位置,那么这个位置就是 world space coordinate。(这里的坐标原点就是世界坐标的参考系,所有的模型在世界空间都以这个坐标系作为唯一的坐标系。世界坐标空间主要是为了描述物体与物体之间的相对关系。)

光照计算通常在world coordinate space(世界坐标空间)中进行的,当然也可以在 eye coordinate space中得到相同的光照效果,因为同一观察空间中物体之间的相对关系式保存不变的。

注意

顶点法线量在模型文件中术语object space,在GPU的顶点程序必须将法向量转换到world space中才能使用,如同必须将顶点坐标从object space转换到world space中一样,但是两者的转换矩阵式是不同的,准确的说,法向量从object space转换到world space的转化 矩阵式world matrix的转置矩阵的逆矩阵。

2、从world space到eye space

所谓eye space,即以camera(视点或相机)为原点,由视线方向、视角和远近平面,共同组成的一个梯形的三维空间,称之为viewing frustum(视锥)。

Frustum.png
Frustum.png

在梯形体内的所有顶点数据时可见的,而超出这个梯形体之外的场景数据,会被视点去除(Frustum Culling,也称之为视锥裁剪)。

3、从eye space 到 project and clip space

裁剪(clip):在视锥体之外的顶点将会被去除掉(Frustum Culling),这一步称之为“Clip”裁剪。

因为在不规则体重裁剪并非易事,所以裁剪会被安排到一个单位立方体中进行,该立方体的对角顶点分别是(-1,-1,-1)和(1,1,1),通常这个单位立方体为规范立方体(Canonical view volume,CVV)。CVV的近平面(梯形体较小的矩形面)的X、Y坐标对应屏幕像素坐标(做下角是(0,0)),Z坐标则是代表画面像素深度。

所以从视点坐标空间到屏幕坐标空间(screen coordinate space)事实上由三步组成:

(1)、用透视变换矩阵把顶点从视锥体重变换到裁剪空间的CVV中;

(2)、在CVV进行图元裁剪;

(3)、屏幕映射,将经过前述过程得到的坐标映射到屏幕坐标系上。

投影:在上述过程中,把顶点从viewing frustum变换到CVV中,这个过程就是我们通常所说的投影。主要的投影方式有两种:正交投影和透视投影。

只有图元完全或部分存在于视锥体内部时,才需要将其光栅化。

2.2 Primitive Assembly and Triangle setup

Primitive Assembly,图元装配,即将顶点根据primitive(原始的连接关系),还原出网格结构。网格由顶点和索引组成,之前的流水线中是对顶点的处理,在这个阶段是根据索引将顶点连接在一起,组成线、面单元。之后就是对超出屏幕外的三角形进行裁剪。

根据右手定则来决定三角面片的法线量,如果法线量朝向视点(法向量与到视点的方向的点积为正),则该面是正面。一般顶点按照逆时针排列,如果该面是反面,则进行背面去除操作(Back-face Culling)。

所有的裁剪剔除计算都是为了减少需要绘制的顶点个数。

附:裁剪的概念

为了减少需要绘制的顶点个数,而识别指定区域内或区域外的图形部分的算法都称之为裁剪。

裁剪算法主要包括:

视域剔除(View Frustum Culling)
背面剔除(Back-Face Culling)
遮挡剔除(Occlusing Culling)
视口裁剪等

处理三角形的过程称之为Triangle Setup。到目前的位置,我们得到了一堆在屏幕坐标上的三角形面片,这些面片都是用于光栅化的(Rasterizing)。

光栅化阶段

光栅化:决定哪些像素被集合图元覆盖的过程(Rasterization is the process of determining the set of pixels covered by a geometric primitive)。

通常的画线算法有:DDA算法、Bresenham画线算法。
区域填充算法有:扫描多边形填充算法、边界填充算法等。

2.3.2 Pixel Operation

Pixel operation又称为Raster operation,是在更新帧缓冲之前,执行最后一系列针对每个片段的操作,其目的是:计算出每个像素的颜色值。

在这个阶段,被遮挡面通过一个被称为深度测试的过程而消除。这齐总包含了很多种计算颜色的方法以及技术。

Pixel Operation主要包括:

1、消除遮挡面。
2、Texture operation,纹理操作,也就是根据像素的纹理坐标,查询对应的纹理直。
3、Blending,混色,根据目前已经画好的颜色,与正在计算的颜色的透明度(Alpha),混合为两种颜色,作为新的颜色输出。

颜色混合公式:
C = a·b+(1-a)d【over操作符】

其中a是透明度值(Alpha),b表示透明物体的颜色,d表示混合前像素的颜色值,C表示最终计算得到的颜色值。

Note:在场景中绘制透明物体,通常需要对物体进行排序。首先,绘制不透明物体;然后,在不透明物体上方,对透明物体按照由后到前的顺序进行混合处理。

4、Filtering,将正在算的颜色经过某种Filtering(滤波或者滤镜)后输出。可以理解为:经过一种数学运算后变成新的颜色值。

Raster.png
Raster.png
最新最详细的GPU体绘制资料 最详细的GPU体绘制资料 Real-time volume rendering with hardware-accelerated raycasting Ralph Brecheisen 立即下载

相关推荐

ArcGIS 泛克里金插值

按照如图所示的步骤填写参数,1处选择subset features。 2:输入数据。 3:输出训练数据。 4:输出测试数据。 5:80,表示80%的比例是训练数据,20%是测试数据。 6:输入的百分比。 1:选择geostatistical wizard。 2:插值方法,克里金插值 3:训练数据。 4:数据字段。 点击下一步: 1:表示泛克里金插值。 2:输出表面类型。 3:转换类型none。 4:趋势剔除的阶数。 点击下一步: 表示东北—西南方向变化平缓。 1:模型优化 2:模型类型(stabl.

yuanYW7556的博客 7274

图形绘制管线描述GPU的渲染流程

图形绘制管线描述GPU的渲染流程,即根据给定的camera,三维物体,光照方向,照明模式和纹理等元素,如何在屏幕上绘制出一个具有三位效果的的二维图像。 在这里我们将图形绘制管线分为三个主要阶段: 一:应用程序阶段 应用程序阶段,我们使用高级语言进行开发,它主要用于与CPU,内存打交道,诸如碰撞检测,场景图的建立等算法在此执行,在该阶段的末端我们将数据(顶点坐标,法向量.纹理及纹

caojianhua1993的博客 1206

Fast-LIO2代码解析 古月居

FAST-LIO,FAST-LIO2与FASTER-LIO - 古月居FAST-LIO2代码解析(一) - 古月居FAST-LIO2代码解析(二) - 古月居FAST-LIO2代码解析(三) - 古月居FAST-LIO2代码解析(四) - 古月居FAST-LIO2代码解析(五) - 古月居FAST-LIO2代码解析(六) - 古月居

li4692625的博客 2783

【OpenGL学习笔记②】——OpenGL基础【渲染管线 顶点着色器 片元着色器 VAO VBO 万字总结】

关键字:OpenGL、顶点着色器、片元着色器(或片段着色器)、着色器程序、链接顶点属性、顶点缓冲对象(VBO)、顶点数组对象(VAO) 、绘制三角形。

Wang_Dou_Dou_的博客 2万+

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7006

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 341

Android GPU渲染屏幕绘制显示基础概念(1)

CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。而对SF来说,只要有合成任务,它就得再去申请VSYNC-sf。

Zhang Phil 3285

【Flow3D实战】从零构建水利冲淤模型:关键步骤与参数详解

本文详细介绍了使用Flow3D构建水利冲淤模型的关键步骤与参数设置技巧。从基础认知到前处理、计算设置和后处理,全面解析如何高效模拟水流与泥沙的相互作用,特别适用于桥墩冲刷、水库泄洪等工程场景。通过实战案例分享,帮助读者掌握Flow3D在水利工程中的精准应用,提升模型精度与计算效率。

weixin_42549723的博客 496

计算机图形学入门11:图形管线与着色器

计算机图形学入门,图形管线,渲染管线。

YanisWu的博客 943

课程1:认识Asp.net Core Web API

本文是《.Net Core从零学习搭建权限管理系统》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。专栏适用于人群:Web后端开发人员Web API是一个很广泛的概念,Asp.net Core Web API是.NET框架用于创建RESTful风格的项目、用于轻松构建可供多个客户端访问的HTTP服务。1、支持RestFul风格编程;

成长的足迹 1255

论文阅读 AIED 2024 Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Pro

该论文题为《Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Programming Courses》,由美国犹他州立大学的 Aashish Ghimire 与 John Edwards 共同撰写,发表于人工智能与教育领域顶级会议。

CSPhD-winston的博客 307

GPU图形绘制管线总结

听说后面老总要过来讲解FLSL的使用,后来搜索到他和AGAL或者HGAL很像,搜索FLSL的资料基本没有,国内根本搜不到一些文献资料,9ria上面提供的资料也大都不适合入门,虽然有一些基础的讲解但是还是有很多基本的概念难以理解。所以只能通过学习其他GPU的语言侧面来了解FLSL的一些内容。 今天的总结主要是大致总结一下GPU的图形绘制管线的一些基本概念和理解。全部援引自下面提到的第一本书...

JeneaXiao1995的博客 290

C语言实现惯导更新算法(机械编排)

四元数可用于描述刚体转动或姿态变换,与方向余弦阵相比,表达简洁。四元数是一个包含四个元素的列向量,列向量的第一个元素表示刚体围绕旋转轴转过的角度大小,其余3个元素代表了旋转轴的方向。

十八与她的博客 1730

GPU 图形绘制管线

GPU vs CPU 由于 GPU 具有高并行结构(highly parallel structure),所以 GPU 在处理图形数据和复杂算法方面拥有比 CPU 更高的效率。 图 1 GPU VS CPU 展示了 GPU 和 CPU 在结构上的差异,CPU 大部分面积为控制器和寄存器,与之相比,GPU 拥有更多的 ALU(Arithmetic Logic Unit,逻辑运算单元)用于数据处理

miaobeihai的博客 677

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

GPU图形绘制管线简介

(阅读GPU+编程与CG+语言之阳春白雪下里巴人所得总结) GPU图形绘制管线是描述GPU渲染(把三维世界显示为屏幕上的二维图像)的流程,主要分为三个主要阶段应用程序阶段、几何阶段、光栅阶段。 1.应用程序阶段 使用高级编程语言进行开发,和CPU、内存交互(诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行)。最后把几何数据通过数据总线传到图形硬件。 2.几何...

weixin_30561425的博客 381

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

(一)GPU图形绘制管线

《GPU 编程与 CG 语言之阳春白雪下里巴人 》读书笔记 图形绘制管线描述 GPU 渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。  图形绘制管线分为三个主要阶段:  (一)应用程序阶段,使用高级编程语言(C、C++、JAVA 等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建

killallpigs的专栏 793

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机图形学绘制多边形代码_《GPU编程与CG语言之阳春白雪下里巴人》- 第二章(GPU 图形绘制管线)...

第二章 GPU 图形绘制管线 万事开头难,每门科学都是如此。        ------ 马克思   图形绘制管线描述 GPU 渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。本章内容涉及 GPU 的基本流程和实时绘制技术的根本原理,在这些知识点之上才能延申发展出基于 GPU 的各项技术,所以本章的重要性怎么说都不为过。欲登高而穷目,勿筑台于浮沙!   本...

weixin_39897749的博客 380

GPU 图形绘制管线

http://www.jianshu.com/p/745558ee672a 参考自 《GPU 编程与CG 语言之阳春白雪下里巴人》 图形绘制管线描述 GPU 渲染流程,即"给定视点、三维物体、光源、照明模式和纹理等元素,如何绘制一幅二维图像"。 在《实时计算机图形学》一书中,将图形绘制管线分为三个主要阶段:应用 程序阶段、几何阶段、光栅阶段。 应

poem_of_sunshine的专栏 380
上一篇: Direct3D顶点坐标变换
下一篇: unity3d制作小地图(MiniMap)的简单Demo
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值