文档章节

Shader 编程原理

程序鸡
 程序鸡
发布于 2017/05/05 13:11
字数 863
阅读 44
收藏 0
点赞 0
评论 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而言,纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等,就必须使用到片段着色程序。让顶点着色器也拥有检索纹理的能力,是目前的一个研究方向。

  

© 著作权归作者所有

共有 人打赏支持
程序鸡

程序鸡

粉丝 2
博文 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 ⋅ 0

Cocos2d-x2.0 -- 从点,线,面学起

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

长平狐 ⋅ 2012/11/19 ⋅ 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

Shader顶点偏移通道实现旗帜飘动效果

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

mango9126 ⋅ 05/28 ⋅ 0

Unity3D引擎之高级渲染技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社 和《Unity3D实战核心技术...

jxw167 ⋅ 2017/01/05 ⋅ 0

[Unity Shader] Shader学习笔记1 - 概述1

GPU发展 GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。NVIDIA在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU所采用的核心技术有硬件T&L、立方纹理(Cube m...

NickHomeSelf ⋅ 2016/08/07 ⋅ 0

VC++实战《星际传奇》网游课程第一部分网络游戏开发基础篇(游戏引擎设计)

本系列课程基于最新的DirectX11接口进行深入细致的讲解,内容涉及D3D11原理与应用、DirectInput、DirectSound等; 教程中专门针对新兴的D3D11接口展开深入的讲解,详细讲解了D3D11渲染管线、...

hatred2124 ⋅ 2014/05/12 ⋅ 0

Unity Shader学习记录(八)

Unity Shader学习记录(八)   大部分情况下,Shader的运行过程是与时间无关的静态过程,换句话说游戏进行过程中渲染的结果不会有什么变化;动态光影或许是比较典型的例外,但它们和游戏运...

soul900524 ⋅ 04/13 ⋅ 0

UGUI 橡皮擦效果

原理主要是通过鼠标点击UI的位置,将当前图片的alpha(透明通道)改为0,然后通过Shader叠加渲染 大致效果就是这样: 属性编辑窗口需要填写图片的大小和橡皮檫的大小 界面布局如下: 以下为C#脚...

江湖令 ⋅ 2016/03/11 ⋅ 0

Allen Kashiwa的游戏开发信息

1 基础知识与通用技能 1.1 语言相关 1.1.1 C/C++ C++ Primer 1.1.2 C# C# 编程指南 1.1.3 Lua Programming in Lua 1.1.4 Python 廖雪峰的Python教程 1.2 语言无关 算法图解 Game Programming...

kashiwa ⋅ 2017/08/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部