渲染流水线

1)应用阶段(CPU处理)

  首先,准备好场景数据(摄像机位置,视锥体,模型和光源等)

接着,做粗粒度剔除工作。

最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等)

这一阶段最重要的是渲染所需要的几何信息,即渲染土元,渲染图元可以是点,线,三角面等。

a.把数据加载到显存中

  b.设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的。

  c.调用DrawCall,一个命令,CPU通知GPU。(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成)

2)几何阶段(GPU处理)

  主要用于处理所有和我们绘制的几何相关的事情。几何阶段负责和每个渲染图元打交道,进行逐顶点,逐多边形的操作。

几何结算的一个重要任务就是把顶点坐标转换到屏幕空间中,再交给光栅器进行处理。

总结:输入的渲染图元->屏幕空间的二维顶点坐标,每个顶点对应深度,着色等信息。

3)光栅化阶段(GPU处理)

将会使用上一个阶段传递来的数据来产生屏幕上的像素,并渲染出最终的图像。

主要任务是决定每个渲染图元中的哪些像素应该被绘制在屏幕上。

渲染流水线的起点是CPU,即应用阶段。

 

CPU流水线  GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。

   几何阶段:

        顶点着色器/曲面细分着色器/几何着色器

        裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的,但是不可编程。

        屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中。 该阶段不可配置,编程。

     光栅化阶段:

        三角形设置:计算光栅化一个三角形网格锁需要的信息。 不可编程,不可配置。

        三角形遍历:会检查每个像素是否被一个三角形锁覆盖。如果被覆盖,就会生成一个片元(fragment)。而这样一个找到哪些被三角形网格覆盖的过程就是三角形遍历。不可编程,不可配置。

        片元着色器:可编程着色器。在DirectX中,片元着色器被称为像素着色器。

        逐片元操作:最后一步。在DieectX中,称为输出合并阶段。

渲染流水线的最终目:渲染成为一张2D纹理,就是我们看到的屏幕。

输入是:摄像机,光源,shader,纹理等。

        

    

Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线的更多相关文章

  1. Shader 入门笔记(二) CPU和GPU之间的通信

    渲染流水线的起点是CPU,即应用阶段. 1)把数据加载到显存中 2)设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的. 3)调用DrawCall,一个命令,CPU通知GPU.(这个命令仅仅 ...

  2. Shader 入门笔记(一)

    本笔记,是根据自己学习shader的笔记,主要是参照冯乐乐的<Shader 入门精要> 和游戏蛮牛shaderLad视频 和网上一些博客. 为啥要学习这个呐? 自己其实之前学过一段时间的s ...

  3. Shader 入门笔记(一) 如何学习shader

    本笔记,是根据自己学习shader的笔记,主要是参照冯乐乐的<Shader 入门精要> 和游戏蛮牛shaderLad视频 和网上一些博客. 为啥要学习这个呐? 自己其实之前学过一段时间的s ...

  4. OpenCL入门:(二:用GPU计算两个数组和)

    本文编写一个计算两个数组和的程序,用CPU和GPU分别运算,计算运算时间,并且校验最后的运算结果.文中代码偏多,原理建议阅读下面文章,文中介绍了OpenCL相关名词概念. http://opencl. ...

  5. 10月9日Android学习笔记:活动与服务之间的通信

    最近在照着<第一行代码>这本书来学安卓,顺便记下笔记.主要的内容是Android中服务的第二种启动方式,通过活动绑定服务来启动服务,实现活动与服务之间的通信. 一. 首先创建一个服务类 p ...

  6. Shader 入门笔记(三) ShaderLab 初识

    Unity中,Unity Shader 都是ShaderLab 来编写的.ShaderLab 是Unity提供的编写Unity Shader 的一种说明性语言. 1)Properties :定义了着色 ...

  7. Redis入门笔记(二)-配置及运行

    转自: http://gly199.iteye.com/blog/1056424 1.redis基本参数 redis的配置文件中的常见参数如下: daemonize   是否以后台进程运行,默认为no ...

  8. nodeJs入门笔记(二)

    js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状 ...

  9. Scala入门笔记二

    [TOC] 标识符 可用的字符 处理括号类字符,分隔符之外,其他所有的可打印的ASCII字符,如字母,数字,下划线和美元符号($)均可出现在Scala标识符中 插入符包括了(,) [,] {,and} ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165319 Exp2 后门原理与实践

    后门的基本概念及基础问题 后门程序就是留在计算机系统中,供某位特殊使用者通过某种特殊方式控制计算机系统的途径. [1] 后门程序,跟我们通常所说的"木马"有联系也有区别.联系在于: ...

  2. Game 23

    Polycarp plays "Game 23". Initially he has a number nn and his goal is to transform it to  ...

  3. 微服务框架——SpringCloud(三)

    1.Zuul服务网关 作用:路由转发和过滤,将请求转发到微服务或拦截请求.Zuul默认集成了负载均衡功能. 2.Zuul实现路由 a.新建springboot项目,依赖选择 Eureka Discov ...

  4. 网络编程-SOCKET开发之----2. TCP粘包现象产生分析

    1. 粘包现象及产生原因 1)概念 指TCP协议中,发送方发送的若干个包数据到接收方接收时粘成一包.发送方粘包:发送方把若干个要发送的数据包封装成一个包,一次性发送,减少网络IO延迟:接收方粘包:接收 ...

  5. Linux中安装MySQL

    因为使用yum安装.安装过程需保证网络通畅 一.安装mysql 1.yum安装mysqlCentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源 ...

  6. Exp4 恶意代码分析 20164302 王一帆

    1.实践目标 1.1监控自己系统的运行状态,看有没有可疑的程序在运行. 1.2分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systra ...

  7. Django——小结

    课程介绍 MVC MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容 M:Model,主要封装对数据库层的访问,对数据库中的数据进行增.删.改.查操作 ...

  8. 在VB中动态执行VBS代码,可操控窗体控件

    通过执行一段VBS代码来操控窗体内的控件也可以使用AddObject方法添加自己的类,那么在动态VBS代码中也一样可以使用在增加程序扩展性或是有脚本化需求的时候,这个方法还是不错的. Option E ...

  9. Jenkins pipeline job 根据参数动态获取触发事件的分支

    此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...

  10. 导航栏动态添加act属性

    最近做了一个网站,需要设置导航栏的act属性,这里需要用到addClass以及removeClass: $('#topName li').removeClass('active'); $(this). ...