Eu sou um iniciante aprendendo sobre animação por computador (para jogos). Até agora, o único método que encontrei é desenhar cada quadro, cada atualização de quadro. Portanto, no início de cada quadro, o quadro inteiro é apagado e, em seguida, as coisas necessárias para esse quadro são redesenhadas.
Minha pergunta é se esse método é ou não o único usado para criar animações e jogos. Parece que é um pouco ineficiente. Também não entendo bem como esse método funcionaria para jogos 3D . Alguém poderia explicar isso com mais detalhes?
Respostas:
Jogos muito antigos usavam uma técnica em que apenas as partes de um quadro são redesenhadas que mudavam nesse quadro. O que me lembro, o jogo "Little Big Adventure" usa essa técnica (1994). Mas você pode ver que o jogo tem na maioria das vezes uma câmera estática. somente quando você sai da área visível a cena é redesenhada. Se você jogar, também notará um pequeno atraso nesse quadro. Nas GPUs modernas com mecanismos de jogos modernos, as coisas mudaram. Tudo é redesenhado em cada quadro. Dependendo da técnica de renderização, as coisas podem até ser renderizadas várias vezes. O poder de computação de uma GPU é incrivelmente alto quando você a usa corretamente. Mas a reutilização está acontecendo. Por exemplo, um mecanismo pode decidir atualizar o mapa de sombra apenas a cada 5 quadros. Ou a iluminação não é atualizada desde que não haja alterações nas fontes de luz.
fonte
Não.
Pelo menos se você incluir jogos antigos dos anos 70 que usavam telas vetoriais.
Por exemplo, o conhecido jogo Asteroids, originalmente desenvolvido para exibições vetoriais, que é uma maneira fundamentalmente diferente de renderizar gráficos em uma tela.
https://en.wikipedia.org/wiki/Vector_monitor
Os gráficos modernos são praticamente 100% feitos para rasterização, que, por definição, grava o conteúdo de um buffer gráfico no monitor em cada quadro.
fonte
No nível mais baixo, o processador gráfico da sua máquina computará cada quadro do zero e o enviará para a tela. Você só será exposto a isso, no entanto, se você gerenciar esse material de baixo nível [1] Qualquer mecanismo gráfico (e com esse jogo), no entanto, manipulará essas coisas para você e você é livre para expressar a cena. em termos de muitas entidades que você pode modificar entre os quadros, mas será persistente.
Os elementos no espaço 3D são persistentes, e o mecanismo gráfico recompõe novamente a imagem na tela por quaisquer alterações que ocorrerem (movimento da câmera etc.)
[1] ... por exemplo, se você escrever seu próprio mecanismo [2] com algo como o OpenGL. Mesmo nesse caso, você provavelmente armazenaria coisas persistentes entre os quadros.
[2] O que não é uma opção no seu nível de habilidade atual.
fonte
Resposta curta: Não.
Longa história:
Quando aprendi alguma programação de jogos na escola, fomos ensinados a fazer o seguinte:
Decida qual taxa de fps queríamos no jogo (30 por exemplo).
Escreva um código que adicione 1 a um contador para cada intervalo (33 ms por 30 fps). Esse código é executado simultaneamente com o loop do jogo.
Em seguida, o loop do jogo que faz os cálculos para o jogo (atualização do estado do jogo) reduzirá o mesmo contador em 1 para cada quadro. Mas os cálculos gráficos e o desenho na tela só serão feitos se o contador estiver em zero.
O resultado é que a taxa de quadros gráficos será ajustada dependendo de quão bem a CPU lida com os cálculos no jogo. Quando não há muita coisa acontecendo no jogo, os cálculos são fáceis e a taxa de quadros dos gráficos será maior que a atualização real do estado do jogo (basicamente desperdiçando ciclos, já que desenhamos o mesmo estado do jogo mais de uma vez na tela).
Porém, muita coisa está acontecendo no jogo, a CPU terá mais trabalho a fazer e as atualizações de estado do jogo serão priorizadas sobre o desenho na tela.
Na maioria das vezes, o jogo continuará atualizando na taxa pretendida, mas parecerá "lento", pois você não verá cada atualização na tela. Isso pode ser preferível à desaceleração do jogo inteiro, porque você o força a desenhar cada atualização na tela.
Tudo isso foi feito com C ++ e sem mecanismo de jogo, nem placa gráfica. Tudo correu em um único núcleo da CPU. Utilizamos algumas bibliotecas para gráficos 2D.
fonte
Antes que se possa dizer se os videogames "desenham" a tela a cada quadro, é necessário primeiro definir o que se entende por "desenhar". Certamente existem muitos jogos de vídeo que nem todos desenham todos os quadros montando um bitmap do zero; Na verdade, muitas plataformas de jogos nunca mais montar bitmaps completos em tudo .
Existem algumas abordagens que os videogames podem adotar para gerar uma exibição. Um número muito pequeno faz com que a CPU ligue e desligue o feixe de elétrons ou para cada pixel ou, para jogos de varredura de vetor, defina a coordenada XY de cada ponto a ser plotado. A maioria dos jogos que fazem isso o faz em grande parte com o objetivo de demonstrar que a CPU é rápida o suficiente. Mais comumente, os jogos terão hardware que, na ausência de envolvimento da CPU, produziria algum padrão de pixels ou vetores para a tela repetidamente. Esse padrão pode ser produzido pela leitura sequencial de dados de uma região da memória e pela interpretação de cada bit ou grupo de bits como uma cor de pixel (isso é chamado de exibição de mapa de bits). Em alguns casos, o hardware pode ler um byte de memória para cada 8x8, 16x16, ou outra região de tamanho da tela e, em seguida, use esse byte para selecionar um intervalo de memória para leitura de dados de pixel (isso geralmente é chamado de exibição no mapa de caracteres). Algumas plataformas de hardware podem sobrepor várias exibições de bitmap com posições configuráveis. Estes são referidos como sprites.
Algumas plataformas não permitem que o padrão de exibição seja alterado enquanto está sendo enviado para a tela, mas exigem que todas as atualizações ocorram depois que a viga terminar de desenhar um quadro, mas antes de começar a desenhar no próximo. Nessas plataformas, tudo o que será exibido em um quadro precisa ser carregado no hardware da tela antes do início desse quadro, e a exibição será limitada a mostrar um padrão que pode ser configurado de uma só vez. Se a CPU parar de funcionar enquanto o quadro estiver sendo mostrado, esse mesmo quadro continuará sendo mostrado indefinidamente. Outras plataformas permitem que o padrão seja alterado ou reconfigurado enquanto está sendo desenhado na tela. Isso torna possível mostrar uma tela que é muito mais complicada do que o circuito de vídeo poderia suportar por si só.
A maioria dos jogos de computador pessoal usa hardware configurado para desenhar uma única tela de bitmap e depois desenhar nessa tela qualquer coisa que precise ser diferente do que já existe. Às vezes, pode ser mais fácil desenhar coisas sem levar em consideração se é realmente necessário em um caso específico, mas se o código puder dizer facilmente que não há razão para que parte da tela seja alterada, o desempenho poderá ser melhorado ignorando essa parte. As plataformas de hoje costumam ser rápidas o suficiente para desenhar a tela inteira várias vezes durante o curso de um quadro, mas historicamente esse não era o caso. O código mais rápido possível para escrever todos os pixels na tela de alta resolução do computador Apple II, por exemplo, levaria mais de dois quadros, e o código mais rápido possível para copiar todos os pixels no computador Apple II ' A tela de alta resolução de outro buffer levaria o dobro disso. Para obter um bom desempenho, é necessário que os jogos atualizem apenas as coisas que realmente estavam mudando, e é isso que os bons jogos geralmente fazem.
fonte
Para resumir, eu diria que nem todos os quadros são desenhados, mas apenas os necessários para apresentar sua história ou tema de jogo ou jogabilidade. Além disso, o momento das coisas que você gostaria que acontecesse em determinadas instâncias seria importante.
fonte