FPS grande vs FPS consistente


8

Ao otimizar a taxa de quadros de um jogo, quando devo focar em um FPS grande e quando devo focar em uma taxa de quadros consistente.

Geralmente, esse é um problema muito disputado; portanto, não estou perguntando qual é o melhor.

Quais são os prós e os contras de cada um?
Em que situações uma prefere a outra?

Observe também: minhas taxas de pesquisa / processamento de entrada, física e atualização de jogos são independentes da minha taxa de quadros. A única coisa que o FPS afeta é a frequência com que uma tela é renderizada.

Respostas:


10

Isso é subjetivo, é claro, mas acho que a consistência é muito mais importante para o jogo do que a velocidade.

Basicamente, os jogadores suportam uma taxa de quadros mais lenta se o jogo for consistente, divertido de jogar e não estridente. No entanto, mesmo que o jogo seja totalmente empolgante, se der dor de cabeça às pessoas, porque explode e / ou elas não conseguem controlar as coisas, elas ficam irritadas e param de jogar.

Assim...

Concentre-se em FPS consistente em todo o design e desenvolvimento.

Concentre-se em um FPS mais rápido (mas ainda consistente) quando o jogo estiver quase pronto, e você terá tempo para melhorar o desempenho sem se preocupar com correções de bugs, etc.

Uma maneira de obter melhor desempenho é usar retornos de chamada / delegados / interrupções (dependendo do seu idioma / plataforma), em vez de pesquisa.


9
Outra observação rápida: programe a velocidade do objeto em "... por segundo", não em "... por quadro". Mesmo se você obtiver um FPS quase uniforme, haverá alguma variação, e mover um objeto "10 'por segundo" funcionará melhor que "0,1' por quadro" (assumindo 100FPS), porque os 10 '/ s estarão corretos mesmo se o tempo de quadro estiver um pouco desligado.
Olie

13

O que você deveria fazer:

  • Bloquear a lógica do jogo em uma taxa de quadros fixa
  • Renderize gráficos o mais rápido possível

Dessa forma, se a taxa de quadros cair, você não terá atraso de entrada (estou olhando para você, Just Cause 2), e se a taxa de quadros se tornar muito alta (pense nos jogos dos anos 90), o jogo não se tornará impossível de jogar.

Aqui está como eu faço:

s_PhysicsCurrent = GetTickCount();
float delta = (float)(s_PhysicsCurrent - s_PhysicsStart);
s_PhysicsStart = s_PhysicsCurrent;

s_PhysicsTime += delta;

while (s_PhysicsTime > ONEFRAME)
{
    // Update
    Game::Tick(ONEFRAME);

    // Clear input
    Keyboard::Clear();
    Mouse::Clear();

    s_PhysicsTime -= ONEFRAME;
}

s_Window->Clear();

Game::Render();

s_Window->Swap();

Você basicamente coleta uma "pilha" de quadros para fazer lógica e pode interpolar perfeitamente entre eles.


2

Parece que você tem pelo menos dois threads de execução, com sua renderização em seu próprio thread. Se for esse o caso, você realmente tem duas taxas de quadros para se preocupar. Você quer que os dois sejam o mais rápido possível. No entanto, isso também depende do tipo de jogo que você está construindo.

Você está construindo um jogo de tiro em primeira pessoa, onde pequenas quedas na taxa de quadros podem dar uma vantagem ao oponente? Nesse caso, certifique-se de que seu fps médio seja alto o suficiente, mas também se preocupe com os piores tempos de quadro. Você está construindo um jogo de tabuleiro? Nesse caso, o pico ocasional de tempo de quadro não prejudica a experiência do usuário.

Nos meus próprios jogos, meu processo geralmente é algo como isto:

  • Execute um criador de perfil no código
  • Veja a taxa de quadros média. Se estiver muito baixo, em média, aumente os fps médios otimizando as coisas lentas.
  • Quando o fps médio for alto o suficiente, procure os piores tempos de quadro (quadros em que você vê grandes picos no tempo computacional ou de renderização). Tente otimizar esses cenários de pior caso para melhorar o tempo de quadro do pior caso.

Se você estiver a 30 qps na maioria das vezes, mas atingir 200ms a cada 10 segundos, isso causará problemas. Mas se você tiver uma média de 15 qps, aumente seus qps médios primeiro.

Portanto, a resposta curta provavelmente seria: otimizar o que fizer a maior melhoria na experiência do usuário primeiro.


2

Bloquear seu FPS em um número consistente permite:

  • Mantenha uma aparência visual suave
  • Mantenha as animações em execução em tempo linear, objetos físicos caem a uma taxa consistente entre os quadros, etc.
  • No entanto, a parte mais útil do bloqueio do seu FPS é que, nos quadros em que você tem algum tempo de inatividade, pode realizar outro trabalho - coletar lixo, trabalhar na transmissão na próxima área do mapa, etc. algo grande e brilhante ou quando derrubar uma pilha de caixas.

+1: embora eu discorde da sua segunda bala. Um bloco em queda leva apenas 1 segundo para atravessar a tela, seja ele sorteado 6 ou 60 vezes.
deft_code

2
Correto, eu quis dizer que, como na caixa, não parece pular de uma posição para outra por causa do tempo variável entre os sorteios. Um movimento suave é preferido aos movimentos esporádicos causados ​​por uma etapa de tempo variável.
Sean James

1

Ambos. Eu diria que idealmente, consistentemente mais de 60 quadros por segundo. Realisticamente, consistentemente, mais de 30 quadros por segundo. Menos de 30 quadros por segundo e isso começa a afetar o desempenho do jogador (estou pensando em jogos baseados em FPS / twitch, a propósito, os jogos de estratégia provavelmente podem diminuir).

Se você realmente tivesse que dizer um ou outro, eu iria com consistência. Se você pode garantir uma taxa de quadros, pode se concentrar em mover a taxa de quadros garantida mais alto.


1

Maior é sempre melhor, mas:

Taxa de quadros inconsistente pode causar enjôo.

(Tivemos um testador interno vomitando quando sua taxa de quadros saltou entre 20 e 60 por 10 segundos.)


3
Tem certeza de que o testador não estava de ressaca?
Sam Harwell

0

Eu acho que você quer um FPS consistente e maior. Quanto mais suaves os gráficos (devido à taxa de atualização), melhor. Se começar a cair abaixo de 30FPS, seus usuários começarão a notar a agitação e ficarão frustrados com a falta de tempo de resposta às ações.


0

Se você quiser evitar rasgar , use o V-sync, que travará o FPS na taxa de atualização do monitor ou menor (se você for mais alto, não será visível, portanto seria um desperdício).


-4

Há apenas uma resposta, e isso é ... sempre vá alto durante o desenvolvimento e quando você descer o ponto mais baixo, isso levará o jogo a um fluxo constante e doentio. Estou sentado no código, e ele permanecerá lá, porque é a minha maneira secreta de codificar o dragão. / Eyhe


Por quê? Qual é o "pico mais baixo"?
Anko

3
-1 Esta não é uma resposta. É algum tipo de poesia vogon.
MichaelHouse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.