Como posso simular vidro quebrado?

10

Eu preciso fazer uma simulação com pedra jogada através de uma janela de vidro. Como posso conseguir isso?

Quero dizer, eu estava pensando em criar um modelo 3D de pedra e vidro no 3D Studio Max 2012, quebrar o vidro e exportar para o XNA 4.0 como modelos .x. Então, no XNA, faça a animação - escrevendo meu próprio mecanismo de física. É possível assim? É possível destruir o vidro no XNA após o impacto ou devo fazê-lo no 3DS Max? Por 'destruição do vidro', quero dizer desconectar alguns pedaços de vidro anteriormente quebrados um do outro, porque dependendo da velocidade inicial e do peso da pedra e da resistência (dureza?) Do vidro (todos definidos pelo usuário), os bits serão desconectados um ao outro de maneiras diferentes.

toomek308
fonte

Respostas:

5

A quebra de Voronoi é uma abordagem que cria uma quebra bastante realista para, por exemplo. vidro temperado que tem a capacidade notável de se fragmentar em pequenos fragmentos tipicamente convexos devido a alterações estruturais no vidro durante a fabricação. Além disso, como você possui um painel de vidro, precisará apenas da implementação 2D do Voronoi, não do 3D.

Engenheiro
fonte
3

Gerar automaticamente peças quebradas a partir de uma malha inicialmente inteira é bastante complicado, eu acho. Se você está apenas interessado em simular a dinâmica dos estilhaços enquanto eles voam pelo ar, colidem etc., eu começaria com uma malha pré-quebrada, usando restrições quebráveis ​​ou algo para manter as peças unidas até que sejam puxadas separados com força suficiente.

Nathan Reed
fonte
Olá Nathan (novamente), você trabalhou nessa tarefa depois de 2011? Você pode dar mais dicas? Thx
karlphillip
@karlphillip Eu trabalhei em uma demonstração usando o PhysX Destruction , embora eu pessoalmente fiz apenas renderizações, e não físicas no projeto. A tecnologia PhysX funciona gerando peças pré-quebradas em uma ferramenta DCC e trocando-as pela malha ininterrupta quando ocorrer dano.
Nathan Reed
3

Faça um painel não quebrado e um painel quebrado. Quando você tiver uma colisão, desative a versão sem quebra e comece a usar o painel quebrado.

Se você estiver jogando uma pedra (de tamanho um tanto consistente) em uma janela, poderá percorrer um longo caminho com o seu modelo 3D do painel quebrado (modele os fragmentos no lugar no painel e execute uma simulação física simples em cada os fragmentos para simulá-los caindo / voando). A menos que a câmera esteja muito próxima (ou em câmera lenta), você não precisará fazer colisões entre as peças - apenas com a geometria ao redor (plano do solo?). Não se esqueça de aplicar alguns efeitos de partículas na nuvem de partículas de vidro menores que acompanham o estilhaçamento.

Se você fizer o painel quebrado com a suposição de que a pedra está atingindo o centro, poderá escalar as peças com base na posição real da batida para obter uma quebra muito bonita para a maioria das batidas.

M Jellyfish
fonte
2

Se vocês baixar a Bullet Physics Library, ela possui uma amostra que inclui cacos de vidro e você precisaria de algo como bala em qualquer jogo com cacos de vidro.

Edit: Bullet seria uma ótima demonstração para modelar seu próprio motor depois.

Matt Jensen
fonte
1

Muito obrigado por suas respostas e ajuda inestimável. Eu finalmente consegui construir o projeto. Tentei todas as suas sugestões e, no final, escolhi parcialmente o meu próprio caminho para esta simulação.

Eu usei bulledsharp (wrapper de física de bala para c #) para o mecanismo de física, mas é importante usar o mais recente, compilado por você com a fonte bulletsharp do sourceforge svn, bem como as próprias fontes de física de bala novas. Não é aquele .dll pré-compilado, disponível para download em sites. A versão pré-compilada era muito antiga para mim e não incluía alguns recursos preciosos desenvolvidos ainda mais. O que também aprendi é que, para simulações simples em que você não precisa de gráficos avançados, é melhor usar o 3dsmax mais antigo, ou seja, 2011 (não o mais recente em 2012), para desenvolver o modelo etc. Principalmente porque há mais plugins e exportadores. Além do mais, é realmente útil verificar os tutoriais em todas as estruturas disponíveis (sharpdx, xna, xna4, slimdx, c ++ e outras).

Finalmente, minha abordagem foi construir a parede de vidro usando pedaços de cubo muito pequenos. Obviamente, para executar a simulação, você deve ter uma máquina realmente poderosa. Caso você tenha algo menos poderoso, use cubos maiores. É importante fazer todos os cubos criados com o estado insular adormecido. Agora, cada peça tem sua representação em dois arranjos dimensionais de carros alegóricos. O número indica qual é a força da conexão entre dois cubos. Quando a pedra é lançada e a colisão é detectada, a força está sendo calculada para cada cubo na parede (incluindo massa e velocidade da pedra, massa do cubo e tamanho e distância e distância do centro de colisão) e subtraída da matriz no círculo como padrão. Os cubos que após a subtração têm zero ou menos força de conexão são ativados. Isso faz com que os filhotes se movam.

É isso. Obrigado pela ajuda.

toomek308
fonte