Função Fixa vs Shaders: Qual para iniciantes?

16

Atualmente, estou indo para a faculdade de ciência da computação. Embora eu pretenda utilizar um mecanismo existente em algum momento para criar um jogo pequeno, meu objetivo agora é aprender os fundamentos: a programação em 3D. Eu já fiz algumas pesquisas sobre a escolha entre DirectX e OpenGL, e o sentimento geral resultante disso foi que, se você escolhe o OpenGL ou o DirectX como sua plataforma de rodinhas, muito do conhecimento é transferível para outra plataforma . Portanto, como o OpenGL é suportado por mais sistemas (provavelmente uma razão boba para escolher o que aprender), decidi que vou aprender o OpenGL primeiro.

Depois que tomei a decisão de aprender o OpenGL, fiz mais algumas pesquisas e descobri sobre uma dicotomia que de alguma forma eu desconhecia todo esse tempo: OpenGL de função fixa versus OpenGL moderno baseado em shader programável. No começo, eu pensei que era uma escolha óbvia que eu deveria optar por aprender OpenGL baseado em shader, já que é o que é mais comumente usado no setor hoje. No entanto, deparei-me com a muito popular Programação de Gráficos 3D Modernos de Aprendizagem, de Jason L. McKesson, localizada aqui: http://www.arcsynthesis.org/gltut/

Eu li os bits introdutórios e, na seção "Sobre este livro", o autor declara:

"Primeiro, muito do que é aprendido com essa abordagem deve ser inevitavelmente abandonado quando o usuário encontra um problema gráfico que deve ser resolvido com a capacidade de programação. A capacidade de programação limpa quase todo o pipeline de funções fixas, para que o conhecimento não seja transferido facilmente".

ao mesmo tempo, também afirma que a funcionalidade fixa fornece uma curva de aprendizado mais fácil e imediata para iniciantes, afirmando:

"Geralmente é considerado mais fácil ensinar programadores de gráficos de neófitos usando o pipeline de função fixa".

Naturalmente, você pode ver por que eu posso estar em conflito sobre qual paradigma aprender: Passo muito tempo aprendendo (e depois desaprendendo) as formas de funcionalidade fixa, ou escolho começar com shaders? Minha principal preocupação é que os shaders programáveis ​​modernos de alguma forma exijam que o programador já entenda o pipeline de função fixa, mas duvido que seja esse o caso.

TL; DR = Como aspirante a programador de gráficos de jogos, é do meu interesse aprender programação em 3D por meio de funcionalidade fixa ou moderna programação baseada em shader?

Rob Hays
fonte
Há algumas perguntas semelhantes a este, bem ...
notlesh
"mas ao mesmo tempo também defende que a funcionalidade fixa fornece uma curva de aprendizado mais fácil e imediata para iniciantes, afirmando:" Estou curioso. Como exatamente isso acontece? Porque a citação diz claramente: "Geralmente é considerado o mais fácil ..." (ênfase adicionada). Como em, pode ser considerado verdade, mas isso não significa que é verdade.
Nicol Bolas
Sim, essa foi uma maneira estranha de escrever isso.
Rob Hays
O pipeline de função fixa foi preterido no OpenGL e no DirectX, para que eu não perca seu tempo com ele. Os shaders básicos são bem diretos e certamente não são mais complicados do que entender o suficiente para que um contexto de renderização funcione.
precisa saber é o seguinte

Respostas:

30

Não acredito no argumento de que é mais fácil começar com as coisas de função fixa. Pode ser que a função fixa permita que você faça certas coisas com menos código - no OpenGL de função fixa, por exemplo, você pode obter alguma iluminação / sombreamento básico fazendoglEnable(GL_LIGHTING) e algumas outras chamadas. O problema é que, assim que você deseja algo um pouco diferente - iluminação por pixel, digamos, em vez de iluminação por vértice - você precisa abandonar completamente o material de função fixa e escrever um sombreador para implementar a funcionalidade fixa que você estava usando antes, mais o que você queria mudar.

Parece que seria mais simples e menos confuso usar shaders o tempo todo. Os shaders precisam de um pouco mais de trabalho de configuração, pois você tem um arquivo de origem separado que precisa ser carregado e compilado, algumas chamadas C extras para procurar e definir parâmetros, etc. para codificar alguns efeitos diferentes, experimentar idéias diferentes, etc. E você não precisa se preocupar sobre onde estão os limites do sistema de função fixa e se ele pode ou não fazer o que deseja; os shaders podem fazer o que você pode escrever, modular os limites usuais de desempenho e memória.

Nathan Reed
fonte
Legal, obrigado pela resposta. Provavelmente acabarei indo bem para shaders.
Rob Hays
3
+1 - também é como "Learning C ++" vs "Learning BASIC". Levará mais tempo para você aprender C ++, mas você terá aprendido mais a longo prazo.
Jonathan Dickinson
3
Eu gostaria de recomendar o opengl-tutorial.org . O site explica bem o básico e usa apenas shaders.
Exilyth 16/07/12
3

Eu diria para começar com a função fixa no GLUT. Não vou dizer muito sobre isso, mas as idéias por trás dos shaders são bastante complicadas e o conhecimento necessário é a programação 3D básica (ou seja, matrizes de criação e transformação de vértices etc.). Existem muitos outros lugares onde você pode estragar usando shaders, e há muito mais para codificar.

Confira o meu tutorial , e esses lighthouse3d queridos

bobobobo
fonte
2

Eu vou direto para shaders. Não é realmente que muito mais difícil de configurar, e quando você passar esse primeiro obstáculo que você tem pleno poder ao seu alcance.

Mais exatamente, você descobrirá que a programação de sombreadores corresponde mais às equações matemáticas que você vê nas aulas de livros e gráficos na faculdade.

MGB
fonte
0

Eu sugeriria o uso do pipeline de função fixa como espinha dorsal do seu programa. Acho que é mais fácil mostrar algo usando-o em vez de shaders. Então, quando você sabe que não estragou seus vértices ou normais, você pode lenta mas seguramente avançar no mundo das sombras.

Oskar
fonte