【问题标题】:Vertex shader vs Fragment Shader [duplicate]顶点着色器与片段着色器 [重复]
【发布时间】:2011-05-24 04:53:59
【问题描述】:

我已经阅读了一些关于 Cg 的教程,但有一件事我不太清楚。 顶点着色器和片段着色器之间到底有什么区别? 在什么情况下,一种比另一种更适合?

【问题讨论】:

  • @genpfault 它绝对不是重复的,它询问顶点着色器与片段着色器的关系。而“重复”是关于像素和顶点的。即使片段一是像素一。如果我们用谷歌搜索但不知道,我们会问,所以这两个问题都需要使用同义词。在提问者的脑海中,它们是两个不同的问题。

标签: opengl cg fragment-shader vertex-shader


【解决方案1】:

片段着色器与像素着色器相同。

一个主要区别是顶点着色器可以操纵顶点的属性。这是多边形的角点。

另一方面,片段着色器负责处理顶点之间的像素的外观。它们按照特定规则在定义的顶点之间进行插值。

例如:如果您希望多边形完全是红色的,您可以将所有顶点定义为红色。如果您想要顶点之间的渐变等特定效果,则必须在片段着色器中进行。

换一种说法:

顶点着色器是图形管道早期步骤的一部分,我认为介于模型坐标转换和多边形裁剪之间。到那时,还没有真正做任何事情。

但是,片段/像素着色器是光栅化步骤的一部分,其中计算图像并填充或“着色”顶点之间的像素。

只需在此处阅读有关图形管道的信息,一切都会展现出来: http://en.wikipedia.org/wiki/Graphics_pipeline

【讨论】:

  • 实际上您不一定将顶点属性设置为红色:您可以在颜色/光栅化所属的片段着色器中轻松且可能更明智地将 fragcolor 设置为红色。
【解决方案2】:

顶点着色器在每个顶点上完成,而片段着色器在每个像素上完成。片段着色器在顶点着色器之后应用。更多关于着色器 GPU 管道link text

【讨论】:

    【解决方案3】:

    Nvidia Cg Tutorial:

    顶点变换是图形硬件管线中的第一个处理阶段。顶点变换对每个顶点执行一系列数学运算。这些操作包括将顶点位置转换为屏幕位置以供光栅化器使用,生成纹理坐标用于纹理化,以及照亮顶点以确定其颜色。

    光栅化的结果是一组像素位置以及一组片段。图元具有的顶点数与光栅化时生成的片段数之间没有关系。例如,仅由三个顶点组成的三角形可能会占据整个屏幕,因此会产生数百万个片段!

    之前,如果您不知道片段的确切含义,我们曾告诉您将片段视为像素。然而,在这一点上,片段和像素之间的区别变得很重要。术语像素是“图片元素”的缩写。像素表示特定位置的帧缓冲区的内容,例如颜色、深度和与该位置相关的任何其他值。片段是更新特定像素可能需要的状态。

    使用术语“片段”是因为光栅化将每个几何图元(例如三角形)分解为图元覆盖的每个像素的像素大小的片段。片段具有关联的像素位置、深度值和一组插值参数,例如颜色、次要(镜面反射)颜色和一个或多个纹理坐标集。这些不同的插值参数是从构成用于生成片段的特定几何图元的变换顶点导出的。您可以将片段视为“潜在像素”。如果片段通过了各种光栅化测试(在光栅操作阶段,稍后将进行描述),片段将更新帧缓冲区中的像素。

    【讨论】:

      【解决方案4】:

      顶点着色器和片段着色器都是不使用固定管线渲染的 3-D 实现的功能。在任何 3-D 渲染中,顶点着色器都在片段/像素着色器之前应用。

      顶点着色器对每个顶点进行操作。如果你有一个固定的多边形网格并且你想在着色器中变形它,你必须在顶点着色器中实现它。 IE。顶点外观的任何物理变化都可以在顶点着色器中完成。

      片段着色器从顶点着色器获取输出并关联颜色、像素的深度值等。在这些操作之后,片段被发送到帧缓冲区以在屏幕上显示。

      一些操作,例如光照计算,你可以在顶点着色器和片段着色器中执行。但是片段着色器提供了比顶点着色器更好的结果。

      【讨论】:

        【解决方案5】:

        在通过 3D 硬件渲染图像时,您通常有一个由顶点定义的网格(点、多边形、线)。要单独操作顶点,通常用于模型中的运动或海洋中的波浪,您可以使用顶点着色器。这些顶点可以具有静态颜色或由纹理指定的颜色,以操纵您使用片段着色器的顶点颜色。在管道结束时,当视图进入屏幕时,您还可以使用片段着色器。

        【讨论】:

        • “通常为模型中的运动或海洋中的波浪单独操作顶点” - 这可能是真的,这更适合于在顶点着色器之后和像素之前参与的几何着色器/片段着色器。
        猜你喜欢
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多