Eu sei que para shaders, os carros alegóricos devem ser usados porque são a melhor opção para desempenho. Os duplos são lentos e usam mais memória, o que não é ideal para shaders. Embora os flutuadores sejam menos precisos e propensos a flutuações excessivas, a troca de velocidade é ideal no hardware móvel.
Mas e em todos os outros lugares da base de código não relacionados ao pipeline do shader? Estou escrevendo um mecanismo e uso double para o tick delta de atualização e tento manter todas as unidades relativas a esse tipo de dados, para que haja muitos lugares usando double. Também devo usar flutuadores no celular no mecanismo?
O mecanismo está escrito na linguagem C ++
Respostas:
Você teria dificuldade em encontrar uma GPU móvel que pudesse usar o dobro, mesmo se você quisesse, para que parte da escolha seja feita para você.
Existem apenas alguns lugares onde você pode se beneficiar com a mudança de flutuadores de precisão única no seu jogo:
Esses seriam os dois exemplos mais comuns de coisas que você não deve tentar armazenar em um flutuador de precisão única, porque elas perdem uma precisão significativa no intervalo que você precisa cobrir (no primeiro segundo do jogo, você pode representar o tempo decorrido. tempo de segundos ou dezenas de nanossegundos, mas após 2,5 horas, você começa a perder a precisão de milissegundos)2−24
Mas isso não significa que você precise usar o dobro necessariamente. Tipos inteiros podem lidar com esses valores muito bem. (Um int de 32 bits pode fornecer precisão de milissegundos por 12 dias de reprodução contínua. Ints de 64 bits durarão milhões de anos)
Um valor de tempo delta geralmente será da ordem de 16 milissegundos, portanto, armazená-lo em um único flutuador de precisão fornece precisão de cerca de s, que ainda está no nível de nanossegundos - ie. provavelmente muito além da precisão com a qual você pode cronometrar seu código de forma confiável, sinalizar seus threads ou coordenar a atualização dos gráficos de qualquer maneira. Adicionando mais precisão aqui com um duplo é improvável que melhore seu jogo de qualquer maneira mensurável.2−29
Assim, você pode armazenar seu tempo total decorrido com alta precisão ou usando um tipo inteiro, calcular seu delta e converter em flutuação de precisão única uma vez por quadro, e usar flutuações felizes a partir daí.
Da mesma forma para posições. Mesmo em um mundo imenso, se você o dividir em pedaços de vários quilômetros de diâmetro ou menos, os flutuadores de precisão únicos podem localizar uma posição em relação ao seu pedaço pai com uma precisão de menos de um milímetro .
Deslocamentos relativos entre objetos (para cabeçalhos de computação e similares) geralmente são bons para armazenar em um flutuador, mesmo a distâncias imensas. Seu erro relativo, em comparação com o comprimento total do vetor, permanece em um intervalo controlado.
Portanto, não há muitas razões para usar o dobro como padrão. Eu consideraria que apenas se você tiver uma necessidade muito particular, onde você calculou a precisão dos carros alegóricos, isso não será suficiente e manterá o uso de dobros contidos apenas na parte do jogo que precisa ativamente.
fonte