Como é feita a análise estrutural em jogos (por exemplo: construção de ponte, Dig ou Die e 3D)?

11

Pelo que entendi, um sistema típico de treliça interativa precisaria de cálculos substanciais, pois cada componente afeta todo o sistema. Acho que você pode parar arbitrariamente em um determinado número de iterações com custo de precisão na simulação, mas não sei se essa é a abordagem que esses jogos usam (jogos de construção de ponte são um exemplo de sistemas de treliça). Por outro lado, jogos como Dig ou Die têm um sistema estrutural bastante complexo que também leva em conta o torque (acredito) e a compressão e é muito rápido e funciona em sistemas muito extensos. Acho que os cálculos básicos podem ser semelhantes, mas, se não, estou interessado nas duas abordagens.

Vocês sabem como são feitas? Eles têm uma limitação arbitrária ou usam um algoritmo diferente? Além disso, acho que tudo o que vocês criarem pode ser aplicado a sistemas 3D, mas se não, ou se não for óbvio, pelo menos, dê uma pista de como você poderia usá-lo em 3D, pois estou interessado nisso tanto em 2D quanto em 3D. jogos

Sei que não devo agradecer aqui, mas acho injusto não agradecer pelo seu tempo de antecedência. Espero que este parágrafo não seja removido.

EDIT: Se eu fizesse um palpite, diria Dig ou Die armazena vetores para cada bloco e, em seguida, executa um algoritmo iterativo até um ponto em que a precisão extra na simulação não faz sentido para os limites do sistema (por exemplo, o sistema seria grande demais para não entrar em colapso, portanto, é limitado por um número semi-arbitrário (porque é baseado no aplicativo) de iterações. Mas eu posso estar errado.

Alan
fonte
Em resumo, sim, geralmente é iterativo, com um intervalo de tempo e uma contagem de iterações que podem ser ajustados para velocidade versus qualidade. Também é possível configurar uma matriz grande e satisfazer todas as restrições de uma só vez, mas isso pode ser muito mais desafiador e impraticável ou impossível em algumas situações.
27716 Alan Wolfe

Respostas:

5

Eu sou o desenvolvedor do Dig or Die, então posso dar um pouco mais de detalhes sobre a física do jogo

De fato, o ponto mais crucial foram as performances, já que no jogo você pode construir milhares de blocos físicos, e muito importante eu tenho outras coisas mais complexas para simular (chuva / água) para poupar muito pouco tempo de CPU para a física de construção .

Então, na verdade, eu fiz uma espécie de ... não sei, um algoritmo pessoal personalizado não muito preciso, mas funciona bem o suficiente para o jogo. Eu tenho 1 vetor para cada interseção de bloco (para que cada bloco seja vinculado por até 4 vetores, um de cada lado). Cada bloco tem um "peso" e "empurra" os vetores ao seu redor (igualmente) para que a magnitude total da magnitude dos vetores seja igual à sua altura. Quando um bloco é ancorado no chão, todas as forças / peso que são empurrados para ele nunca são "empurradas" para trás; portanto, naturalmente, com iterações suficientes, todo o sistema encontra um equilíbrio. O peso / força irá "fluir" para os pontos de ancoragem e gerenciará muito bem as mudanças na estrutura. Você pode ver o resultado aqui (com o item "Óculos de Eiffel" no jogo): insira a descrição da imagem aqui

Sobre os torques, eu o simulo multiplicando as forças que são transmitidas horizontalmente. Não é perfeito, mas é o suficiente para sentir a grande diferença entre construir na horizontal e na vertical

Mas sinceramente não gosto muito do meu sistema, para alguns casos não é muito preciso; principalmente porque eu não gerencio a compactação e extensão. Provavelmente existe uma maneira de fazer uma simulação mais precisa do que a minha sem mais CPU, mas minhas habilidades (e tempo) sobre isso eram muito limitadas, então fiz o que pude :-)

(PS: você acha que foram muito bons :-))

Gaddy
fonte
4

Pessoalmente, tive um bom sucesso com o relaxamento iterativo . Acho que segue muito bem as leis da física ao lidar com objetos feitos de agregados de blocos. Acredito que a série BridgeBuilder é baseada nesse método, embora não tenha nenhuma fonte para confirmar isso.

O relaxamento iterativo é amplamente utilizado para treliças , mas simulei com sucesso grandes objetos sólidos (concreto) com ele: é simplesmente uma treliça, cujas juntas transportam carga em vez de girar livremente.


O interessante é que o relaxamento é uma técnica para resolver treliças estáticas, por isso é precisa. Nesse sentido, é usado para calcular iterativamente um deslocamento que traz uma estrutura ao equilíbrio.

Mas o valor agregado de um jogo (onde estamos interessados ​​em ambientes dinâmicos, porque estruturas estáticas em equilíbrio são entediantes) é que temos a chance de realmente deslocar as juntas da estrutura entre cada iteração, com base nas restrições computadas até o momento . Você obtém dois grandes benefícios:

  • Você tem uma estrutura dinâmica, que responde corretamente a qualquer perturbação externa
  • Você tem uma estrutura que responde com precisão a perder membros de apoio (pense em desmontagem rápida e não planejada) deslocando sua tensão para outros membros. Na verdade, é bastante agradável ver o fluxo de estresse sendo movido à medida que as articulações se quebram em um evento em cadeia
  • Você tem uma simulação não linear! Mais explicações sobre o que quero dizer:
    Geralmente , a análise estática cria a hipótese de pequena deformação , onde a estrutura não se afasta muito do seu estado inicial. Dentro desses limites, a análise estática está correta porque as articulações não são realmente muito deslocadas . Mas, à medida que a estrutura se deforma com o peso desmoronado, você obtém resultados precisos até o fim com uma simulação não linear, enquanto você simplesmente obtém um estado inválido de um solucionador linear

O relaxamento iterativo é bastante simples de implementar, estabilidade numérica . Usei o esquema RK4 com êxito para obter estabilidade com grandes estruturas conretas. A desvantagem é que geralmente possui uma rigidez bastante pequena por motivos de desempenho, portanto pode parecer uma geléia suave às vezes.

MrBrushy
fonte