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

            

        

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/8081071.html
Copyright © 2011-2022 走看看