渲染流水线

  渲染流水线最终目的:生成或者渲染一张二维纹理,即我们在电脑屏幕上看到的所有效果。它的输入是一个虚拟摄像机、一些光源、一些shader以及纹理等。

  渲染流程分为三个阶段:应用阶段,几何阶段,光栅化阶段。

                

  应用阶段

  通常由CPU负责实现。是由开发者主导的。

  开发者有3个主要任务:

  1. 准好场景数据。例如摄像机的位置、视椎体、场景里的模型、光源等。
  2. 做一个粗粒度剔除工作。把那些不可见的物体剔除出去,这样就不需要再移交给几何阶段。
  3. 设置好每个模型的渲染状态。包括但不限于使用的材质(漫反射颜色、高光反射颜色)、使用的纹理、使用的Shader等。

  输出:渲染所需要的几何信息,既渲染图元(rendering primitives)。渲染图元可以是点、线、三角面等。

 几何阶段:

  负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作。处理所有和我们要绘制的几何相关的事情。例如,决定需要绘制的图元是什么,怎样绘制,在哪里绘制。这一阶段在GPU上进行。

  一个重要任务就是把顶点坐标变化到屏幕空间中,再交给光栅器处理。

  输出:屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息。

  光栅化阶段:

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

  光栅化的任务主要是决定每个渲染图元中的哪些像素应该被绘制在屏幕上。需要对上一个阶段得到的逐顶点数据(例如纹理坐标、顶点坐标等)进行差值。然后再进行逐像素处理。



  CPU和GPU通信

  应用阶段大致可以分为以下3个阶段:

    1.把数据加载到显存。

    渲染所需的数据都要从硬盘加载到系统内存。然后,网格和纹理等数据又被加载显卡的存储空间——显存中。这是因为,显卡对于显存的访问速度更快,而且大多数显卡对于系统内存没有直接的访问权限。

    2.设置渲染状态。

    渲染状态定义了场景中的网格是怎么样被渲染的。例如,使用哪个顶点着色器/片元着色器、光源属性、材质等。

    3.调用Draw Call。

    DrawCall就是一个命令,CPU通过调用DrawCall来告诉GPU开始进行一个渲染过程。一个DrawCall会指向本次调用需要渲染的图元列表。



  GPU流水线

  GPU渲染的过程就是GPU流水线。

    

    图中绿色表示该流水线阶段是完全可编程控制的,黄色表示该流水线可以配置但不是可编程的,蓝色表示该流水线阶段是由GPU固定实现的,开发者没有任何控制权。实线表示该Shader必须由开发者编程实线,虚线表示该Shader是可选的。

原文地址:https://www.cnblogs.com/jgsbwcx/p/8696692.html

时间: 2024-11-14 20:00:51

渲染流水线的相关文章

移动端 像素渲染流水线与GPU hack

什么是 像素渲染流水线 web页面你所写的页面代码是如何被转换成屏幕上显示的像素的.这个转换过程可以归纳为这样的一个流水线,包含五个关键步骤: 1.JavaScript:一般来说,我们会使用JavaScript来实现一些视觉变化的效果.比如用jQuery的animate函数做一个动画.对一个数据集进行排序.或者往页面里添加一些DOM元素等. 当然,除了JavaScript,还有其他一些常用方法也可以实现视觉变化效果,比如:CSS Animations, Transitions和Web Anima

Unity3D Shader之路 写Shader前必须要知道的事情 渲染流水线的概括

版本:unity 5.4.1  语言:Unity Shader 总起: 最近花了一个月的时间把<Unity Shader 入门精要>看完了,没怎么写博文,因为写得太好了,看得有点废寝忘食了,再次强烈推荐. 今天把写Shader前必须要知道的渲染流水线给概括一下,然后简单结合顶点\片元着色器Shader,说说各个代码在流水线的位置,以及职责功能. 渲染流水线: 在写Unity脚本的时候,不管是C#也好还是js也好,都是在跟CPU打交道,做算术运算.调用类成员.控制程序流程.而写Shader不同,

第一章 渲染流水线

1 综述 好吧,既然是从最基础开始说起,那我们就有必要了解什么是Shader,即着色器.与之关系非常紧密的就是渲染流水线.可以说如果不了解渲染流水线的工作流程,就无法说自己真正的了解Shader. 1.1 什么是流水线 要想学会怎么使用Shader,我们首先要了解Shader是怎么工作的.实际上,Shader仅仅是渲染流水线的一个环节,想要让我们的Shader发挥出它的作用,我们就需要知道它在流水中扮演了怎样的角色. 理想情况下,如果把一个非流水线系统分成n个流水线阶段,并且每个阶段耗费时间相同

一篇文章搞懂到底什么是渲染流水线

本文实际上是<Unity Shader入门精要>一书的读书笔记,书中关于渲染流水线的讲解清楚易懂,非常适合作为Shader学习的入门书籍.自知好记性不如烂笔头,遂将相关内容再结合自己的一些理解写作这篇博客记录下来. 我们将图像绘制的流程称为渲染流水线,是由CPU和GPU协作完成的.一般一个渲染流程可以分成3个概念阶段,分别是:应用阶段(Application Stage),几何阶段(Geometry Stage),光栅化阶段(Rasterizer Stage). 应用阶段 应用阶段是在CPU中

「UnityShader入门精要」第二章 渲染流水线

2.3 GPU流水线 2.3.2 顶点着色器 输入来自于CPU,处理顶点数据.输入的每个顶点都会调用一次顶点着色器,所以每次都是对单个顶点进行运算. 主要任务:坐标变换.逐顶点光照. 坐标变换:修改顶点的位置,例如模拟水面波纹效果.果冻效果等. 必须完成的工作,把顶点坐标从模型空间转换到齐次裁剪空间. 常见的如:o.pos = mul(UNITY_MVP, v.position); 2.3.3 裁剪 摄像机视野有限,视野外的物体不需要被处理,可以直接裁剪掉. 2.3.4 屏幕映射 将单位立方体内

GPU渲染流水线的简单概括

GPU流水线 主要分为两个阶段:几何阶段和光栅化阶段 几何阶段 顶点着色器 --> 曲面细分着色器(可选)----->几何着色器(可选)----->裁剪-->屏幕映射  顶点着色器 流水线的第一个阶段,输入来自于CPU,处理的基本单位为单个顶点,输入的每个顶点都会调用一次顶点着色器. 主要工作是:坐标变换(比如改变顶点位置模拟水面.布料等)和逐顶点光照,并输出后续阶段需要的数据(常见的输出路径是经光栅化后交给片元着色器处理). 曲面着色器 一个可选的着色器,用于细分图元. 几何着色

关于渲染流水线的几何变化

看了很多资料,总算是把一个流水线中的几何变化所涉及到的坐标系统和坐标含义搞清楚了.  一个流水线中包含五个坐标系统:物体(模型)坐标系统,世界坐标系统,摄像机坐标系统,裁剪坐标系统,屏幕坐标系统. 对应每个坐标系统,有五种坐标:物体(模型)坐标系统坐标,世界坐标系统坐标,摄像机坐标系统坐标,裁剪坐标系统坐标,屏幕坐标系统坐标. 每种坐标系统之间的转化又对应四中矩阵:物体到世界坐标系统之间的矩阵,世界到摄像机之间的矩阵,摄像机到裁剪坐标系统的矩阵(透视矩阵),裁剪坐标到屏幕坐标系统的矩阵(这个里面

UnityShader入门精要-第二章 渲染流水线笔记

渲染流程包括:应用阶段.几何阶段和光栅化阶段. 1.应用阶段 应用阶段是由我们的应用主导的,通常由CPU负责. 在这一阶段开发者有三个主要任务 首先 需要准备好场景的数据. 其次  为了提高渲染的性能,我们往往要做一个粗粒度剔除,把那些看不见的物体剔除出去,这样就不需要交给几何阶段去处理. 最后需要设置好每个模型的渲染状态.这些渲染状态包括但不仅限于它使用的材质(漫反射的颜色.高光反射的颜色).使用的纹理.使用的shader等.这一阶段最重要的是输出渲染所需要的几何信息,即渲染图元.渲染图元可以

cocos2dx的渲染机制

一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的.跨平台的高性能图形接口.OpenGL ES 则是 OpenGL 在移动设备上的衍生版本,具备与 OpenGL 一致的结构,包含了常用的图形功能.Cocos2d-x 就是一个基于 OpenGL 的游戏引擎,因此它的绘图部分完全由 OpenGL 实现.OpenGL 是一个基于 C 语言的三维图形 AP