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,纹理等。

            

        

  • 相关阅读:
    2019-09-29-阿里三面
    【Layui】在前端提交表单时验证密码是否正确
    【Mivik 的字符串公开赛A】大佬语录(广义后缀自动机)
    【2020ICPC南京J】Just Another Game of Stones(Nim博弈+吉老师线段树)
    【HDU-6291/2018CCPC女生赛E】对称数(散列+树上主席树)
    【计蒜客42547/2019ICPC徐州H】Yuuki and a problem(MEX性质+树套树)
    【HDU-6230/2017CCPC哈尔滨A】Palindrome(式子转换+马拉车+主席树)
    【HDU-6223/2017ICPC沈阳G】Infinite Fraction Path(后缀数组+超级快读)
    【HDU-5785】Interesting(回文串的性质+回文自动机+map空间优化)
    【CF-1452E】Two Editorials (贪心)
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/8081071.html
Copyright © 2011-2022 走看看