Three.js: Haverá um renderizador baseado em WebGPU?

Criado em 9 mar. 2019  ·  20Comentários  ·  Fonte: mrdoob/three.js

Estou curioso para saber que Three.js tem um plano para oferecer suporte a WebGPU. É possível?

Question

Comentários muito úteis

Posso garantir que não vamos esquecer ... 😁

Todos 20 comentários

Teoricamente, em um futuro distante, mas como você deve saber, o grupo WebGPU ainda está ativamente falando / alinhando na formação de primeiras propostas / especificações / rascunhos. Levará anos até que tenhamos uma especificação completa e implementações padronizadas de trabalho.

Dito isso, eu recomendaria se envolver / seguir no desenvolvimento WebGPU aqui: https://github.com/gpuweb/gpuweb/wiki e https://www.w3.org/community/gpu/

Se WebGPU for tão poderoso quanto esperamos que seja, bibliotecas como Three.js provavelmente terão que ser reescritas do zero para tirar o máximo proveito disso.

@TimvanScherpenzeel
Sim eu concordo. Eu serei o futuro distante.
É impossível adicionar renderizador WebGPU em three.js sem reescrever o núcleo do zero? deveríamos ter que reescrever todo o motor (API) em três meses do zero? Acho que mesmo que o WebGPU seja lançado, é muito provável que coexistam (WebGL / WebGPU) por um tempo. Não acho que WebGPU mataria todo o ecossistema WebGL.
No entanto, presumo que o WebGPU seria muito poderoso se suportasse nativamente e diretamente ao contrário do WebGL que é API indireta de driver gráfico;E o Google e outros grandes jogadores querem isso para o melhor desempenho do DeepLearning e experiência gráfica de alto desempenho no navegador

O ThreeJS já tem muitos renderizadores diferentes - WebGLRenderer, WebGL2Renderer, CSS3DRenderer, SVGRenderer ... WebGPU pode ser tratado de forma semelhante, quando a API está pronta. Mudanças mais profundas na biblioteca também são possíveis com o tempo.

Encerrando este problema por enquanto, embora esteja animado para que essas APIs de próxima geração também estejam disponíveis. :)

@donmccurdy
De fato .. Three.js é tão flexível que pode implementar até mesmo WebGPU no futuro, certo?

De acordo com a proposta do WebGPU, citaram o Three.js deverlopers como um de seus principais públicos-alvo.

https://gpuweb.github.io/admin/cg-charter.html

Desenvolvedores de estrutura JavaScript que estão construindo bibliotecas de GPU, destinadas ao uso em conteúdo da Web, mas fornecendo uma API de nível superior e ocultando muitos dos gráficos de baixo nível e detalhes de computação de seus usuários. Por exemplo, three.js.

Minha pergunta é que eles usam outra linguagem de sombreador chamada WHLSL.
https://github.com/gpuweb/WHLSL

Minha pergunta é que eles usam outra linguagem de sombreador chamada WHLSL.

"Vamos cruzar essa ponte quando chegarmos a ele."

Foi anunciado no Google I / O com suporte experimental no Chrome Canary para OSX disponível agora:
https://www.youtube.com/watch?v=K2JzIUIHIhc

Babylon.js anunciou suporte total para ele quando for lançado. Confira aqui:
https://forum.babylonjs.com/t/webgpu-is-coming-to-babylon-js/3122

Espero que a equipe ThreeJS siga o exemplo.

Não sei por que fechar isso, pois foi mencionado o suporte potencial. Pela lógica, deixamos questões em aberto para "rastreá-lo". Se você fechá-lo, simplesmente esquece ... a menos que haja outro problema para rastreá-lo.

Posso garantir que não vamos esquecer ... 😁

Mas eu não sou um mantenedor. Pessoalmente, vou seguir o primeiro framework que adota o webgpu. E a questão não sou eu. É a mensagem que vocês dão para encerrar isso. É como "Coisa legal, com certeza, mas não me importo. Pode aguentar aí no limbo".

PS. Eu li errado, pensei que era "Posso garantir que você não vai esquecer"

@MichelDiz esta questão foi aberta para perguntar se planejamos oferecer suporte ao WebGPU. A pergunta foi respondida: nós absolutamente planejamos oferecer suporte ao WebGPU. Provavelmente é muito cedo para trabalhar nisso, mas novas questões serão abertas quando estivermos prontos para discutir isso.

@TimvanScherpenzeel certas partes que são abstraídas dos usuários terão que ser reescritas, mas sugerir que a coisa toda terá que ser "reescrita do zero" é um grande exagero. As geometrias do buffer terão o mesmo formato. Assim como o WebGL, o WebGPU também é baseado em shaders GLSL -> WHLSL. Parece que o formato glTF que se tornou o padrão WebGL também será o padrão WebGPU. Todas as APIs do Three.js mais usadas permanecerão 99% inalteradas enquanto o novo renderizador WebGPU estará sob o capô e, esperançosamente, trará grande aumento de desempenho e desbloqueará um potencial de renderização de grandes cenas em fps altos.

Olá a todos,
muito obrigado pelas atualizações sobre este!
Eu só queria compartilhar minha perspectiva sobre recursos como este. Em nosso caso, nem sempre usamos WebGL para aplicativos de consumidor. Temos experiências WebGL em que visualizamos conjuntos de dados muito grandes em que os ativos têm cerca de 1 GB e são servidos localmente em hardware fixo onde podemos controlar os navegadores e seus sinalizadores para habilitar o WebGPU. Portanto, mesmo em modo experimental, definitivamente adoraríamos ter suporte para isso. Eu entendo que somos a minoria, mas eu só queria adicionar essa visão na conversa.

@sinokgr Como o WebGPU ajuda a exibir ativos de 1 GB? Tanto quanto eu entendo, as estruturas de dados para dados de geometria são as mesmas do WebGL.

obrigado pela resposta @mrdoob . Para ser 100% honesto, não vou afirmar que entendo o suficiente as diferenças e as informações que encontro online são muito vagas (de acordo com minha pesquisa, pelo menos). A sensação principal que estou tendo é de coisas que li como a última mensagem de @DVLP que você gostou,

trará grande aumento de desempenho e desbloqueará um potencial de renderização de grandes cenas em fps alto.

isso me faz pensar que vamos ver pelo menos algumas melhorias. Isso pode ser, quão rápido, por exemplo, esses ativos vão carregar, talvez melhor fps? Não tenho certeza.

O carregamento inicial para a memória regular permanecerá o mesmo, mas toda a GPU API será mais rápida, portanto, a partir do momento em que a GPU está envolvida, deve ser mais rápido. Veja como vejo de onde virá o aumento de desempenho:

  1. Carregue o arquivo do modelo para o navegador - mesma velocidade
  2. Analisa o modelo e carrega a geometria em um buffer de matriz - mesma velocidade
  3. Carregue programas de GPU - mais rápido
  4. Carregar texturas - inicialmente com a mesma velocidade, mas mais rápido ao entregar para a GPU
  5. Transfira a geometria para a GPU - mais rápido
  6. Faça uma série de chamadas de desenho para renderizar um quadro - mais rápido

Muito obrigado pela explicação @DVLP . Os pontos 5 e 6 parecem muito interessantes para mim, pois temos milhares de objetos com muitos materiais.

Pode levar muito tempo até que o WebGPU seja amplamente adotado. Até então, você pode acelerar tudo usando instanciação de malha
https://threejs.org/docs/#api/en/objects/InstancedMesh

Infelizmente não podemos usar instanciação, todos os objetos são únicos @DVLP

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

fuzihaofzh picture fuzihaofzh  ·  3Comentários

boyravikumar picture boyravikumar  ·  3Comentários

Bandit picture Bandit  ·  3Comentários

makc picture makc  ·  3Comentários

filharvey picture filharvey  ·  3Comentários