Title: Modelagem F
1Modelagem Física
- Felipe Cavalcanti Ferreira (fcf3)
- Filipe César Andrade (fcsa)
2Índice
- Modelagem Física
- Propriedades físicas
- APIs
- Open Dynamics Engine ODE
- Havok
- Conclusão
3Modelagem Física
- Simulação física em ambientes virtuais
- Como os objetos se movem, interagem e reagem ao
ambiente em volta - Requer uma imensa quantidade de cálculos lógicos
e matemáticos
4Propriedades Físicas
- Materiais
- Fricção
- Dureza
- Leis de Newton
- Forças aplicadas e aceleração
- Ação e reação
- Detecção de colisão
- Juntas e molas
- Objetos complexos
5Propriedades Físicas
- Fluidos
- Sangue
- Movimento de rios e oceanos
- Sistemas de partículas
- Fumaça
- Explosões
6APIs Físicas
- APIs comerciais
- Physx
- Havok
- APIs não comerciais
- Open Dynamics Engine
- Newton Game Dynamics
- Tokamak
7Open Dynamics Engine
- Utilizado para simular o movimento de corpos
rígidos em ambientes virtuais dinâmicos - Possui um sistema integrado de detecção de
colisões - Independente da API gráfica
- Open-source
8Open Dynamics Engine
- Criado inicialmente por Russell Smith
- Escrito em C, mas prover uma interface em C
- Troca exatidão por velocidade
- Relativamente estável comparado com outros
simuladores
9Tipos básicos de ODE
- Mundo
- Gravidade e integração do tempo
- Espaço
- Otimização de colisões
- Corpo Rígido
- Objeto físico que sofre ações das leis da física
- Juntas
- Ligação entre dois corpos
- Geometria
- Forma dos corpos
10Mundo
- Contentor de corpos
- Gravidade
- Step(dt)
- Aproximação física entre mundos real e virtual
11Espaço
- Contentor de geometrias
- Geometria que contem outras geometrias
- Modos de colisão
- Entre geometrias dentro do mesmo espaço
- Entre geometrias de espaços diferentes
- Estrutura de dados
- Simples, hash table e quad tree
12Corpo Rígido
- Corpo indeformável, cujas posições relativas
permanecem fixas, independentemente de quais as
forças aplicadas.
13Corpo Rígido
- Propriedades constantes
- Massa
- Centro de massa
- Matriz de inércia
- Propriedades variáveis
- Posição vetorial (centro de massa)
- Velocidade linear
- Velocidade angular
- Orientação (matriz de rotação)
14Juntas
- Estabelece uma relação entre dois corpos de forma
a confinar a posição/orientação de um corpo
relativamente ao seu par - Vários tipos de juntas
- Possibilidade de adicionar novas junções
15Bola e Soquete (Ball and socket)
- Movimento em torno de números indefinidos de
eixos, com o mesmo centro em comum - Ex. Ombro e quadril
16Dobradiça-1 (Hinge-1)
- Só permite movimento para frente e para trás no
mesmo plano - Ex. Portas de armários, joelhos.
17Deslizante (Slider)
- Permite um objeto deslizar em relação ao outro
18Universal
- Movimento em qualquer direção
- Ex. Motor de transmissão de um carro
19Deslizante-2 (Hinge-2)
- Duas dobradiças ligadas em série, com diferentes
eixos de dobradiça. - Ex. Volante de um carro
20Geometrias
- Rigidez
- Propriedades geométricas
- Tamanho, forma, posição, orientação
- Não tem velocidade e nem massa
- Forma
- Esfera, caixa, plano, cilindro fechado, malha
triangular, e forma definida pelo usuário - Possibilidade de adicionar novas geometrias
21Geometrias
- Corpo com várias geometrias
- Formas mais complexas, mas mantendo a
simplicidade física - Exemplo
- Carro é uma caixa com várias geometrias que
descrevem o corpo - Corpo separado da geometria
- Objetos invisíveis são feitos pelo não ligamento
da geometria a um corpo - Objetos estáticos podem ser feitos criando a
geometria sem um corpo
22Geometrias
- Estáticas
- Representam objetos estáticos do ambiente (que
nunca se movem) - Dinâmicas
- Associadas a um corpo
- Posição/orientação iguais a posição/orientação do
corpo associado
23Detecção de Colisões
- Tratado antes de cada etapa da simulação
- Detecção de colisões
- Espaços
- Geometrias
- Processamento das colisões detectadas
- Pontos de contatos
24Junção de contato
- Evita a intersecção entre corpos no ponto de
contato - Tempo de vida de um timestep
- Construída em resposta à detecção de colisões
- Destruída após processamento da colisão
- Informação extra sobre o contato, como por
exemplo o atrito
25Junção de contato
26Criação de um objeto simples
27Aplicações de ODE
- Jogos, simulação de robôs, animação 3D, etc.
28Exemplo de aplicação
- Modelo simples de um bípede
- Perna esquerda fixa no chão
- Forças são aplicadas na perna direita
- Postura do modelo muda para manter o equilíbrio
29Vídeos de demonstração
30(No Transcript)
311- Empresa 2 - Produtos 3- Physics O que é? 4-
Uso 5- O que não é? 6- Funcionamento 7- Havok
Dynamics
32Empresa
- Empresa de software que provê software
interativos e serviços para desenvolvedores de
jogos e cinema - Fundada em 1998 por Hugh Reynolds e Dr. Steven
Collins do Dep. Ciência da Computação da Univ.
Trinity em Dublin. - Parceria com diversos fabricantes de jogos. Ex
Microsoft, Ubisoft, EA, Sony - Recentemente comprada pela Intel
33Produtos
- Havok Behavior
- Desenvolvimento do comportamento de objetos
baseando-se em eventos - Havok Physics
- Estado da arte da física
- Havok Animation
- Otimização de reprodução e composição em tempo
real - Havok Cloth
- Permite adicionar movimentos baseados na física
para cabelos, camisas - Havok Destruction
- Simulação de destruição de objetos rígidos.
34Physics O que é?
- Havok Physics é uma engine física(middleware).
- Desenvolvida para PCs e Consoles para permitir
interação entre objetos em tempo real. - Permite reduzir o tempo gasto com o
desenvolvimento do comportamento dos objetos
35Physics O que é?
-Havok is committed to providing not only the
premier physics software to our customers, but
also in giving them new tools, such as Havok
Behavior, that can substantially reduce the time
it takes teams to develop character behaviors,
allowing game programmers to focus on developing
the best game they can.. (Diretor Executivo
David O'Meara)
36Uso
- Jogos
37Uso
- Aplicações
38Uso
- Cinema
Alguns filmes que usaram Havok Tróia, Matrix,
Charlie and the Chocolate Factory, X-Men 3, Harry
Potter and the Order Of The Phoenix, 10,000 BC
39O que não é?
-Kit de construção de jogos -Tecnologia
Simples -Caixa preta -Renderizador Comercial
40Funcionamento
- Bibliotecas básicas
- Gerenciamento de memória
- Temporização
- Tipos básicos
-
- -Inicialização
- static hkResult HK_CALL init(
- hkMemory memoryManager,
- hkThreadMemory threadMemory,
- hkErrorReportFunction errorReportFunction
- void errorReportObject HK_NULL )
41Funcionamento
42Funcionamento
- 1- Preparar Simulação
- Particionar objetos em grupos de simulação
- Grupos mantidos pelo próprio framework
43Funcionamento
44Funcionamento
- 2 Aplicar Ações
- Controlar o estado dos objetos durante a
simulação - Métodos applyAction() chamados
- 3- Definir Restrições
- Processamento das restrições,
- como juntas de contato, dobradiças
45Funcionamento
- 4- Solucionador
- Garantir satisfação das restrições
- Minimizar possíveis erros
- 5- Integração
- Método hkpWorld integrate()
- Cálcular os novos estados de movimento
(velocidade, aceleração, posição) dos objetos
46Funcionamento
- 6- Detecção de colisão
- Dividida em 3 fases
- BroadPhase
- MidPhase
- NarrowPhase
- Objeto hkpShape determina forma para propósitos
da detecção de colisão
47Funcionamento
- 7- Simulação Contínua
- Soluciona eventos de impacto gerados na fase
anterior - Eventos de impacto podem gerar novos eventos
- Na simulação discreta, não é chamada
48Havok Dynamics
- Módulo central do sistema
- Cria mundo simulado
- Adiciona objetos
- Avançar no tempo
- Possui vários elementos
- Mundo, corpos rígidos, ações, restrições,
ouvintes
49Havok Dynamics
- Mundo(1/2)
- Simulações contém uma ou mais instâncias do
objeto hkpWorld. - Recipiente para todos os objetos da simulação,
chamados de entidades. - Necessita de um objeto do tipo hkpWorldCinfo,
contendo informações como - Gravidade
- Tolerância à colisões
- Parâmetros da simulação contínua (velocidade
máxima, tipo de simulação)
50Havok Dynamics
- Mundo(2/2)
- hkpWorldCinfo info
- info.m_simulationType hkpWorldCinfoSIMULATION_
TYPE_DISCRETE - info.m_gravity.set( 0,-9.8f,0)
- info.m_collisionTolerance 0.1f
- info.setBroadPhaseWorldSize( 150.0f )
- info.setupSolverInfo( hkpWorldCinfoSOLVER_TYPE_4
ITERS_MEDIUM ) - m_world new hkpWorld( info )
51Havok Dynamics
- Corpos Rígidos(1/4)
- Todos os objetos reais imutáveis
- Simulações só com corpos rígidos são rapidamente
criáveis - Adaptados para moverem-se realisticamente
- Pertence à classe hkpRigidBody, subclasse de
hkpEntity - Contém instância do objeto hkpRigidMotion com as
informações sobre como o corpo deve se mover.
52Havok Dynamics
- Corpos Rígidos(2/4)
- Precisa de um objeto do tipo hkpRigidBodyCinfo
que contém várias informações do corpo, como por
exemplo - hkpShape m_shape Forma do objeto utilizada para
fins de detecção de colisão - hkReal m_mass Massa do corpo rígido. Precisa
ser definido. - hkReal m_friction Define o atrito do corpo
rígido - hkVector4 m_position Posição inicial do objeto
ao ser adicionado ao mundo.
53Havok Dynamics
- Corpos Rígidos(3/4)
-
- hkArraylthkVector4gt dummyPlaneEquations
- hkpConvexVerticesShape pShape new
hkpConvexVerticesShape(stridedVerts,
dummyPlaneEquations) - hkpRigidBodyCinfo rigidBodyInfo
- rigidBodyInfo.m_shape pShape
- hkReal mass 10.0f
- hkpInertiaTensorComputersetShapeVolumeMassProper
ties(pShape, mass, rigidBodyInfo) - rigidBodyInfo.m_motionType hkpMotionMOTION_BOX
_INERTIA - rigidBodyInfo.m_qualityType HK_COLLIDABLE_QUALIT
Y_MOVING - hkpRigidBody pRigidBody new hkpRigidBody(rigidB
odyInfo)
54Havok Dynamics
- Corpos Rígidos(4/4)
- Exemplo de aplicação de forças
- if (m_brakePressed)
- hkVector4 zero
- zero.setZero4()
- m_body-gtsetLinearVelocity(zero)
- m_body-gtsetAngularVelocity(zero)
- setBrakePressed(false)
-
- Limitação de pontos na detecção de colisões
55Havok Dynamics
- Restrições(1/2)
- 6 graus de liberdade
- Limitação da liberdade de movimento
- Diferentes formas de limitar os movimentos levam
a várias aplicações - Porta
- Junção da roda de um carro
- Quanto maior a complexidade da restrição, maior o
tempo gasto com a computação da mesma
56Havok Dynamics
- Restrições(2/2)
- hkpBallAndSocketConstraintData bsData new
hkpBallAndSocketConstraintData() - hkpConstraintInstance bsInstance new
hkpConstraintInstance( bodyA, bodyB, bsData ) - m_world-gtaddConstraint( bsInstance )
- bsData-gtremoveReference()
- bsInstance-gtremoveReference()
57Havok Dynamics
- Ações(1/2)
- Forma simples e eficiente de controlar o
comportamento físico do mundo simulado - Anti-gravidade, controle de vôo de um
helicóptero - Implementam o método applyAction()
- A cada passo da simulação, método é chamado.
58Havok Dynamics
- Ações(2/2)
- Classes de tipos de ações já fornecidas
- hkpUnaryAction Aplicadas a um único corpo.
- Ex Motor de turbina
- hkpBinaryAction Aplicadas a um par de corpos.
- Ex Elástico unindo dois corpos
- hkpArrayAction Aplicadas a Vários corpos de uma
vez. - Ex Magneto
59Havok Dynamics
- Ouvintes
- Reagem apenas à eventos específicos da simulação
- Mais utilizados para responder a eventos
infrequentes - Chamada de retorno passa informações relevantes
sobre o evento - Podem ser extendidas para eventos de entidades
particulares ou do mundo inteiro
60Conclusão
- APIs bem avançadas, inclusive as Open source
- Facilitam bastante a construção de jogos
- Não é trivial
- Requer alto processamento de hardware
61Referências
- www.ode.org
- www.havok.com
- www.wikipedia.com/Havok_(company)
- www.wikipedia.com/Havok_(software)
62Dúvidas
????