1 / 29

Motivação

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).

Download Presentation

Motivação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. Objetivo • Introduzir a ferramenta de simulação PhysX, como meio para aumentar a imersão do usuário enquanto utiliza jogos de computadores.

  3. 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.

  4. Sem PhysX Engine

  5. Com PhysX Engine

  6. ImersãoCell Factor: Revolution

  7. 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.

  8. Efeitos • Corpos rígidos • Corpos moles • Fluídos • Tecidos • Explosões • Fumaça e neblina densas • Colisões

  9. Advanced Gaming Physics • Fidelidade • Escala • Interação • Sofisticação

  10. 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.

  11. 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;

  12. AGEIA PPU

  13. 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.

  14. Arquitetura

  15. Performance com a PPU

  16. Aplicações • Jogos, jogos e mais jogos!

  17. Cell Factor: Revolution Cell Factor: Revolution

  18. Monster Truck Maniax

  19. Gothic 3

  20. Demonstração • //executar demo da AGEIA

  21. Questão Teórica • Baseando-se nos conceitos de multimídia, qual a principal vantagem da utilização da ferramenta PhysX?

  22. Inicializando o PhysX void 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) }

  23. Loop do PhysX void 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(); }

  24. 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); }

  25. 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ápsula capsuleDesc.height = height; capsuleDesc.radius = radius; // Setando a posição local da cápsula para que ela inicie no plano capsuleDesc.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 ator actorDesc.globalPose.t = pos; return gScene->createActor(actorDesc); }

  26. 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

  27. Dúvidas?

More Related