文档章节

Shader 编程原理

程序鸡
 程序鸡
发布于 2017/05/05 13:11
字数 863
阅读 80
收藏 0

最近准备系统的整理和学习下shader编程 查了下网上的一些资料 说一下自己对shader工作原理的理解

简单说来shader 就是可以运行在gpu上可编程的图形程序

shader 分为顶点着色器和片段着色器

关于顶点着色器和片段着色器的含义

顶点着色器和片段着色器被分离为可编程的编程的单元

顶点和片段着色器都拥有强大的并行计算能力,擅长于矩阵计算(不高于4阶),片段着色器可以高速查询纹理数据信息,目前顶点着色器还不行。

 

从图中可以知道GPU渲染管线

顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。简单明了就是顶点着色器负责处理坐标信息,片段着色器负责处理像素颜色数据计算。vert和frag就是这样分工的;前者的输出是后者的输入。

 

那么这些着色器都是依赖图形硬件的 所以图形硬件的发展和shader 的发展密切相关

我们再来看看图形硬件编程的输出和输入

 可编程图形硬件的输入/输出。输入寄存器存放输入的图元信息;输出寄存器存放处理后的图元信息;纹理buffer存放纹理数据,目前大多数的可编程图形硬件只支持片段处理器处理纹理;从外部宿主程序输入的常量放在常量寄存器中;临时寄存器存放着色程序在执行过程中产生的临时数据。

我们再来看看顶点着色器和片段着色器的数据处理流程

Vertex shader program(顶点着色程序)和Fragment shader program(片断着色程序)分别被Programmable Vertex Processor(可编程顶点处理器)和 Programmable Fragment Processo(可编程片断处理器)所执行。

    顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。

 

 片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。

片段着色程序还有一个突出的特点是:拥有检索纹理的能力。对于GPU而言,纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等,就必须使用到片段着色程序。让顶点着色器也拥有检索纹理的能力,是目前的一个研究方向。

  

© 著作权归作者所有

共有 人打赏支持
程序鸡

程序鸡

粉丝 3
博文 13
码字总数 12927
作品 0
成都
程序员
私信 提问
Cocos2d-x2.0 -- 从点,线,面学起

[Cocos2d-x相关教程来源于红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier] 红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x 本章为我的Cocos2d-x教程一书初...

长平狐
2013/03/19
154
0
Cocos2d-x2.0 -- 从点,线,面学起

[Cocos2d-x相关教程来源于红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier] 红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x 本章为我的Cocos2d-x教程一书初...

长平狐
2012/11/19
6.6K
0
Shader顶点偏移通道实现旗帜飘动效果

简介: 在游戏中,如果遇到了类似旗子飘动的动画,可以使用Shader来简单实现,搞了个Shader,把原理和算法简单写了下注释,大家如果需要加上贴图,调整下参数就可以直接用。 / File : Flags...

mango9126
05/28
0
0
cocos2dx(3.X)中使用shader

cocos2dx(3.X)中使用shader 标签: cocos2d-xshader 2016-07-20 12:12 2513人阅读 评论(0) 收藏 举报 分类: OpenGL(10) 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+...

panpan123_
2017/11/02
0
0
OpenGL 笔记 Compiling and Linking a shader program

Preface 这一节所有的主要内容都在一个OpenGL库文件中 ,只需要用LoadShader()函数进行加载即可。但是由于老是出错,所以自己实现了一下,也用以提供给有兴趣了解着色器的编译、连接等原理的...

林-兮
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Dubbo下一站:Apache顶级项目

导读: 近日,在Apache Dubbo开发者沙龙杭州站的活动中,阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划。 本文将为你探秘 Dubbo 2.7背后的思考和实现方式。 作者:...

阿里云官方博客
13分钟前
1
0
量化策略构建:均值回归模型

“ 现在已然衰朽者,将来可能重放异彩。现在备受青睐者,将来却可能黯然失色。” 当事物发展严重偏离其均值时,均值会像万有引力一样令其回归。如果时间足够长,万物都终将回归于其均值。正所...

酒逢知己千杯少
15分钟前
2
0
从内部自用到对外服务,配置管理的演进和设计优化实践

本文整理自阿里巴巴中间件技术专家彦林在中国开源年会上的分享,通过此文,您将了解到: 微服务给配置管理所带来的变化 配置管理演进过程中的设计思考 配置管理开源后的新探索 配置中心控制台...

阿里云云栖社区
19分钟前
1
0
使用screen恢复会话时出现There is no screen to be resumed matching错误解决办法

有时在恢复 screen 时会出现 There is no screen to be resumed matching ******? 输入命令 :screen -d **** 然后再使用恢复命令恢复就可以了...

Alex142857
26分钟前
1
0
只到及格线?盘点科技公司遵循的数据伦理

在过去的一段时间中,数据泄露的新闻时有发生,这也引发了大众对于谁拥有我们的数据、我们的数据如何被使用和共享的关注。尽管在事情发生之后,很多科技公司都表态会以更好的方式来使用和保护...

技术阿飞
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部