zoukankan      html  css  js  c++  java
  • 可编程图形渲染管线

    其它文章:

    OpenGL: 渲染管线理论

    OpenGL渲染管线

    OpenGL ES 2.0渲染管线


    着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。为了清楚的解释顶点着色和片断着色的含义,我们首先从阐述GPU上的两个组件:Programmable Vertex Processor(可编程顶点处理器。又称为顶点着色器)和 Programmable Fragment Processor(可编程片断处理器,又称为片断着色器)。

        顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元。能够执行顶点程序,而可编程片段处理器则是一个能够执行片段程序的单元。

    顶点和片段处理器都拥有很强大的并行计算能力。而且很擅长于矩阵(不高于4阶)计算,片段处理器还能够快速查询纹理信息(眼下顶点处理器还不行,这是顶点处理器的一个发展方向)。

    如上所述。顶点程序执行在顶点处理器上,片段程序执行在片段处理器上。哪么它们到底控制了GPU渲染的哪个过程。图 8展示了可编程图形渲染管线。

     

     着色语言比較,以及HLSL VS GLSL VS CG - 童童 - lee_shutong 的GPU博客

        对照上一章图 3。中的GPU渲染管线,能够看出,顶点着色器控制顶点坐标转换过程。片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:Vertex program负责顶点坐标变换;Fragment program负责像素颜色计算。前者的输出是后者的输入。

        图 9展示了现阶段可编程图形硬件的输入/输出。输入寄存器存放输入的图元信息;输出寄存器存放处理后的图元信息。纹理buffer存放纹理数据。眼下大多数的可编程图形硬件仅仅支持片段处理器处理纹理。从外部宿主程序输入的常量放在常量寄存器中;暂时寄存器存放着色程序在运行过程中产生的暂时数据。

     

     着色语言比較,以及HLSL VS GLSL VS CG - 童童 - lee_shutong 的GPU博客

    3.2 Vertex Shader Program

        Vertex shader program(顶点着色程序)和Fragment shader program(片断着色程序)分别被Programmable Vertex Processor(可编程顶点处理器)和 Programmable Fragment Processo(可编程片断处理器)所运行。

        顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完毕顶点坐标空间转换、法向量空间转换、光照计算等操作。最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取须要的数据,通常为“纹理坐标、光照信息等”。并依据这些信息以及从应用程序传递的纹理信息(假设有的话)进行每一个片断的颜色计算,最后将处理后的数据送光栅操作模块。

    图 10展示了在顶点着色器和像素着色器的数据处理流程。在应用程序中设定的图元信息(顶点位置坐标、颜色、纹理坐标等)传递到vertex buffer中。纹理信息传递到texture buffer中。

    当中虚线表示眼下还没有实现的数据传递。当前的顶点程序还不能处理纹理信息,纹理信息仅仅能在片断程序中读入。

    顶点着色程序与片断着色程序一般是同一时候存在,相互配合,前者的输出作为后者的输入。只是,也能够仅仅有顶点着色程序。假设仅仅有顶点着色程序。那么仅仅对输入的顶点进行操作,而顶点内部的点则依照硬件默认的方式自己主动插值。比如,输入一个三角面片。顶点着色程序对其进行phong光照计算。仅仅计算三个顶点的光照颜色,而三角面片内部点的颜色依照硬件默认的算法(Gourand明暗处理或者高速phong明暗处理)进行插值,假设图形硬件比較先进,默认的处理算法较好(高速phong明暗处理),则效果也会较好。假设图形硬件使用Gourand明暗处理算法,则会出现马赫带效应(条带化)。

    而片断着色程序是对每一个片断进行独立的颜色计算,并且算法由自己编写,不但可控性好,并且能够达到更好的效果。

        因为GPU对数据进行并行处理,所以每一个数据都会运行一次shader程序程序。即。每一个顶点数据都会运行一次顶点程序;每一个片段都会运行一次片段程序。

     

     着色语言比較。以及HLSL VS GLSL VS CG - 童童 - lee_shutong 的GPU博客

    3.3 Fragment Shader Program

        片断着色程序对每一个片断进行独立的颜色计算,最后输出颜色值的就是该片段终于显示的颜色。能够这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对终于的颜色值进行计算

    片段着色程序另一个突出的特点是:拥有检索纹理的能力。

    对于GPU而言,纹理等价于数组,这意味着,假设要做通用计算,比如数组排序、字符串检索等。就必须使用到片段着色程序。让顶点着色器也拥有检索纹理的能力。是眼下的一个研究方向。

        附:什么是片断?片断和像素有什么不一样?所谓片断就是全部的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比較,而屏幕显示的像素都是经过深度比較的。

  • 相关阅读:
    一个数组找出第k大的数(待补)
    变动二叉树
    判断一个二叉树
    Redis的过期策略和内存淘汰机制
    sql连接详解
    http 请求和格式
    java基础知识
    分页信息
    持续集成之Jenkins自动部署war包到远程服务器
    no-sql数据库之redis
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6757457.html
Copyright © 2011-2022 走看看