Como é um motor como o Frostbite nos estágios iniciais? [fechadas]

15

Estou me divertindo muito jogando Battlefield, e estou impressionado com a aparência e o som de tudo. Eu só estava me perguntando como um mecanismo de jogo começa a vida. Em que ponto do código ele finalmente faz alguma coisa, e o que fez antes de começar a renderizar perfeitamente todas as texturas, luz e partículas?

Existem bons artigos, online ou exemplos que alguém já viu?

Djave
fonte
11
não uma resposta direta, mas observando todos os 5 partes deste vídeo pode dar-lhe alguns insights sobre a tecnologia youtube.com/watch?v=EN549g0GNgc#t=9m22
Stowelly

Respostas:

25

Se você está falando do muito começando, e nota que muito poucas grandes motores de jogo são codificadas a partir do zero mais, e nota que este é um exemplo e não necessariamente como ele sempre funciona. . .

Renderização:

Comece renderizando um cubo plano-sombreado. Adicione efeitos básicos de iluminação a ele. Adicione uma maneira de mover a câmera. Agora você pode voar em torno de um cubo chato, suspenso em um vazio preto infinito. Yay.

Em seguida, você provavelmente deseja importar um modelo. No mínimo, seu artista pode criar um modelo de demonstração (um bule de chá é surpreendentemente tradicional), mas eles podem ter um modelo de jogo real que podem lhe entregar. Mais uma vez, estamos usando um sombreamento plano por enquanto, para que apareça como se fosse feito. . . bem, nenhuma substância realista, mas uma espécie de cruzamento entre plástico fosco e porcelana. Isso , mas sem boa iluminação. E ainda estamos no ponto em que é completamente imóvel.

Os próximos três passos principais podem ser realizados em qualquer ordem.

  • Primeiro, você desejará terrenos. A maioria dos jogos modernos divide a renderização em "geometria estática" e "atores", onde a geometria estática inclui coisas que não mudam (paredes, chão, postes de iluminação) e os atores incluem coisas que mudam (jogadores, veículos, postes destrutíveis). O conceito básico de renderização é o mesmo para os dois; existem otimizações para geometria estática que você não pode fazer para os atores. Você precisará de terreno para que os engenheiros da jogabilidade realmente sigam em frente; portanto, se eles estão esperando por você, é hora de montar pelo menos a renderização básica do terreno.

  • Segundo, você desejará texturizar. Esse é um assunto enorme e é provável que você chegue a um marco, faça algo mais crítico e volte a ele repetidamente. Seu primeiro passe pode simplesmente adicionar texturas ao modelo. Sua segunda passagem pode adicionar melhor iluminação e comportamento da superfície. Seu terceiro passe pode adicionar sombras (eu poderia preencher uma resposta inteira falando sobre sombras). Dependendo do tipo de jogo que você está fazendo, isso pode ser arbitrariamente complicado. Em algum lugar aqui, você também pode mudar todo o mecanismo do jogo para renderização adiada.

  • Terceiro, você desejará animação. Seus animadores (supondo que você não esteja morando em 1995) configuraram plataformas de animação para seus modelos, consistindo em ossos percorrendo o modelo e informações sobre como os ossos se movem durante determinadas animações. Você provavelmente começará com a capacidade de reproduzir animações sob demanda e, em seguida, adicionará a capacidade de misturar animações.

Feito tudo isso, é hora de trabalhar na compatibilidade. Se você estiver trabalhando em um jogo AAA, poderá testar seu código em muitos tipos diferentes de hardware - talvez seja interno, talvez você contrate uma empresa de testes, qualquer que seja. Muito do seu código será quebrado em placas gráficas específicas ou em versões específicas de driver, e você poderá consertar o maior número possível.

Também é hora de considerar a otimização. A renderização é um grande problema de velocidade, então agora você precisa descobrir como explorar o hardware no nível mais profundo para executar o mais rápido possível. Se você acha que isso pode entrar em conflito com a "compatibilidade", você está certo! É totalmente! As melhores otimizações, você encontrará, simplesmente não funcionarão em alguns cartões. Você consegue equilibrar todos esses fatores.

Nesse ponto, seus artistas exigirão novas ferramentas de texturização ou novos recursos de animação, e seus projetistas de níveis desejarão novas técnicas de renderização de terreno. Volte para "os próximos três passos principais podem ser executados em qualquer ordem" e repita até o jogo terminar.

Jogabilidade:

Vou pular as partes que não são terrivelmente visíveis visualmente. Primeiro, é preciso esperar até a renderização do terreno, embora haja muitas coisas de back-end que você pode fazer até então.

Depois de conseguir isso, você configurará algumas colisões básicas. Isso provavelmente assumirá a forma de voar para um local no jogo e pressionar um botão que solte um cubo. O cubo cai e atinge o chão. Quando o cubo cair no chão de forma consistente, você poderá começar a configurar o movimento do jogador, para poder correr pelo mundo da mesma maneira que um jogador.

Depois que a física básica dos movimentos estiver funcionando, você estará em um desses segmentos "isso pode ser feito simultaneamente" novamente:

  • O combate precisa ser implementado. Você precisa de coisas que possam atirar nas coisas, e todas elas precisam se comportar adequadamente.

  • A física precisa ser implementada. Você tem colisões funcionando, mas as colisões são apenas um pequeno segmento da física. Quando alguém retira um jipe ​​de um tanque, tudo precisa se comportar aproximadamente como pretendido.

  • A mecânica do jogo precisa ser implementada. Como você sabe quando ganhou ou perdeu? Com que frequência as coisas aparecem e o que controla isso? Se os comunistas conquistam um ponto de desova, por que continuam gerando veículos anarquistas? Esse tipo de coisas.

Tudo isso pode levar, novamente, um tempo arbitrário, com base na quantidade de coisas que seus designers desejam que você faça. Você também passará muito tempo rastreando insetos ("ei, veja o que acontece quando eu dirijo um tanque na asa deste caça a jato"). Observe que boa parte disso acontecerá com um mundo não texturizado, ou com modelos circulando na posição de rig dos personagens , ou com tanques que são apenas grandes caixas com a palavra "TANK" desajeitadamente pintada com spray.

UI:

A interface do usuário pode realmente iniciar antes que o código de renderização principal seja inserido, pois a interface do usuário e a renderização no mundo do jogo tendem a usar caminhos de código totalmente diferentes. Em vez de começar com um cubo, você começará com uma caixa, depois adicionará texturas à caixa e, em seguida, adicionará texto à caixa.

Nesse ponto, sua vida é gasta tentando obter tempo suficiente para escrever widgets de uso geral, enquanto dedica tempo suficiente à interface do usuário para que os designers e desenvolvedores de mecânicas de jogos possam testar o jogo com uma vaga aparência de realismo. Em algum momento, seus artistas da interface do usuário terão uma aparência consistente da interface do usuário e, em seguida, você começará a trabalhar nos elementos finalizados da interface do usuário, testando esses elementos da interface do usuário em players reais para garantir que sejam compreensíveis e utilizáveis.

Posso falar mais sobre isso, conforme necessário, mas isso se transformará em uma megaresponse, se eu fizer, por enquanto, não vou :)

ZorbaTHut
fonte
4
Incrível .. obrigado pelo seu tempo e uma visão fascinante!
Djave
If the Communists conquer a spawn point, why does it keep spawning Anarchist vehicles?Trabalhando em um jogo sobre a Guerra Civil Espanhola?
Peter Taylor
11
Nada mal, mas sua postagem se aplica apenas a jogos básicos, não a AAA. Hoje em dia o técnico é apenas metade da batalha, as ferramentas são a outra. Basta olhar ao redor do UDK e você verá quantas funções diferentes são colocadas nele.
Peter Ølsted
11
Além disso, o conceito simples de texturas e shaders é muito mais duvidoso nos dias de hoje com o uso de difuso, especular, ambiental e emisivo (entre outros). Veja como os materiais são criados hoje em dia. udk.com/elements/img/galleries/features-shaders-hero.jpg
Peter Ølsted
11
Esta foi uma resposta impressionante.
jcora