vulakn教程--Drawing a Triangle--Pipeline--Introduction
来源:互联网 发布:qq游戏网络不稳定 编辑:程序博客网 时间:2024/05/26 02:19
原文链接: vulkan-tutorial
Pipeline
前言(Introduction)
Pipeline 是指图形系统对图像信息进行一系列处理的过程,这些图像信息包括顶点信息(坐标、法向量…),像素信息(图像、纹理…)等,最终这些处理好的数据将被放到帧缓冲区(FrameBuffer
)中供应用获取。
图1-Pipeline过程
a.输入装配器(Input assembler) : 从Vertex Buffer 或 Index Buffer 中搜集原始顶点数据。
B.顶点着色器(Vertex Shader): 每一个顶点都会运行一次Vertex Sahder,它将顶点的原始坐标(model space)转换成屏幕坐标(screen space),并为pipeline的下一个阶段提供输入。
c.细分着色器(Teseellation) : 将几何图形细分成更多、更小的三角形使得渲染表面和边缘更加平滑。如下图:
图2-细分
d.几何着色器(Geometry Shader) :作用于每一个图原(primitive)(点,线,三角形),在操作的过程中可能会丢失部分图原,也能会增加图原,功能和Teseellation差不多,但更为复杂,Geometry Shader现在用的并不多,除了Intel的集成显卡外,它在其他类型显卡上的运行性能让人抓狂。
e.光栅化(Rasterization) : 可能叫做像素化更好理解一些。它将图原(primitive)离散成片原(fragments),每一个片原代表FrameBuffer中的一个像素信息,对应于屏幕上的一点的颜色和不透明度等信息,屏幕外的片原将被丢弃,Vertex Shader 的输出结果会和片原做进一步的插值计算。由于深度关系,那些在其他片原后面的片原同样会被丢弃。如下两幅图:
图3-边缘像素化
图4-区域像素化
f.片原着色器(Fragment Shader) : 对于每一个片原,Fragment Shader 都会调用一次,并决定片原使用何种颜色和何种深度值来填充哪一个FrameBuffer(s)。你可以使用来自Vertex Shader的被插值后的数据,这些数据可以包含用于光照的的纹理坐标和法线。
g.颜色混合器(Color blending) : 用于混合在同一FrameBuffer 中不同片原映射的同一像素的情况,你可以选择覆盖、相加或混合它们。
图1-Pipeline 过程图中,绿色的模块表示固定的功能,它们所做的工作已经被预定义好了,不过你可以通过一些参数来进行一些设置。而橙色的模块属于可编程部分,这意味着你可以编写自己的代码使显卡按照你的目的去执行。
在Vulkan中Pipeline 是不可改变的,这意味着如果你想改变着色器、绑定不同的FrameBuffer、改变混合功能(blend function),etc,你必须从头开始重建Pipeline。喜忧参半…。
由于你使用Pipeline的具体目的不同,一些可编程模块就成了可选项,比如,如果你只想画一个几何图形,那么Teseellation 和 Geometry Sahder 就可以不需要了。
- vulakn教程--Drawing a Triangle--Pipeline--Introduction
- vulakn教程--Drawing a Triangle--Pipeline--Shader Module
- vulakn教程--Drawing a Triangle--Pipeline--Fixed function
- vulakn教程--Drawing a Triangle--Pipeline--Render passes
- vulakn教程--Drawing a Triangle--Presentation--SwapChain
- vulakn教程--Drawing a Triangle--Draw--Framebuffer
- vulakn教程--Drawing a Triangle--Draw--CommandBuffer
- vulakn教程--Drawing a Triangle--Set up--Base code
- vulakn教程--Drawing a Triangle--Set up--Instance
- vulakn教程--Drawing a Triangle--Set up--Validation layers
- vulakn教程--Drawing a Triangle--Set up--Logical Device
- vulakn教程--Drawing a Triangle--Presentation--Window surface
- vulakn教程--Drawing a Triangle--Presentation-- Image views
- vulakn教程--Drawing a Triangle--Draw--Render and presentation
- vulakn教程--Drawing a Triangle--Set up--Physical Device and Queue Family
- DirectX 教程: DirectX Tutorial - Direct3D: Drawing a Triangle
- Drawing a UIView
- Drawing With A Color
- rsyslog 收集系统日志
- uva1393 Highways
- 深入研究Java类加载机制
- 将本地创建的工程上传到github仓库中
- 类加载器的工作原理
- vulakn教程--Drawing a Triangle--Pipeline--Introduction
- 电路与Multisim基础 通过更改交流电源的相位产生余弦波
- java继承多态调用异常情况
- NOIP 2014 [D1 T2]联合权值
- 笔试题关于字符串的读取与输出
- Java虚拟机类加载和执行机制
- hdu 5876 Sparse Graph【最短路+思维】好题
- fragment的整理
- 深入理解ButterKnife源码并掌握原理(三)