motivação até agora, apenas limitados programas de física tem sido integrados nos jogos. isto...
Post on 07-Apr-2016
217 Views
Preview:
TRANSCRIPT
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çãofloat gDeltaTime = UpdateTime();
// chama a simulação do PhysX passando como parâmetro a variação //do tempo
gScene->simulate(gDeltaTime);gScene->flushStream();
}
Criando uma EsferaNxActor* CreateSphere(const NxVec3& pos){
NxActorDesc actorDesc;NxBodyDesc bodyDesc;
// O ator tem somente um shape(forma), a esferaNxSphereShapeDesc sphereDesc;
// setando o raio da esferasphereDesc.radius = 1;actorDesc.shapes.pushBack(&sphereDesc);
actorDesc.body = &bodyDesc;//configurando a densidade do corpo do atoractorDesc.density = 5;//setando a posição global do atoractorDesc.globalPose.t = pos;return gScene->createActor(actorDesc);
}
Criando uma CápsulaNxActor* 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?
top related