View
21
Download
0
Category
Preview:
DESCRIPTION
Motivação. Até agora, apenas limitados programas de física tem sido integrados nos jogos. Isto significa que computação física vem sendo tratada por CPU de propósito geral, o que já é bastante limitado, pois a demanda de jogos avançados incluem Lógica e Inteligência Artificial (IA). - PowerPoint PPT Presentation
Citation preview
Motivação
Até agora, apenas limitados programas de física tem sido integrados nos jogos.
Isto significa que computação física vem sendo tratada por CPU de propósito geral, o que já é bastante limitado, pois a demanda de jogos avançados incluem Lógica e Inteligência Artificial (IA).
Como resultado, a física nos jogos está limitada a poucos objetos numa cena, efeitos repetidos ou cenas que apenas iludem o usuário com uma imitação da física real.
Objetivo
Introduzir a ferramenta de simulação PhysX, como meio para aumentar a imersão do usuário enquanto utiliza jogos de computadores.
Física aplicada à multimídia
Não é apenas como os objetos e cenas se parecem, mas como eles se comportam.
Na grande maioria dos jogos atuais, os objetos simplesmente não parecem agir do jeito que você gostaria ou espera.
A maior parte da ação é limitada a animações pré-produzidas. Poderosas armas deixam pouco mais do que marcas nas paredes mais finas e todo oponente que você elimina parece cair de um jeito estranhamente familiar.
Sem PhysX Engine
Com PhysX Engine
ImersãoCell Factor: Revolution
O que é o PhysX?
PhysX é uma ferramenta que auxilia aplicações multimídias.
Sua função é simular o modelo da física de Newton. Utiliza variáveis tais como a massa, velocidade, atrito e
resistência do ar.
Simula e prevê efeitos sob diferentes condições que se aproximam da vida real.
Efeitos
Corpos rígidos Corpos moles Fluídos Tecidos Explosões Fumaça e neblina densas Colisões
Advanced Gaming Physics
Fidelidade
Escala
Interação
Sofisticação
Formas de funcionamento
A PhysX Engine pode funcionar de duas maneiras:
Através do SDK do PhysX, apenas utilizando o próprio processador do computador° Todos os cálculos feitos na CPU do computador.Obs. Não suporta a simulação de efeitos de fluídos!
Através do SDK do PhysX, utilizando a PPU° Todos os cálculos feitos na PPU.Obs. Suporta a simulação de todos os tipos de efeitos.
Physics Processing Unit (PPU)
Empregar os conceitos da física em um jogo exige uma quantidade tremenda de cálculos matemáticos e lógicos, com uma utilização massiva de memória.
Isto requer a utilização de um processador altamente especializado para fornecer um rico ambiente imersivo com características como:
Explosões que causam poeira e efeitos colaterais; Personagens com uma geometria mais complexa, que
permitem uma interação e movimentação mais realista; As armas apresentam novos efeitos não previsíveis; Densa fumaça e neblina que circundam os objetos em
movimento;
AGEIA PPU
Como funciona?
A ferramenta PhysX não é um software de renderização.
Não trata da simulação de sons.
Necessita de outra ferramenta para construir a cena. Por exemplo: OpenGL, OGRE.
Arquitetura
Performance com a PPU
Aplicações
Jogos, jogos e mais jogos!
Cell Factor: Revolution
Cell Factor: Revolution
Monster Truck Maniax
Gothic 3
Demonstração
//executar demo da AGEIA
Questão Teórica
Baseando-se nos conceitos de multimídia, qual a principal vantagem da utilização da ferramenta PhysX?
Inicializando o PhysXvoid InitNx() {
// Inicializando o SDK
gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION);
if (!gPhysicsSDK) return;
// Criando a cena
NxSceneDesc sceneDesc;
sceneDesc.simType = NX_SIMULATION_SW;
sceneDesc.gravity = NxVec3(0,-9.81,0);
gScene = gPhysicsSDK->createScene(sceneDesc);
// Criando o material padrão
NxMaterial* defaultMaterial = gScene->getMaterialFromIndex(0);
defaultMaterial->setRestitution(0.5);
defaultMaterial->setStaticFriction(0.5);
defaultMaterial->setDynamicFriction(0.5);
// Criando os objetos na cena
groundPlane = CreateGroundPlane();
actor = CreateBox(); // criar uma esfera iniciando na posicao (0,5,0)
}
Loop do PhysXvoid loopPhysics(){
// recebe a variação do tempo em relação à última chamada da função
float gDeltaTime = UpdateTime();
// chama a simulação do PhysX passando como parâmetro a variação //do tempo
gScene->simulate(gDeltaTime);
gScene->flushStream();
}
Criando uma Esfera
NxActor* CreateSphere(const NxVec3& pos){
NxActorDesc actorDesc;
NxBodyDesc bodyDesc;
// O ator tem somente um shape(forma), a esfera
NxSphereShapeDesc sphereDesc;
// setando o raio da esfera
sphereDesc.radius = 1;
actorDesc.shapes.pushBack(&sphereDesc);
actorDesc.body = &bodyDesc;
//configurando a densidade do corpo do ator
actorDesc.density = 5;
//setando a posição global do ator
actorDesc.globalPose.t = pos;
return gScene->createActor(actorDesc);
}
Criando uma Cápsula
NxActor* CreateCapsule(const NxVec3& pos, const NxReal height, const NxReal radius, const NxReal density)
{NxActorDesc actorDesc;NxBodyDesc bodyDesc;
// O ator tem somente um shape(forma), a cápsula NxCapsuleShapeDesc capsuleDesc;// Setando a altura e o raio da cápsulacapsuleDesc.height = height;capsuleDesc.radius = radius;// Setando a posição local da cápsula para que ela inicie no planocapsuleDesc.localPose.t = NxVec3(0,radius+0.5*height,0);actorDesc.shapes.pushBack(&capsuleDesc);
actorDesc.body = &bodyDesc;actorDesc.density = density;// Setando a posição global do atoractorDesc.globalPose.t = pos;return gScene->createActor(actorDesc);
}
Questões Práticas
Exercício 1: Modifique Exercicio1.cpp, de forma que ao invés de se ter uma cena com um cubo, tenha uma cena com uma esfera. Utilize a função CreateSphere demonstranda anteriormente
Exercício 2: Modifique Exercicio2.cpp de forma que se adicione uma esfera e uma cápsula à cena. A esfera deve ser inicializada na posição (-5,0,5), raio 1 e densidade 10, enquanto que a cápsula estará na posição (0,0,0), altura 2, raio 0.5 e densidade 10
Dúvidas?
Recommended