Os novos programadores gráficos devem aprender o Vulkan em vez do OpenGL?

53

No wiki : "a API Vulkan foi inicialmente chamada de 'iniciativa OpenGL da próxima geração' da Khrono" e é "um esforço de reformulação inicial para unificar o OpenGL e o OpenGL ES em uma API comum que não será invertida" compatível com versões existentes do OpenGL ".

Então, os que estão agora entrando na programação gráfica devem ser mais bem servidos para aprender o Vulkan em vez do OpenGL? Parece que eles servirão ao mesmo propósito.

Galois
fonte
11
Se você pode fazer algo em uma API, pode fazê-lo em qualquer outra API, apenas a maneira de fazer isso dependerá da API.
A --- B

Respostas:

33

Dificilmente!

Isso parece muito com perguntar "Os novos programadores devem aprender C ++ em vez de C" ou "Os novos artistas devem aprender pintura digital em vez de pintura física".

Especialmente porque NÃO é compatível com versões anteriores, os programadores gráficos seriam tolos em excluir a API gráfica mais comum do setor, simplesmente porque há uma nova. Além disso, o OpenGL faz coisas diferentes de maneira diferente. É perfeitamente possível que uma empresa escolha o OpenGL em vez do Vulkan, especialmente no início do jogo, e essa empresa não estaria interessada em alguém que não conheça o OpenGL, independentemente de conhecer ou não o Vulkan.

A especialização raramente é uma habilidade comercializável.

Para aqueles que não precisam comercializar suas habilidades como tais, como desenvolvedores independentes, seria ainda mais tolo remover uma ferramenta de sua caixa de ferramentas. Um desenvolvedor independente depende ainda mais da flexibilidade e da capacidade de escolher o que funciona, e não o que está sendo financiado. A especialização em Vulkan limita apenas suas opções.

A especialização raramente é um paradigma eficiente.

mHurley
fonte
2
Boa resposta, lembrou-me deste: elise.com/quotes/heinlein_-_specialization_is_for_insects
Will
7
Essa analogia em C ++ é inadequada. Vulkan é uma nova API de próxima geração desenvolvida pelos criadores do OpenGL. C ++ é um concorrente estabelecido, principalmente compatível com versões anteriores para C.
Moby Disk
Essas especificidades são irrelevantes ao ponto da analogia.
MHurley
6
Alegar que a especialização é ineficiente ou não comercializável é incrivelmente ingênuo. Um tradutor que sabe todas as cinco palavras em cada idioma falado é inútil; as pessoas contratam tradutores que dominam (também conhecido como) um pequeno número de idiomas. Agora, a superespecialização é problemática. Um tradutor que domina completamente um idioma e só sabe que esse idioma também não é um tradutor útil. E os desenvolvedores (independentes ou não) precisam ter cuidado para não gastar todo o tempo aprendendo novas ferramentas. Eventualmente, eles precisam realmente fazer algo para vender, para que não se encontram à falência
8bittree
Só para esclarecer, não discordo necessariamente de você em relação ao OpenGL e ao Vulkan. Esse é um caso em que aprender os dois, em vez de apenas o Vulkan, é a melhor escolha.
precisa saber é o seguinte
40

Se você está começando agora e deseja trabalhar com a GPU (em vez de sempre usar um mecanismo de jogo como o Unity), você deve começar aprendendo o Vulkan. Talvez você deva aprender GL mais tarde também, mas há algumas razões para pensar primeiro no Vulkan.

  1. GL e GLES foram projetados há muitos anos, quando as GPUs funcionavam de maneira bastante diferente. (A diferença mais óbvia é chamar chamadas de sorte no modo imediato versus filas de comandos e lado a lado.) A GL o incentiva a pensar em um estilo no modo imediato e possui muitos itens herdados. O Vulkan oferece modelos de programação muito mais próximos de como as GPUs contemporâneas funcionam; portanto, se você aprender o Vulkan, terá uma melhor compreensão de como a tecnologia realmente funciona e do que é eficiente e do que é ineficiente. Eu vejo muitas pessoas que começaram com GL ou GLES e imediatamente adotam maus hábitos, como emitir chamadas de empate separadas por objeto, em vez de usar VBOs ou, pior ainda, usar listas de exibição. É difícil para os programadores da GL descobrir o que não é mais incentivado.

  2. É muito mais fácil mudar de Vulkan para GL ou GLES do que vice-versa. O Vulkan torna explícitas muitas coisas que estavam ocultas ou imprevisíveis no GL, como controle de simultaneidade, compartilhamento e estado de renderização. Isso aumenta a complexidade do driver para o aplicativo: mas, ao fazê-lo, dá controle ao aplicativo e simplifica a obtenção de desempenho e compatibilidade previsíveis entre diferentes fornecedores de GPU. Se você tem algum código que funciona no Vulkan, é muito fácil portar isso para o GL ou o GLES, e você acaba com algo que usa bons hábitos do GL / GLES. Se você possui um código que funcione no GL ou no GLES, você quase precisa começar novamente para fazê-lo funcionar com eficiência no Vulkan: especialmente se ele foi escrito em um estilo legado (consulte o ponto 1).

A princípio, fiquei preocupado com o fato de o Vulkan ser muito mais difícil de programar, e que, embora fosse bom para desenvolvedores experientes de empresas maiores, seria uma enorme barreira para indies e entusiastas. Fiz essa pergunta a alguns membros do Grupo de Trabalho e eles disseram que têm alguns dados de pessoas com quem conversaram e que já se mudaram para Vulkan. Essas pessoas variam de desenvolvedores da Epic trabalhando na integração UE4 a desenvolvedores de jogos amadores. A experiência deles foi que começar (ou seja, ter um triângulo na tela) envolvia aprender mais conceitos e ter um código mais elaborado, mas não era muito complexo, mesmo para os indies. Mas, depois de chegarem a esse estágio, eles acharam muito mais fácil criar um aplicativo real e entregável, porque (a) o comportamento é muito mais previsível entre implementações de diferentes fornecedores e (b) chegar a algo que teve um bom desempenho com todos os efeitos ativados não envolveu tanta tentativa e erro. Com essas experiências de desenvolvedores reais, eles me convenceram de que a programação contra o Vulkan é viável, mesmo para iniciantes em gráficos, e que a complexidade geral é menor quando você passa pelo tutorial e começa a criar demos ou aplicativos que você pode oferecer a outras pessoas.

Como outros já disseram: o GL está disponível em muitas plataformas, o WebGL é um bom mecanismo de entrega, há muitos softwares existentes que usam o GL e muitos empregadores contratam para essa habilidade. Isso acontecerá nos próximos anos, enquanto Vulkan aumenta e desenvolve um ecossistema. Por esses motivos, você seria tolo por descartar o aprendizado de GL inteiramente. Mesmo assim, você terá muito mais facilidade com isso e se tornará um programador GL melhor (e um programador de GPU em geral), se começar com algo que o ajude a entender a GPU, em vez de entender como eles funcionavam. 20 anos atras.

Claro, há uma opção a mais. Não sei se isso é relevante para você em particular, mas acho que devo dizer aos outros visitantes de qualquer maneira.

Para ser um desenvolvedor independente de jogos, um designer de jogos ou fazer experiências de realidade virtual, você não precisa aprender Vulkan ou GL. Muitas pessoas começam com um mecanismo de jogos (Unity ou UE4 são populares no momento). Usar um mecanismo como esse permitirá que você se concentre na experiência que deseja criar, em vez da tecnologia por trás dele. Ele ocultará as diferenças entre GL e Vulkan de você, e você não precisa se preocupar com o que é suportado em sua plataforma. Ele permitirá que você aprenda sobre coordenadas, transformações, iluminação e animação 3D sem precisar lidar com todos os detalhes de uma só vez. Alguns estúdios de jogos ou VR funcionam apenas em um mecanismo e não têm um especialista em GL em tempo integral. Mesmo em estúdios maiores que escrevem seus próprios mecanismos, as pessoas que fazem a programação gráfica são minoria,

Aprender sobre os detalhes de como interagir com uma GPU é certamente uma habilidade útil e que muitos empregadores valorizarão, mas você não deve sentir que precisa aprender isso para entrar na programação 3D; e mesmo se você souber, não será necessariamente algo que você usa todos os dias.

Dan Hulme
fonte
2
Eu discordo um pouco. O Vulkan (e o DX12) provaram ser muito difíceis de implementar, para desenvolvedores experientes . Com todo o poder que Vulkan lhe dá, é muito muito fácil dar um tiro no próprio pé. Além disso, o Vulkan requer muito mais código padrão. Para alguém que está aprendendo sobre programação de GPU, costumo pensar que o Vulkan será muito esmagador.
RichieSams
2
@ RichieSams Eu não acho que você quis dizer "implementar". Somente o fornecedor da GPU precisa implementar o Vulkan, e é muito mais fácil do que implementar o OpenGL. (Acredite, eu já fiz!) Mas, supondo que você quis dizer que é difícil integrar ou programar, adicionei um parágrafo com algumas informações que aprendi com o Vulkan WG.
Dan Hulme
Corrigir. Implementar é talvez uma má escolha de palavras. Eu quis dizer 'usar' no seu programa. Mas eu gosto das suas edições. Bem colocado
RichieSams
@ DanHulme - Estou surpreso com o seu comentário "GL incentiva você a pensar em um estilo de modo imediato". Eu pensei que isso era verdade apenas nas primeiras versões do OpenGL?
Página
11
@ToolmakerSteve O OpenGL WG trabalhou bastante para adicionar simultaneidade e gravações em lote, para que você possa expressar seu programa de uma maneira adequada para implementações lado a lado / adiadas. Mas ainda é uma base estabelecida na era do modo imediato, razão pela qual essas pessoas decidiram que era necessário um novo começo em Vulkan. E ainda vejo muitos novos usuários começando com o GL e formando um modelo mental de modo imediato de como as implementações funcionam.
Dan Hulme
26

Aprender programação gráfica é mais do que apenas aprender APIs. É sobre aprender como os gráficos funcionam. Transformações de vértice, modelos de iluminação, técnicas de sombra, mapeamento de textura, renderização adiada e assim por diante. Eles não têm absolutamente nada a ver com a API usada para implementá-los.

Portanto, a pergunta é a seguinte: você quer aprender como usar uma API? Ou você quer aprender gráficos ?

Para fazer coisas com gráficos acelerados por hardware, você precisa aprender como usar uma API para acessar esse hardware. Porém, quando você tiver a capacidade de interagir com o sistema, o aprendizado de gráficos deixa de se concentrar no que a API faz por você e, em vez disso, se concentra nos conceitos gráficos. Iluminação, sombras, mapeamento de relevo, etc.

Se seu objetivo é aprender conceitos gráficos, o tempo que você gasta com a API é o tempo que você não gasta aprendendo conceitos gráficos . Como compilar shaders não tem nada a ver com gráficos. Nem como enviar uniformes, como fazer upload de dados de vértices em buffers, etc. Essas são ferramentas e ferramentas importantes para a execução de gráficos.

Mas eles não são realmente conceitos gráficos. Eles são um meio para um fim.

É preciso muito trabalho e aprendizado com o Vulkan antes de você chegar ao ponto em que está pronto para começar a aprender conceitos gráficos. A passagem de dados para sombreadores requer gerenciamento explícito da memória e sincronização explícita do acesso. E assim por diante.

Por outro lado, chegar a esse ponto com o OpenGL requer menos trabalho. E sim, estou falando sobre o OpenGL moderno, com perfil básico baseado em shader.

Basta comparar o que é preciso para fazer algo tão simples quanto limpar a tela. No Vulkan, isso requer pelo menos alguma compreensão de um grande número de conceitos: buffers de comando, filas de dispositivos, objetos de memória, imagens e as várias construções WSI.

Em OpenGL ... é três funções: glClearColor, glCleare a chamada buffers de swap específico da plataforma. Se você estiver usando o OpenGL mais moderno, poderá reduzi-lo para dois: glClearBufferuive trocar buffers. Você não precisa saber o que é um buffer de quadros ou de onde vem sua imagem. Você o limpa e troca os buffers.

Como o OpenGL esconde muito de você, é preciso muito menos esforço para chegar ao ponto em que você está realmente aprendendo gráficos, em vez de aprender a interface do hardware gráfico.

Além disso, o OpenGL é uma API (relativamente) segura. Emitirá erros quando você faz algo errado, normalmente. Vulkan não é. Embora existam camadas de depuração que você pode usar para ajudar, a API principal do Vulkan não informará quase nada, a menos que haja uma falha de hardware. Se você fizer algo errado, poderá obter a renderização de lixo ou travar a GPU.

Juntamente com a complexidade do Vulkan, fica muito fácil acidentalmente fazer a coisa errada. Esquecer de definir uma textura para o layout correto pode funcionar em uma implementação, mas não em outra. Esquecer um ponto de sincronização pode funcionar algumas vezes, mas, de repente, falha por aparentemente sem motivo. E assim por diante.


Tudo isso dito, há mais na aprendizagem de gráficos do que na aprendizagem de técnicas gráficas. Há uma área em particular onde Vulkan vence.

Desempenho gráfico .

Ser um programador de gráficos 3D geralmente requer alguma idéia de como otimizar seu código. E é aqui que ocultar informações do OpenGL e fazer coisas pelas suas costas se torna um problema.

O modelo de memória OpenGL é síncrono. É permitido à implementação emitir comandos de forma assíncrona, desde que o usuário não consiga perceber a diferença. Portanto, se você renderizar para alguma imagem, tente ler a partir dela, a implementação deve emitir um evento de sincronização explícito entre essas duas tarefas.

Mas, para obter desempenho no OpenGL, você precisa saber que as implementações fazem isso, para que você possa evitá-lo . Você precisa saber onde a implementação está emitindo secretamente eventos de sincronização e, em seguida, reescrever seu código para evitá-los o máximo possível. Mas a própria API não torna isso óbvio; você deve ter adquirido esse conhecimento de algum lugar.

Com o Vulkan ... você é quem deve emitir esses eventos de sincronização. Portanto, você deve estar ciente do fato de que o hardware não executa comandos de forma síncrona. Você deve saber quando precisa emitir esses eventos e, portanto, deve estar ciente de que eles provavelmente tornarão seu programa lento. Então você faz tudo o que pode para evitá-los.

Uma API explícita como o Vulkan obriga a tomar esses tipos de decisões de desempenho. E, portanto, se você aprender a API Vulkan, já terá uma boa idéia sobre o que as coisas vão demorar e o que as coisas vão ser rápidas.

Se você precisar fazer algum trabalho de buffer de estrutura que o force a criar um novo passe de renderização ... é provável que isso seja mais lento do que se você pudesse ajustá-lo em um subpass separado de um passe de renderização. Isso não significa que você não pode fazer isso, mas a API avisa que isso pode causar um problema de desempenho.

No OpenGL, a API basicamente convida você a alterar seus anexos de buffer de quadros, quer ou não. Não há orientação sobre quais mudanças serão rápidas ou lentas.

Portanto, nesse caso, aprender o Vulkan pode ajudá-lo a aprender melhor sobre como tornar os gráficos mais rápidos. E certamente ajudará a reduzir a sobrecarga da CPU.

Ainda levará muito mais tempo para você chegar ao ponto em que pode aprender técnicas de renderização gráfica.

Nicol Bolas
fonte
11
Fico feliz que você tenha postado isso, porque deixa muito claras algumas idéias que eu hesitava em expressar em minha resposta: que aprender os conceitos é mais importante. Acho que a diferença é que você incentiva o GL porque é mais fácil começar, enquanto acho que a facilidade de começar traz o risco de fazer as coisas de maneira legada. É muito difícil saber no GL qual é o "idioma moderno do GL", comparado com a programação no estilo legado. Se ninguém lhe disser para usar VAOs em vez de uma chamada de empate separada por primitiva, é muito mais difícil desaprender esse erro mais tarde.
Dan Hulme
11
@ DanHulme: É tudo uma questão de usar os materiais de aprendizagem certos. Existem muitos materiais on-line que usam expressões modernas. Ninguém deve tentar aprender gráficos apenas lendo um manual ou especificação de referência.
Nicol Bolas
Você faz parecer realmente fácil! Mesmo assim, ainda vejo programadores iniciando em gráficos - alguns deles muito competentes em outros campos - e usando recursos herdados e aprendendo nada sobre as características de desempenho. É realmente difícil entender errado no Vulkan, porque faz com que as coisas caras pareçam caras. De qualquer forma, não precisamos discutir. Eu concordo com o seu ponto principal: aprender os conceitos é mais importante, e você pode fazer isso sem o Vulkan ou o GL.
Dan Hulme
@ DanHulme: " É realmente difícil entender errado no Vulkan " Porque você está muito ocupado tentando entender tudo errado;) Além disso, ainda é muito fácil entender errado o desempenho no Vulkan. Sinchonização desnecessária. Usando apenas o layout de imagem "geral". Não aproveitando subpasses. Trocas freqüentes de pipeline. E assim por diante. Sem mencionar, diferentes fornecedores nem sequer concordam com a melhor forma de usar o Vulkan.
Nicol Bolas
2
@ DanHulme: Quanto à facilidade de usar o OpenGL moderno, faço o possível para facilitar . Se as pessoas insistem em aprender com sites de lixo como o NeHe, ou lendo documentação aleatória, isso não é algo que alguém possa ajudar. Você pode levar os cavalos à água, mas não pode fazê-los beber.
Nicol Bolas
7

O principal apelo do OpenGL (pelo menos para mim) é que ele funciona em muitas plataformas. Atualmente, o Vulkan não funciona no OSX, e a Apple possui uma API concorrente chamada Metal. É muito possível que demore algum tempo até que a Apple suporte o Vulkan e, quando o fizerem, o suporte ao Vulkan poderá chegar apenas ao hardware mais recente. O OpenGL já suporta a maioria dos hardwares e continuará a fazê-lo.

Gavin Higham
fonte
Eu apostaria que, se o OSX oferecer suporte ao Vulkan, ele oferecerá suporte apenas a um pequeno subconjunto dele e que também se tornaria a API gráfica de próxima geração para navegadores da Web, o OpenGL ainda é muito mais fácil de usar (até certo ponto) do que Vulkan, o ganho de Vulkan na simplicidade render sobre gasoduto que perdê-lo na manipulação explícita de muitas outras coisas
GameDeveloper
11
O modo imediato do @DarioOO OpenGL é muito mais simples de usar do que o que você chama de modo que não é imediato, mas não é recomendado.
precisa saber é o seguinte
11
@ Gavin: Note-se que as versões OpenGL 4.2 ou superior também não são suportadas no OSX. Portanto, se você deseja usar algo recente do OpenGL no OSX, não pode. E é improvável que a Apple adote versões posteriores do OpenGL. A plataforma da Apple é all-in no Metal, então a plataforma cruzada é um fracasso de qualquer maneira.
Nicol Bolas
A Apple nunca oferecerá suporte ao Vulkan, a menos que seja forçado, e a economia disso seja bastante simples. Ao apostar no Metal, eles esperam atrair desenvolvedores de jogos para dispositivos móveis que precisam de mais do que o GLES2 pode oferecer, mas não têm recursos para escrever seus jogos para o Vulkan e o Metal. Eles estão preparados para sacrificar o minúsculo ecossistema de jogos do Mac por isso, especialmente se os desenvolvedores do iOS também forem lançados na Mac App Store.
Jonathan Baldwin
Agora, o Vulkan funciona no macOS (anteriormente OS X): moltengl.com
Alexander
4

Depende do que você quer fazer. Se você quiser aprender programação gráfica apenas para si mesmo, realmente não importa o que escolher.

Se você está pensando em um trabalho profissional, recomendo o Vulkan. É mais próximo do hardware e acho que o conhecimento sobre o que o hardware faz é importante para os programadores gráficos.

O Vulkan está mais próximo do hardware, porque o OpenGL faz muitas coisas ocultas que, no Vulkan, você faz manualmente, como executar a fila de comandos. O gerenciamento de memória também depende do aplicativo, não do driver. Você precisa se preocupar em alocar memória para uniforms(variável que você passa da CPU para a GPU), sobre o rastreamento. Você tem mais com o que se preocupar, mas também oferece mais liberdade no uso da memória. Pode parecer assustador e avassalador, mas na verdade não é. É apenas a próxima API que você precisa aprender.

Compreender essas coisas também ajudará a entender como a GPU funciona. O que permitirá que você faça alguma otimização no Vulkan e no OpenGL.

E mais uma coisa que vem à minha mente, se você está começando a aprender programação gráfica, provavelmente quando procura um emprego, pois o Vulkan será mais popular (talvez mais popular que o OpenGL). Além disso, até onde eu sei, a maioria das empresas que estão usando algumas APIs de gravação gráfica possui suas próprias funções, então há uma chance de que, no trabalho, você não esteja escrevendo no OpenGL nem no Vulkan, mas o conhecimento sobre a GPU sempre será útil.

Derag
fonte
2

Estou "entrando" na programação gráfica há alguns meses.

No momento, ainda estou no ensino médio e posso dizer que quase sempre estou procurando desenvolver aplicativos de plataforma cruzada. Na verdade, esse é o meu problema número um com o Vulkan - ele não foi desenvolvido para funcionar em todas as plataformas. Trabalho com OpenGL em Java e trabalho há mais de 6 meses.

Outro problema que tenho é com as afirmações de Vulkan: como afirma ser melhor. Embora o OpenGL certamente não esteja atualizando seu site com muita frequência. Eles continuam lançando atualizações constantemente e estou sempre ansioso por novas atualizações que sejam mais rápidas ou que funcionem melhor com o novo hardware.

Dito isto, enquanto trabalho principalmente com o OpenGL, entendo os princípios básicos do DirectX e do Vulkan. Embora eu não trabalhe com eles extensivamente, especialmente o Vulkan, pois é muito difícil de aprender e não está tão bem estruturado para programação quanto o OpenGl e o DirectX.

Por fim, gostaria de acrescentar que a especialização em um único campo, como eu principalmente uso Java e OpenGL, não é surpreendentemente autônoma e comercializável. Se eu quisesse conseguir um emprego em uma empresa que produzia jogos, o OpenGL seria usado, na maioria das vezes, apenas para criar jogos para o desenvolvimento do Linux e Android e, possivelmente, do OSX. DirectX para Windows e Consoles <O Vulkan pode substituir em alguns casos.

Não posso esperar por atualizações do OpenGL para sempre e não vou. Mas é minha preferência pelo desenvolvimento.

Winter Roberts
fonte
Outro problema que tenho é com as afirmações de Vulkan: como afirma ser melhor. ” Vulkan não afirma ser nada. É apenas uma API; não pode fazer reivindicações.
Nicol Bolas
Você percebe que Vulkan e GL são feitos principalmente pelas mesmas pessoas?
Dan Hulme
Sim eu quero. Eu ainda prefiro GL
Winter Roberts
2

Gostaria de dar a você a minha perspectiva gráfica para iniciantes sobre o assunto. O que eu percebi (em muitos anos trabalhando como engenheiro em outro campo) é que os conceitos fundamentais são a parte mais importante. Depois de ter um entendimento sólido deles, aprender a última nova API brilhante é a parte menos difícil. Não sei se você é um jovem hobbiest tentando programar o novo Skyrim ou se está procurando um emprego na área de computação gráfica.

Eu digo a você o que eu acho que é a melhor abordagem na minha opinião para aprender computação gráfica "como um profissional".

  1. Aprenda álgebra linear e geometria como um profissional. Sem isso, esqueça qualquer API ou gráficos sofisticados
  2. Compre um bom livro sobre computação gráfica (por exemplo, Fundamentos da computação gráfica )
  3. Enquanto você estuda o livro, configure um ambiente de programação com algo que permita desenhar uma imagem e implementar os algoritmos! Pode ser Java 2D ou C ++ e SDL ou mesmo Python e Pygame para o que importa. Nesta fase, você precisa colocar suas engrenagens texturizadas giratórias com várias visualizações da câmera em funcionamento antes de tentar obter 10000 FPS
  4. Agora assuma OpenGL, Vulkan ou DirectX e repita seu exemplo sofisticado (veja acima).

Começar a se preocupar com o desempenho antes de entender como desenhar uma linha é como se preocupar com a aerodinâmica do seu carro antes de obter a carteira de motorista.

ingframin
fonte
0

Sou autodidata em C ++ sem nenhuma educação formal e, nos últimos 15 anos, aprendi o OpenGL 1.0 até o Modern OpenGL e o DirectX 9c, 10 e 11. Eu não entrei no DirectX 12 e tenho vontade de tente minha mão em Vulkan. Concluí apenas alguns tutoriais básicos para desenhar um triângulo simples ou um cubo giratório simples com o Vulkan. Assim como no DirectX 11 e no OpenGL 3.3+, eu escrevi Motores de Jogo 3D totalmente funcionais e até os usei para criar jogos simples.

Eu diria que depende do ambiente geral da pessoa que está aprendendo. Se você está apenas começando a programação de gráficos 3D, eu diria que os iniciantes pularão para o OpenGL ou DirectX 11, já que existem muitos tutoriais, recursos, exemplos e aplicativos já em funcionamento. Aprender gráficos 3D não é de forma alguma um assunto fácil.

Se nos afastarmos do aspecto de programação e focarmos apenas na noção de que tipo de técnicas são usadas, envolvendo os diferentes níveis de matemática, levando a conjuntos de dados, estruturas e algoritmos de dados; há muito que você precisa conhecer e entender primeiro antes de tentar criar um 3D Game Engine ou usar efetivamente um já existente.

Agora, se você já entende toda a matemática e a teoria subjacente e tem alguma experiência em programação, pode usar APIs, bibliotecas e aplicativos já existentes, como Unity ou Unreal Engine, e apenas escrever o código-fonte e os scripts necessários para fazer seu aplicativo funcionar .

Então, do meu próprio entendimento e da maneira que eu vejo, é isso se você deseja criar um jogo rápido apenas para construir um jogo; vá com obras de quadros já existentes que reduziriam muito o tempo de produção. Por outro lado, se você quiser entender o funcionamento interno de como os motores de jogo / mecanismos de física / mecanismos de animação e simuladores são projetados e deseja criar um você mesmo, é aqui que você tem a opção de escolher sua API, como DirectX, OpenGL ou Vulkan. Um dos fatores determinantes aqui também seria o seu conhecimento de programação existente. O que quero dizer com isso é que, se você não sabe nada sobre chamadas multi-threading, síncronas e assíncronas, cercas de memória, corridas de dados, semáforos e paralelismo (programação paralela),

Menciono isso porque se você não souber como gerenciar adequadamente sua memória, juntamente com seus threads e tempo de acesso; Vulkan vai morder sua bunda! Onde o OpenGL e o DirectX seguram sua mão o tempo todo, consumindo muito mais energia da CPU.

Agora, se o seu nível de conhecimento de programação é decente e você possui os seguintes conhecimentos matemáticos que envolvem todos os níveis de Álgebra, Geometria, Trigonometria, Álgebra Booleana, Probabilidade, Estatística, Vetor - Álgebra baseada em matriz, Cálculo I, II, .... Infinty (risos). Cálculo vetorial, álgebra linear, sistemas de equações lineares, geometria analítica com cálculo vetorial de cálculos multivariáveis, teoria dos números e conjuntos, conjuntos e estruturas de dados, análise computacional, projeto computacional e algorítmico. Então você pode entrar nos conceitos do que é necessário para criar um mecanismo de jogo real e isso é sem nenhuma Matemática Aplicada ou qualquer equação de Física que você precise. Depois de ter esse histórico e experiência de programação suficiente, especialmente gerenciamento de memória e aritmética de ponteiros, você poderá começar a criar seu Game Engine.

A questão aqui é que você precisa entender todos os aspectos necessários para criar um Game Engine para fazer a programação gráfica avançada. Se você está criando apenas gráficos 2D, a vida não é muito difícil, pois você pode fazer isso no Python sem nenhuma das APIs mencionadas acima! Mas se você quer ser sério e criar um Game Engine completo e robusto, com muitos conjuntos de recursos, a escolha aqui seria C ou C ++ e usar OpenGL, Direct X ou Vulkan. Qualquer um deles ficaria bem. Agora, se você está construindo o Engine a partir do zero e está procurando o mecanismo em execução "mais eficiente" com a menor quantidade de sobrecarga de recursos, convém escolher o Vulkan. Mas se você seguir esse caminho, pelo menos deve saber tudo o que eu mencionei acima e alguns!

Então, como você pode ver, o Vulkan não é realmente voltado para programadores iniciantes neste campo. É necessário ter amplo conhecimento de todos os matemáticos, paradigmas de programação, todos os diferentes tipos de conjuntos de dados e algoritmos, incluindo encadeamento, sincronização de memória e programação paralela. E mesmo assim, é apenas para fazer com que o aplicativo carregue um triângulo 2D simples na tela. O que pode ser feito em cerca de 100 linhas de código no OpenGL ou 250 linhas de código no DirectX requer quase 1.000 linhas de código no Vulkan!

O Vulkan deixa tudo para você, pois você é responsável por todos os aspectos de como você está usando o Vulkan em seu aplicativo. Não há mãos dadas, não atrapalha, permite que você atinja seu próprio pé ou se enforque e compre um laço recursivo!

Agora, isso não quer dizer que os iniciantes ou aqueles que são novos nesse campo não aprendam o Vulkan, mas o que eu sugeriria é o seguinte: primeiro Aprenda o suficiente sobre o OpenGL e o DirectX para se molhar e ver como O aplicativo básico é estruturado apenas para renderizar um triângulo simples ou um cubo giratório. Familiarize-se com suas APIs e com seus padrões recorrentes de suas estruturas. Enquanto aprende que você pode aprender o Vulkan ao lado em paralelo, desta maneira, você pode ver como cada um dos três está realizando a mesma tarefa, mas sabe como eles o fazem de maneira diferente. Também é possível comparar os resultados entre as diferentes APIs e aí você pode escolher qual é o preferido para você. Esse método também forneceria outra ferramenta em sua caixa de ferramentas, e você poderia até escrever seu aplicativo para dar suporte aos três e ter o "

No final, cabe a essa pessoa escolher qual rota deseja seguir, e a partir daí seu sucesso será determinado por sua dedicação, estudo constante, trabalho duro, tentativa e erro e, o mais importante, suas falhas. Se você não falhar, não terá sucesso! Você só será bem-sucedido se falhar, encontrar seus erros, corrigi-los, seguir em frente, voltar e fazer tudo de novo!

Francis Cugler
fonte
-1

Você deve aprender o OpenGL primeiro, pois esse é o padrão para gráficos em várias plataformas.

Mesmo se houver uma biblioteca mais nova, entender o básico e trabalhar com uma linguagem usada em todo o setor é muito importante ... Especialmente porque o Vulkan não será usado nas grandes empresas por um tempo desde então.

  1. Ninguém quer se adaptar imediatamente e acabar se atrapalhando com um Framework / Biblioteca não estável.

  2. Eles precisariam contratar / treinar seus atuais programadores Open-GL, e não há necessidade.


Além disso, ouvi dizer que o OpenGL e o Vulkan não são exatamente iguais. Ouvi dizer que o Vulkan é uma API de nível inferior e mais próxima do código da máquina que o OpenGL.

Esta resposta que acabei de encontrar parece ter muitas informações excelentes

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


Outra coisa a considerar é o problema que aconteceu com o OpenGL 1.

O OpenGL 1 para o OpenGL 2 teve alterações MAJOR, e como muitas pessoas estavam usando o OpenGL1, e o hardware o suporta, há uma compatibilidade com versões anteriores pesada a ser implementada em alguns aplicativos / mecanismos, e às vezes é realmente doloroso para os desenvolvedores continuarem a suportá-lo. .

Além do suporte, o idioma mudou tanto, que você teve que aprender coisas novas.

Isso aconteceu com estruturas como JavaFX (de 1.x a 2.x) e Play! Framework (também 1.x a 2.x). Alterações completas na estrutura, o que significa que precisamos reaprender ... tudo ...


Então, essencialmente, o que você deve fazer é esperar até que o Vulkan esteja estável. Isso significa esperar até provavelmente o patch 2.0. TI não significa que você não pode aprender sobre o básico do Vulkan, mas saiba que isso pode mudar. Eu diria que um grupo como o Kronos forneceria uma API muito estável desde o início, especialmente porque existem vários engenheiros da Nvidia e da AMD trabalhando no Vulkan, incluindo uma pessoa da Nvidia que supervisiona o projeto aparentemente, bem como a base de Mantle; no entanto, como qualquer software, nós, os codificadores, veremos o quão bem ele funciona desde o início, mas muitos são cautelosos e esperam para ver o que acontece.

XaolingBao
fonte
Vulkan está estável no momento. Sua analogia GL 1.0 vs 2.0 é adequada. Começar com o GL agora seria como começar a aprender o GL 1.0 seis meses após o lançamento do GL 2.0.
Dan Hulme
11
O Vulkan pode ser "estável", não significa que as coisas não vão mudar. Essa é a natureza dos idiomas, que apresentei duas alterações recentes nos idiomas nos últimos anos, então como sabemos que isso não aconteceria com o Vulkan? Você está basicamente dizendo que aprender OpenGL é um desperdício, e isso é falso. Fazer parecer que o OpenGL está morto e não será mais usado ... Também falso. Além disso, não sou o único que acredita que Vulkan pode ter problemas de estabilidade. Pode não ser, mas com qualquer novo idioma, é o que você procura.
XaolingBao
11
É claro que as coisas vão mudar, e o grupo de trabalho já está trabalhando em novos recursos para uma próxima versão de especificação (ssh, você não ouviu isso de mim). Estável significa que essas coisas serão adicionadas às especificações e as coisas que você aprender hoje ainda serão válidas daqui a dois anos. OTOH, as coisas que você aprende sobre a GL hoje já são péssimas para o funcionamento das GPUs: assim como aprender sobre pipelines de função fixa em um mundo de shader programável. Se você ler minha resposta, verá que não acho que aprender GL agora seja um desperdício. Mas "Vulkan é novo demais" não é um bom motivo para descartá-lo.
Dan Hulme
11
@Lasagna: " É que está sujeito a alterações, poucas empresas se adaptarão ao uso imediato " Valve. Épico. Unidade. Todos eles são fortemente investidos em fazer seus motores funcionarem no Vulkan. CryTech e Id também não estão ignorando exatamente. Portanto, sua afirmação não é proporcional aos fatos.
Nicol Bolas
2
@Lasagna: " Só porque está sendo adaptado aos motores 3D, não significa que as empresas estão investindo seus projetos nele " ... Então, os motores 3D não se qualificam como "projetos"? O DOTA2 conta como um "projeto"? Porque ele tem suporte para o Vulkan no momento . A linha de smartphones e tablets da Samsung conta como um "projeto"? Porque eles estão tentando incorporá-lo à interface do usuário. A realidade é que muitas pessoas estão dispostas a "ser a única a testar uma nova plataforma", se essa plataforma obtiver o que eles precisam.
Nicol Bolas