zoukankan      html  css  js  c++  java
  • Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线

    渲染流水线

    1)应用阶段(CPU处理)

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

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

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

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

           a.把数据加载到显存中

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

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

    2)几何阶段(GPU处理)

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

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

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

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

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

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

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

     

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

       几何阶段:

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

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

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

         光栅化阶段:

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

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

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

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

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

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

            

        

  • 相关阅读:
    cygwin配合NDK开发Android程序
    和菜鸟一起学c之函数指针
    和菜鸟一起学android4.0.3源码之SD卡U盘等自动挂载配置
    Android系统的开机画面显示过程分析
    android编译系统的makefile文件Android.mk写法
    Linux下makefile教程
    和菜鸟一起学linux之本地git中心仓库建立
    强人总结的Windows XP实用技巧45条(一)
    Webshell下自动挂马的ASP
    多进程Telnet的木马例子
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/8081071.html
Copyright © 2011-2022 走看看