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的更多相关文章

  1. GPU渲染管线概述

    1.顶点着色器 顶点着色器是流水线的第一个阶段,它的输入来自于CPU.顶点着色器的处理单位是顶点,也就是说输入进来的每个顶点都会调用一次顶点着色器. 顶点着色器需要完成的工作主要有:坐标变换和逐顶点光 ...

  2. 【Aladdin Unity3D Shader编程】之一 基本入门

    OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平 ...

  3. GPU寄存器相关

    1,shader model 3.0 只有256个常量寄存器,32个临时寄存器.对应dx9, opengl2.0, opengles2.0 2,shader model 4.0 有65536个寄存器, ...

  4. CPU GPU设计工作原理《转》

    我知道这非常长,可是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们究竟是怎么"私下勾搭"的.会有利于我们用程序来指挥它们... ...

  5. 着色语言(Shader Language)

    摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...

  6. 深入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 ...

  7. [转]3D渲染管线

    转自:http://tgerm.org/SRP/ 在3D中有两种渲染管线,分别是图形渲染管线和GPU渲染管线. 图形渲染管线 <Render-Time Rendering Third Editi ...

  8. cg语言学习&&阳春白雪GPU编程入门学习

    虽然所知甚少,但康大的<GPU编程与Cg编程之阳春白雪下里巴人>确实带我入了shader的门,在里面我第一次清晰地知道了“语义”的意思,非常感谢. 入门shader,我觉得可以先读3本书: ...

  9. OpenGL渲染管道,Shader,VAO&VBO&EBO

    OpenGL渲染管线 (也就是)OpenGL渲染一帧图形的流程 以下列举最简单的,渲染一个三角形的流程,你可以将它视为 精简版OpenGL渲染管线 更复杂的流程也仅仅就是:在此基础上的各个流程中 添加 ...

随机推荐

  1. Darwin Streaming Server性能测试报告

    为了验证Darwin Streaming Server在流媒体点播上的性能,EasyDarwin开源项目官方特地与国内某大型视频网站进行了一次性能测试(千兆网络环境下),针对本次RTSP直播流媒体测试 ...

  2. 拜托,面试请不要再问我TCC分布式事务的实现原理!(转)

    一.写在前面 之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了不少文章,还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以咱们这篇文章,就 ...

  3. 15款创建美丽幻灯片的 jQuery 插件

    1. Skippr Skippr 是一个超级简单的 jQuery 幻灯片插件.仅仅是包含你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了. Sk ...

  4. virtualBox 不能开启一个新任务的错误

    2016.06.05 这两天想在virtualbox上安装CentOS7.0玩,遇到一个问题: 不能为虚拟电脑 CentOS7 打开一个新任务. The virtual machine 'CentOS ...

  5. Python 参数校验的进化

    Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...

  6. 基于Jquery的XML解析器,返回定制的HTML

    依据HTML模板返回解析的XML 依赖jQuery 1.4​1. [代码]基于Jquery的xml解析器并返回定制的HTML     /** *  jQuery插件 *  Author: pureco ...

  7. ios系统的特点

    iOS优势 1). 比较稳定,因为他是一个完全封闭的系统,不开源,但是这个系统有他自己严格管理体系,比如app store的app应用:他有自己的评审规则,另外很多软件是需要收费的,这在一定程度上也说 ...

  8. Notepad++安装xml插件

    环境: win7 64位 Notepad++7.3.3 原生的Notepad++不自带xml文件的插件,所以在显示xml文件时并不分行(如下图所示),对于用户编辑,查看的操作而言,并不友好,所以需要安 ...

  9. CS231n 2016 通关 第四章-NN 作业

    cell 1 显示设置初始化 # A bit of setup import numpy as np import matplotlib.pyplot as plt from cs231n.class ...

  10. SQL Agent 与 Analysis Server 使用同一个账号

    参考网址:http://www.cnblogs.com/wghao/archive/2010/12/21/1912217.html 场景: 部署了一个作业: 第一步:执行一个SSIS 包进行增量更新 ...