O texto foi interessante, mas a parte do diagrama que mostra OpenGL / WebGL / WebGPU como se fossem construídos sobre Vulkan está errada
WebGL e WebGPU funcionam diretamente sobre D3D e Metal, sem passar por Vulkan
Além disso, Vulkan não é open source, e sim um padrão
WebGPU não se limita ao navegador e também é oferecido pelas bibliotecas Dawn para C++ e WGPU para Rust, podendo rodar em Windows, macOS, Linux, iOS, Android etc.
Vulkan funciona em um pouco mais de plataformas do que DirectX, mas não vem na instalação padrão do Windows e não roda em macOS nem iOS
Também quero acrescentar que Vulkan não é open source, e sim um padrão aberto
As implementações reais ficam por conta de cada fabricante de hardware, e Vulkan é basicamente só arquivos de cabeçalho
Além disso, ele também funciona bem em plataformas Apple por meio de camadas de tradução de Vulkan para Metal, como MoltenVK e KosmicKrisp
Vulkan não é totalmente multiplataforma, mas cobre uma faixa muito maior do que DirectX
DirectX é usado em Windows e Xbox; Vulkan, em Linux, Android, Windows, Nintendo Switch, Switch 2 etc.
Vale mencionar que WebGPU é uma API unificada sobre as APIs nativas de cada plataforma, como DirectX, Vulkan e Metal
As APIs da Khronos têm inúmeras extensões, mas algumas são proprietárias, o que prejudica a portabilidade
O PlayStation não suporta Vulkan, e no Switch o mais comum é usar NVN em vez de OpenGL/Vulkan
Só o fato de Vulkan rodar no Windows já o torna mais genérico do que DirectX, na minha opinião
O fato de Vulkan não funcionar em alguns ambientes Linux com VNC não é algo comum
A maioria dos usuários recebe suporte a Vulkan pelos drivers da GPU
A qualidade do curso neste site é impressionante
Eu apoiaria o projeto só para conseguir comprar o livro, mesmo que fosse em pré-venda
Estou acompanhando desde o primeiro texto, e cada artigo me impressiona mais
Se você quiser experimentar com shaders, recomendo estas IDEs
shadertoy – baseada no navegador, a mais fácil e popular
Shadron – gosto bastante da usabilidade, mas é um pouco mais nichada
SHADERed – a UX leva um tempo para acostumar, mas tem recursos suficientes
Encontrei wgshadertoy no gerenciador de software do Mint
Suporta várias plataformas, como flatpak, AUR, macports e Windows
No macOS ou iPadOS, dá para começar facilmente com shaders Metal usando Playgrounds
Também existe o Bonzomatic, usado em competições de live coding de shaders na demoscene
Programar no fim das contas é o processo de converter o que uma pessoa entendeu em algo que o computador consiga entender
Mas programação de GPU é muito mais difícil
Há inúmeras armadilhas, inconsistências entre hardware e software, falta de ferramentas de depuração, e a experiência de desenvolvimento é bem ruim
Também é uma pena que a comunidade pareça ter pouca disposição para melhorar isso
OpenGL e as versões anteriores ao DirectX 12 eram tentativas de abstrair os detalhes do hardware, mas no fim a abstração acabou sendo prejudicial
Ao escrever um fragment shader, a parte menos intuitiva é a ideia de receber coordenadas e devolver uma cor
Diferente de desenhar com uma caneta, o shader calcula a posição de cada pixel e decide sua cor
Em vez de pensar em mover objetos, você precisa pensar em manipular o espaço
Vertex shaders parecem mais naturais porque produzem a posição dos triângulos
Isso só parece pouco intuitivo quando se abusa de fragment shaders
Na prática, eles cuidam da etapa final do pipeline de renderização, como amostragem de textura e cálculo de iluminação
Em PBR ou renderização diferida, a maior parte dos shaders é compartilhada, e só os efeitos especiais são customizados
Isso não é um problema dos shaders em si, mas da diferença entre gráficos raster e vetoriais
Shading não é desenhar contornos, e sim representar materiais com base física
Pintura se aproxima mais de shading; desenho a caneta, não
Usar fragment shaders para desenhar um retângulo é a abordagem errada
Shaders servem para fazer o sombreamento (shading) de um retângulo
Na prática, o vertex shader define as bordas, e o fragment shader preenche o interior
Para fins didáticos, às vezes se omite o vertex shader e se preenche a tela inteira com um fragment shader
A parte mais difícil de aprender código para GPU é que a configuração inicial é complexa e obscura
Conceitos como formato de dados, ordem de transformações e a fronteira entre CPU e GPU são difíceis, e a documentação é insuficiente
O sistema de variáveis globais da GPU também é confuso
Parte das perguntas diz respeito mais ao design da API do que à GPU em si
A GPU usa uma arquitetura SIMT, então consistência no acesso aos dados é importante
As transformações são aplicadas sequencialmente dentro de cada thread, e a fronteira entre CPU e GPU pode ser cruzada várias vezes dependendo do orçamento de performance
Variáveis globais são um conceito de constantes enviadas igualmente para cada thread, como uniforms
Em CUDA, acesso global é possível com operações atômicas, mas com grande custo de performance
Um curso introdutório de WebGL seria um bom ponto de partida
O nível de acabamento do site é surpreendentemente alto
Os diagramas, a barra de rolagem e o estilo estão excelentes
Shaders surgiram antes da GPU e também podem rodar na CPU
O ponto central da GPU é o modelo de execução SIMT/SIMD, e shaders são essencialmente o conceito de funções de callback
Acho que o fato de poderem ser escritos com o mesmo raciocínio sequencial da CPU é o que torna shaders simples e elegantes
Fiquei especialmente impressionado com o fato de todas as ilustrações terem sido feitas no Figma
Deixei uma resposta dizendo que o feedback é excelente
O trabalho é realmente bonito e muito bem acabado
Concordo 100%. Fiquei curioso se este site é um app customizado feito com Next.js
Excelente trabalho. Foi um prazer acompanhar
Recomendo o vídeo do Iñigo Quilez, “This painting is a mathematical formula”,
que mostra muito bem o conceito de shader como uma função que expressa as coordenadas x e y de cada pixel
1 comentários
Comentários do Hacker News
WebGL e WebGPU funcionam diretamente sobre D3D e Metal, sem passar por Vulkan
Além disso, Vulkan não é open source, e sim um padrão
WebGPU não se limita ao navegador e também é oferecido pelas bibliotecas Dawn para C++ e WGPU para Rust, podendo rodar em Windows, macOS, Linux, iOS, Android etc.
Vulkan funciona em um pouco mais de plataformas do que DirectX, mas não vem na instalação padrão do Windows e não roda em macOS nem iOS
As implementações reais ficam por conta de cada fabricante de hardware, e Vulkan é basicamente só arquivos de cabeçalho
Além disso, ele também funciona bem em plataformas Apple por meio de camadas de tradução de Vulkan para Metal, como MoltenVK e KosmicKrisp
DirectX é usado em Windows e Xbox; Vulkan, em Linux, Android, Windows, Nintendo Switch, Switch 2 etc.
O PlayStation não suporta Vulkan, e no Switch o mais comum é usar NVN em vez de OpenGL/Vulkan
O fato de Vulkan não funcionar em alguns ambientes Linux com VNC não é algo comum
A maioria dos usuários recebe suporte a Vulkan pelos drivers da GPU
Eu apoiaria o projeto só para conseguir comprar o livro, mesmo que fosse em pré-venda
Estou acompanhando desde o primeiro texto, e cada artigo me impressiona mais
Tem trabalhos impressionantes do Kirell Benzi
Suporta várias plataformas, como flatpak, AUR, macports e Windows
Mas programação de GPU é muito mais difícil
Há inúmeras armadilhas, inconsistências entre hardware e software, falta de ferramentas de depuração, e a experiência de desenvolvimento é bem ruim
Também é uma pena que a comunidade pareça ter pouca disposição para melhorar isso
Diferente de desenhar com uma caneta, o shader calcula a posição de cada pixel e decide sua cor
Em vez de pensar em mover objetos, você precisa pensar em manipular o espaço
Vertex shaders parecem mais naturais porque produzem a posição dos triângulos
Na prática, eles cuidam da etapa final do pipeline de renderização, como amostragem de textura e cálculo de iluminação
Em PBR ou renderização diferida, a maior parte dos shaders é compartilhada, e só os efeitos especiais são customizados
Shading não é desenhar contornos, e sim representar materiais com base física
Pintura se aproxima mais de shading; desenho a caneta, não
Shaders servem para fazer o sombreamento (shading) de um retângulo
Para fins didáticos, às vezes se omite o vertex shader e se preenche a tela inteira com um fragment shader
Conceitos como formato de dados, ordem de transformações e a fronteira entre CPU e GPU são difíceis, e a documentação é insuficiente
O sistema de variáveis globais da GPU também é confuso
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan exige muito mais código boilerplate do que WebGL
A GPU usa uma arquitetura SIMT, então consistência no acesso aos dados é importante
As transformações são aplicadas sequencialmente dentro de cada thread, e a fronteira entre CPU e GPU pode ser cruzada várias vezes dependendo do orçamento de performance
Variáveis globais são um conceito de constantes enviadas igualmente para cada thread, como uniforms
Em CUDA, acesso global é possível com operações atômicas, mas com grande custo de performance
Um curso introdutório de WebGL seria um bom ponto de partida
Os diagramas, a barra de rolagem e o estilo estão excelentes
Shaders surgiram antes da GPU e também podem rodar na CPU
O ponto central da GPU é o modelo de execução SIMT/SIMD, e shaders são essencialmente o conceito de funções de callback
Acho que o fato de poderem ser escritos com o mesmo raciocínio sequencial da CPU é o que torna shaders simples e elegantes
que mostra muito bem o conceito de shader como uma função que expressa as coordenadas x e y de cada pixel