实时渲染学习(二)GPU渲染管线与可编程着色器
写在最开始:
参考博文:【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器
注意区分图形渲染管线和GPU渲染管线。图形渲染管线包括应用程序阶段、几何阶段和光栅化阶段(详情见
实时渲染学习(一)图形渲染管线概括与总结)。而GPU渲染管线包括:
- 顶点着色器(可编程)
- 曲面细分着色器(可选,可编程)
- 几何着色器(可选,可编程)
- 裁剪(可配置)
- 屏幕映射(固定)
- 三角形设定(固定)
- 三角形遍历(固定)
- 片元(像素)着色器(可编程)
- 合并阶段(可配置,包括混合、深度测试、模板测试等操作)
GPU管线概述
GPU管线包含图形渲染管线的几何阶段(顶点着色器、几何着色器、剪裁、屏幕映射)和光栅化阶段(三角形设定、三角形遍历、像素着色器、合并阶段)。
1. 可编程着色模型
第一个包含顶点处理,面向消费者的图形芯片(NVIDIA GeForce256)由NIVIDIA发布于1999年,并且首次提出了图形处理单元(GPU)的概念,与以往只能进行光栅化处理的图形芯片形成区分。
常见的着色器语言包括GLSL、HLSL和CG都是类C语言。绘制调用(Draw Call)会调用图形API绘制图元,令图形管线运行。
1.1 顶点着色器
顶点着色器可以选择在CPU/GPU中实现,一般在GPU中实现,若需要在CPU中实现,需要将CPU中输出的数据发送到GPU中光栅化。
在顶点着色阶段之前会进行一些数据操作。比如在DirectX中叫做输入装配(Input Assembler)的阶段,会将数据流组织在一起,形成顶点和基元的集合,发送到管线。
顶点着色器中每个顶点被独立地处理,互不影响。顶点着色器提供了修改,创建,或者忽略与每个顶点相关的属性(如位置,颜色,法线,纹理坐标)。通常,顶点着色器程序将顶点从模型空间变换到齐次裁剪空间(MVP矩阵)。
1.2 曲面细分着色器
包括细分控制着色器和细分计算着色器,主要用于对传入的顶点数据实时插值计算,以生成几何体中的附加顶点,也可以用于执行几何体的自适应细分操作,可以提升原图质量和LOD。
1.3 几何着色器
几何着色器(Geometry Shader)是顶点和片段着色器之间一个可选的着色器。
几何着色器的输入是一个单独的类型:点,线段,三角形,几何着色器可以改变传递进来的图元的拓扑结构,且几何着色器可以接收任何拓扑类型的图元,但是只能输出点、折线和三角形条。若未添加几何着色器,则默认行为是直接输出三角形,添加后可以修改输出图形。
流输出(Stream Output):
GPU的管线的标准使用方式是发送数据到顶点着色器,然后顺序进行光栅化处理,再传入像素着色器。 也就是,数据总是通过管线传递,无法访问中间结果。
流输出在Shader Model 4.0中被引入。在顶点着色器(以及可选的几何着色器中)处理顶点之后,除了将数据发送到光栅化阶段之外,也可以输出到流,也就是一个有序数组中进行处理。以这种方式处理的数据可以通过管线回传,从而允许迭代处理。
1.4 像素着色器
也称为片元着色器、片段着色器,用于逐像素计算颜色,在每一个像素上执行着色操作。
像素着色器常用于处理光照及与之相关的效果,如凹凸纹理和调色。像素着色器的调用和屏幕上像素的显示并非一一对应,对于一个像素可能会被调用若干次来确定其最终颜色。
2. 合并阶段
本阶段不可编程,但高度可配置。
合并阶段用于将像素着色器中生成的各个片元的深度和颜色与帧缓冲结合在一起,即进行模板缓冲(Stencil-Buffer)和Z缓冲(Z-buffer)操作。最常用于透明处理(Transparency)和颜色混合(Color Blending)操作也是在本阶段进行的。
实时渲染学习(二)GPU渲染管线与可编程着色器相关推荐
- GPU渲染管线与可编程着色器
https://zhuanlan.zhihu.com/p/26894962 一.全文内容图示 1.章节框架图示 2. GPU渲染管线流程图 其中: · 绿色的阶段都是完全可编程的. · ...
- 【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/71978861 这篇文章是解析计算机图 ...
- Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- “基于云平台的移动终端实时渲染”学习参考
"基于云平台的移动终端实时渲染"学习参考 之前在看"基于云平台的移动终端实时渲染"时,遇到了很多问题.在解决这些问题的过程中,查阅了大量的资料.此处记录下当时所 ...
- Android OpenGl Es 学习(二):定义顶点和着色器
概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...
- 实时渲染学习(三)图形渲染与视觉外观
参考博文:[<Real-Time Rendering 3rd> 提炼总结](四) 第五章 · 图形渲染与视觉外观 The Visual Appearance 一.光照与材质 光源主要分为: ...
- 实时渲染学习(四)纹理贴图及相关技术
参考博文:[<Real-Time Rendering 3rd> 提炼总结](五) 第六章 · 纹理贴图及相关技术 概念导览: 纹理管线 The Texturing Pipeline 投影函 ...
- OpenGL ES 2.0 for Android教程(二):定义顶点和着色器
OpenGL ES 2 第二章:定义顶点和着色器 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ...
- (二)unity自带的着色器源码剖析之——————UnityCG.cginc文件(上篇:数学常数、颜色空间常数和函数、顶点布局格式结构体、进行空间变换的函数、HDR级光照贴图编解码相关函数等)
一.数学常数 unity3D内置着色器定义了一系列的数学常数,如下: 从第3行开始,第13行结束: #ifndef UNITY_CG_INCLUDED #define UNITY_CG_INCLUDE ...
最新文章
- Android中事件分发机制的总结
- 下载地图包,并基于python的pyshp库读取.shp数据来获取中国省界的经纬度数据
- LeetCode OJ 147. Insertion Sort List
- poi处理excel导出
- android动态设置全屏,Android开发之全屏与非全屏的切换设置方法小结
- mysql 5.6 ddl 锁表_MySQL数据库之MySQL5.6 Online DDL 是否锁表、rebuild表、inplace的说明...
- pythonsuper继承规则,深入理解Python中的super()方法
- 端午节那晚,见了个小学时的同学!
- 通信专业顶刊_通信类期刊排名
- 数学三次危机(四)第一次数学危机
- 多光谱高光谱图像算法面经
- 重装 UOS Deepin V20 后必安装软件(个人习惯)
- 安卓微信跳转页面、重定向页面空白,ios系统正常、pc正常、安卓浏览器正常。
- 谷歌翻拉取别的分支_如何将品牌分支机构的位置添加到Google地图
- 【MC 网易-我的世界-mod开发基础笔记】 --- 前期准备
- MySQL:慢查询日志
- 雷军:5年100亿,All in AIoT,手机+AIoT成小米双引擎...
- 【Python实战】--词云制作
- 物流企业的信息化融合趋势及竞争战略研究 (zt)
- 【C语言】qsort函数的使用和模拟实现
热门文章
- Zemax学习笔记(3)- Zemax中的序列模式和非序列模式
- 《赛德克·巴莱》影评--野蛮的骄傲
- 基于STM32的水质浑浊度和PH值监测系统设计(仿真+程序+讲解)
- springboot log4j:WARN No appenders could be found for logger
- CSerialPort教程(1) - CSerialPort项目简介
- blender导入OBJ缺失顶点颜色的解决办法
- 突破海康相机255预置点的限制
- 钰泰ETA7014S2G 可编程过压保护芯片 耐压高达36V 可用作高压开关
- 2)- 性能测试的基本概念
- python基础实例教程 微课版-清华大学出版社-图书详情-《Python基础入门-微课视频版》...