Conectando simulações de física com diferentes sistemas de coordenadas


9

Eu quero que os objetos se movam entre duas simulações de física através de uma "janela" e colidam com os de ambas as simulações, caso cruzem o plano da janela.

Os sistemas de coordenadas das simulações não têm a mesma origem e podem ter uma orientação diferente. Não é necessário agrupar uma simulação em si, mas seria uma vantagem.

Como faço para conectar os sistemas com eficiência sem clonar os objetos individuais?

Editar:

Os cálculos devem ser o mais precisos possível, para que os objetos não fiquem presos se atravessarem a janela ao mesmo tempo de lados opostos.


A primeira pergunta seria: a simulação física é precisa na janela? Porque as mudanças de orientação tornam impossível uma varredura adequada. É como portais de mudança de escala - um mundo de dor possível. Segunda pergunta: orientação diferente, como em ângulos arbitrários ou pelo menos em 90 graus, apenas uma troca de eixo?
Kaj

Agora, isso parece um problema que eles tiveram que resolver no Portal. Se bem me lembro, eles mencionam esses problemas e como os resolveram em alguns comentários no jogo. Você provavelmente pode encontrá-los online em algum lugar.
Nailer

@Kaj Acho que seria melhor dividir o caminho de cálculo para transições arbitrárias e em ângulo reto. Dessa forma, os ângulos retos poderiam ter maior precisão e velocidade, enquanto outros ângulos também seriam possíveis.
Tamschi

@Nailer Se bem me lembro, eles criaram um novo ambiente físico enquanto o portal estava sendo aberto e depois clonaram todos os objetos físicos que se aproximaram dessa simulação adicional. Eles disseram que de alguma forma restringiram os objetos, mas é mais provável que eles estejam apenas transformando as forças e posicionando cada passo da física. <br> Tenho certeza de que eles criam um terceiro clone no destino por causa da maneira como o movimento do jogador é. simulado na fonte.
Tamschi 10/08/10

Respostas:


2

Existe um projeto interessante chamado Pseudoform, anteriormente conhecido como 'Portalized', que lida com simulações de física usando portais de maneira groovie:

Pseudofórmio

Confira!

Especialmente os vídeos - é incrivelmente legal.

É open source, então você pode ver como eles fazem isso.

Aposto que é isso que você quer. :)


2
Acabei de ler o código: A maneira como eles fazem isso é quase como a solução da Valve, mas sem o ambiente físico adicional. Os portais no mecanismo Portalizado criam uma duplicata de um objeto uma vez que toca a superfície do portal e exclui-o assim que sai do portal por um certo tempo. Esta resposta ainda é um pouco útil: A junta usada para restringir as duplicatas mostra como o objeto é transformado no portal.
Tamschi 10/08/10

0

Ok - não sei se isso funcionaria.
Com base nas informações acima, eu colocaria gatilhos nas 'janelas' para detectar quando um objeto está saindo do mundo. Pegue o vetor de velocidade atual no momento da colisão. Calcule o timestep deixado com base em onde ele atingiu o gatilho e onde terminou esse quadro (fora do mundo, seu mundo precisaria de uma borda virtual para permitir isso). Nesse ponto, você sabe a velocidade e o timestep restantes, para poder reposicioná-lo na fronteira do mundo em que está prestes a entrar e reprojetar a velocidade. No entanto, isso exigiria duas atualizações físicas em um quadro, e haveria a borda de um objeto indo de a para b enquanto outro vai de b para a na mesma posição - não haveria nenhuma colisão detectada.
Meio esboçado,


Essa parece ser a maneira mais rápida possível, mas há um problema se dois objetos atravessarem a janela do mesmo lado: se o primeiro objeto ficar preso no meio da borda, o segundo não colidirá até atingir a borda, também e apareça dentro do primeiro no destino.
Tamschi

Editado um pouco enquanto você digitou isso, e esse foi realmente o problema que eu adicionei: o \
Kaj

Eu tenho que aprender a ler. Minha adição foi outro caso de fronteira. Will ponderará.
Kaj

Não, a fronteira está fora do mundo. Portanto, o objeto um seria lançado no mundo 2 (a partir da borda do mundo 2 - não na posição da janela) com sua própria velocidade, como o objeto b. Eles colidiriam no mundo 2 na fronteira corretamente ... Eu penso: o? No entanto, meu próprio caso de fronteira ainda é válido.
Kaj

Parece que eu li mal a parte sobre a borda virtual. De qualquer forma, há outro problema se um objeto ficar preso. A parte na parte traseira da janela de destino ainda será renderizada na posição original, mas objetos que não tocam na borda não colidem com ela. Uma maneira de resolver esses problemas seria unificar as simulações, mas não tenho certeza de como isso pode ser feito com eficiência.
Tamschi

0

Li algumas informações sobre simulações de física e encontrei uma solução possível. Ele funciona dividindo cada etapa da física em três fases:

1. Pré-etapa:

Cada etapa da física, uma janela cria quatro transformações, duas para cada lado da conexão:

  • uma transformação de entrada que transforma a posição, a velocidade (e possivelmente o tamanho e o peso) de um objeto no sistema de coordenadas de destino e
  • uma transformação de saída que transforma forças de volta ao sistema original do objeto.

(As janelas estáticas precisam fazer isso apenas uma vez.)

Além disso, os objetos em cada sistema de coordenadas são divididos em três grupos:

Agrupamento de física http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Objetos em frente à janela (verde).
    Um objeto também é contado para esse grupo se ele estiver cruzando o plano da janela ou provavelmente atravessá-lo por trás da janela (não mostrado).

  2. Objetos que cruzam a janela ou provavelmente interceptam-na nesta etapa da física (laranja).

  3. Objetos atrás da janela (azul). Se um objeto voa em direção à parte traseira da janela, ele ainda é marcado como membro do grupo três.

O agrupamento pode ser simplificado se a janela estiver na borda da simulação.

2. Etapa principal:

A física é calculada principalmente como de costume, com algumas exceções:

  • Os objetos do segundo grupo nunca colidem com os do terceiro e vice-versa.

  • A transformação de entrada da janela é usada nos objetos do segundo grupo e os resultados são avaliados em relação aos objetos da frente e da interseção do sistema de destino. A força resultante é transformada usando a transformação de saída e aplicada ao objeto original.

(Se um objeto for atingido durante o cálculo, ele deverá ser reagrupado!)

3. Pós-etapa:

Se um objeto do segundo grupo atravessou a janela, ele é movido para o sistema de destino usando a transformação de entrada.

Pensamentos adicionais:

Se as transformações forem preservadas após o cálculo da física, elas poderão ser usadas para acelerar a renderização e facilitar os cálculos de IA. O agrupamento pode ser usado para remover os planos de clipes do processo de renderização.

A desvantagem desta solução é que as janelas precisam ser adicionadas diretamente ao mecanismo de física.

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.