Motivação Até agora, apenas limitados programas de física tem sido integrados nos jogos. Isto...

Preview:

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çã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?

Recommended