O que é um fragmento na programação de gráficos 3D?

37

O que é um fragmento em um shader de fragmento? A Wikipedia diz que:

Em geral, um fragmento pode ser considerado como os dados necessários para sombrear o pixel, além dos dados necessários para testar se o fragmento sobrevive para se tornar um pixel (profundidade, alfa, estêncil, tesoura, ID da janela etc.)

Então são texturas, vértices ou algo mais?

Albus Dumbledore
fonte

Respostas:

31

Na computação gráfica, um fragmento é o dado necessário para gerar o valor de um único pixel de uma primitiva de desenho no buffer do quadro.

Esses dados podem incluir, mas não estão limitados a:

  • posição raster
  • profundidade
  • atributos interpolados (cor, coordenadas de textura etc.)
  • estêncil
  • alfa
  • ID da janela

À medida que a cena é desenhada, as primitivas do desenho são rasterizadas em fragmentos texturizados e combinados com o buffer de quadro existente. Como um fragmento é combinado com os dados já no buffer de quadros depende de várias configurações. Em um caso típico, um fragmento pode ser descartado se estiver mais distante do que o pixel que já está naquele local (de acordo com o buffer de profundidade). Se estiver mais próximo do que o pixel existente, ele poderá substituir o que já existe ou, se a mistura alfa estiver em uso, a cor do pixel poderá ser substituída por uma mistura da cor do fragmento e da cor existente do pixel, como no caso de desenhando um objeto translúcido.

Em geral, um fragmento pode ser considerado como os dados necessários para sombrear o pixel, além dos dados necessários para testar se o fragmento sobrevive para se tornar um pixel (profundidade, alfa, estêncil, tesoura, ID da janela etc.)

Da wikipedia

concept3d
fonte
6

Um fragmento é simplesmente os dados fornecidos pela contribuição dos três vértices ao redor do pixel que você está sombreando.

No Vertex Shader, você produz alguns dados por vértice (cor, cordas de textura, ...). Em seguida, no Fragment Shader, para cada pixel, você obtém uma média ponderada desses valores, que você usa para criar as cores finais do pixel.

XGouchet
fonte
O pixel e todos os outros dados nos buffers invisíveis, como mencionado acima.
StarWeaver 24/03
4

Da mesma forma que um sombreador de vértice atua nos vértices, um sombreador de fragmento (ou pixel) age apenas nos pixels.

O Pato Comunista
fonte
Desculpe, mas isso não está correto sem mencionar a palavra "rastarização" e interpolações.
Notabene
Pior ainda diz pixels - que são distintos dos fragmentos, especialmente quando multisampling AA tornam alvos estão envolvidos, a cobertura de alfa, ou qualquer número de outras situações - Eu baixo voto se eu tivesse a rep
jheriko
4

O que é um fragmento em um shader de fragmento

A única coisa precisa que se pode dizer é definir as entradas e saídas do shader de fragmento.

Já que isso foi feito / é amplo demais, vou me concentrar no lado visual intuitivo.

Um fragmento é a saída raster

O wiki do OpenGL diz:

Um fragmento é uma coleção de valores produzidos pelo Rasterizer.

O que faz sentido, já que o shader de fragmento vem após o rasterizador que produz sua entrada.

E esta é a representação visual da saída do rasterizador:

Fonte da imagem .

A entrada do rasterizador é um triângulo 3D e um ponto de vista, e a saída, é um conjunto de pixels que podem aparecer na tela (se não forem bloqueados por outras pessoas).

Cada um desses pequenos quadrados (que são codificados como um único plixel), é um pedaço do triângulo e fragmento é apenas outro nome para o pedaço.

Ciro Santilli adicionou uma nova foto
fonte
Downvoters, por favor, explique para que eu possa aprender e melhorar o conteúdo ;-)
Ciro Santilli 事件 改造 中心 法轮功 六四
As informações na resposta superior, combinadas com suas explicações visuais, seriam as melhores.
StarWeaver 24/03