GPU渲染管线与shader
1 几何阶段(顶点shader处理这部分)
模型坐标空间-世界坐标空间-观察坐标空间-屏幕坐标空间
其中从观察空间 到 屏幕空间需要经过3步(CVV单位立方体,规范立方体)
a用透视变换矩阵把顶点从视锥体中变换到裁剪空间(齐次空间,用齐次坐标表示);
b在 裁剪空间进行图元裁剪;(这里就是视域剔除View Frustum Culling),然后齐次空间除w把点转换到CVV中
c屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上
顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法
向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等
操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需
要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传
递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送
光栅操作模块。
------------------------------------------------------------------------------------------------------------------------
2图元装配
就是处理顶点连接关系(这里会进行背面剔除Back-Face Culling,以减少顶点)
------------------------------------------------------------------------------------------------------------------------
3光栅化阶段
决定哪些像素被集合图形覆盖的过程
光栅化前,图形都是连续的,需要通过光栅化把这些连续的图形转换为屏幕上对应的像素点
光栅化后会进行片段操作(片段shader处理这部分)
a 遮挡剔除,消除遮挡面
b 纹理操作Texture operation
c 混合 blending,透明处理
d 滤镜或滤波 filtering ,一种颜色经过某种滤波或滤镜处理后再输出
这里特殊说明下,unity shader 的surf 和自定义光照部分都是在这里处理的,surf可以处理纹理,而光照在几何阶段猜测只是记录光照数据,这里计算光照对颜色的影响
光栅化过程用到的4个缓冲
1 深度缓冲区 z buffer 保存顶点深度
2 模板缓冲区 stencil buffer 保存顶点是否处于阴影体内的标识,有的说模板缓冲室深度缓冲的一部分
3 帧缓冲区 frame buffer 存储深度缓冲和颜色缓冲的混合
4 颜色缓冲区 color buffer
另外最后会进行个视口裁减
片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片
段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片
段着色程序主要针对最终的颜色值进行计算。
片段着色程序还有一个突出的特点是:拥有检索纹理的能力。对于GPU 而言,
纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等,
就必须使用到片段着色程序
片断和像素有什么不一样?所谓片断就是所有的三维顶点
在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素
都是经过深度比较的。
------------------------------------------------------------------------------------------------------------------------
每个顶点数据都会执行一次顶点程序;每个片段都会执行一次片段程序。
unity shaderlab中AlphaTest的位置是在fragment函数之后可以阻止最终渲染到帧缓存,
StencilTest是在fragment之前可以阻止fragment函数执行
下图Culling DepthTest是深度测试(不包括SencilTest的说明)
GPU渲染管线与shader的更多相关文章
- GPU渲染管线概述
1.顶点着色器 顶点着色器是流水线的第一个阶段,它的输入来自于CPU.顶点着色器的处理单位是顶点,也就是说输入进来的每个顶点都会调用一次顶点着色器. 顶点着色器需要完成的工作主要有:坐标变换和逐顶点光 ...
- 【Aladdin Unity3D Shader编程】之一 基本入门
OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平 ...
- GPU寄存器相关
1,shader model 3.0 只有256个常量寄存器,32个临时寄存器.对应dx9, opengl2.0, opengles2.0 2,shader model 4.0 有65536个寄存器, ...
- CPU GPU设计工作原理《转》
我知道这非常长,可是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们究竟是怎么"私下勾搭"的.会有利于我们用程序来指挥它们... ...
- 着色语言(Shader Language)
摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...
- 深入GPU硬件架构及运行机制
目录 一.导言 1.1 为何要了解GPU? 1.2 内容要点 1.3 带着问题阅读 二.GPU概述 2.1 GPU是什么? 2.2 GPU历史 2.2.1 NV GPU发展史 2.2.2 NV GPU ...
- [转]3D渲染管线
转自:http://tgerm.org/SRP/ 在3D中有两种渲染管线,分别是图形渲染管线和GPU渲染管线. 图形渲染管线 <Render-Time Rendering Third Editi ...
- cg语言学习&&阳春白雪GPU编程入门学习
虽然所知甚少,但康大的<GPU编程与Cg编程之阳春白雪下里巴人>确实带我入了shader的门,在里面我第一次清晰地知道了“语义”的意思,非常感谢. 入门shader,我觉得可以先读3本书: ...
- OpenGL渲染管道,Shader,VAO&VBO&EBO
OpenGL渲染管线 (也就是)OpenGL渲染一帧图形的流程 以下列举最简单的,渲染一个三角形的流程,你可以将它视为 精简版OpenGL渲染管线 更复杂的流程也仅仅就是:在此基础上的各个流程中 添加 ...
随机推荐
- WPF popup控件的使用
<Window x:Class="WPFPopup.RuntimePopup" xmlns="http://schemas.microsoft.com/wi ...
- Create an OData v4 Endpoint Using ASP.NET Web API 2.2(使用ASP.NET Web API 2.2创建OData v4端点)
开放数据协议Open Data Protocol(OData)是web的一种数据存取协议,OData通过设置CRUD操作(Create创建.Read读取.Update更新,Delete删除)提供一种统 ...
- EasyDarwin开源团队招募开发组成员
EasyDarwin开源流媒体服务器项目招募开发组成员,共同更新和维护EasyDarwin流媒体服务器,决策EasyDarwin后续开发方向: 加入要求: 1.对开源流媒体项目有浓厚兴趣: 2.有一定 ...
- 4.改变 HTML 图像
<!DOCTYPE html><html><body><script>function changeImage(){element=document.g ...
- SpringBoot-(8)-配置MySQL数据库链接,配置数据坚挺拦截,创建默认数据表
一,链接mysql数据库 # 数据源基本配置 spring.datasource.username=root spring.datasource.password=123456 spring.data ...
- Remote Debugging Android Devices
Remote Debugging Android Devices //在电脑上远程调试安卓设备 By Kayce Basques Technical Writer at Google By Meggi ...
- 【bzoj2588】Count on a tree 主席树
这题给人开了个新思路. 原本构造一个序列的主席树,是这个位置用上个位置的信息来省空间,树上的主席树是继承父亲的信息来省空间. 此题若带修改怎么办? 若对某个点的权值做修改,则这个点的子树都会受影响,想 ...
- LightOJ1245 Harmonic Number (II) —— 规律
题目链接:https://vjudge.net/problem/LightOJ-1245 1245 - Harmonic Number (II) PDF (English) Statistics ...
- 驻守深寒:寻找那些有效地关键K线
K线是组成投机市场的基本符号,也是技术分析的基本工具.可是面对浩如烟海的杂乱K线,特别是市场盘整时,经常使人们的判断发生混乱.支撑之下有支撑,阻力之上有阻力. 前人总结了大量的K线组合和由K线组成的技 ...
- BZOJ 1620 [Usaco2008 Nov]Time Management 时间管理:贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1620 题意: 有n个工作,每一个工作完成需要花费的时间为tim[i],完成这项工作的截止日 ...