\documentclass{beamer}

\usepackage{ifpdf}
\usepackage{ifxetex}

\ifxetex
\usepackage{xltxtra}
\usepackage[T1]{fontenc}
\fi

\ifpdf
\usepackage[utf8]{inputenc}
%\usepackage{microtype}
\fi

\usepackage[ngerman]{babel}
\usepackage{graphics}

\mode<presentation>{
  \usetheme{Frankfurt}
  \useoutertheme{infolines}
  \usecolortheme[RGB={0,100,130}]{structure}
  \useinnertheme{rounded}
  \setbeamertemplate{navigation symbols}{} 
}

\newcommand{\subheading}[1]{\visible<+->{\Large{\bf #1}}}


\title{PhysX Evaluation}
\subtitle{Softwarepraktikum Computergraphik}

% Alphabetisch sortiert
\author{Daniel Brock, Robert Kreuzer, Simon Kufner}
\date{\today}

\usepackage{multimedia}

\begin{document}
\frame{\maketitle}
%\titlepage

\frame{\tableofcontents}

\section{Aufgabenstellung}
\begin{frame}
\subheading{PhysX im Umgang mit Dominosteinen, Strömungen und Steinblöcken} \\
Eine Evaluation
\begin{itemize}
\item{} Erstellen einer Szene mit Dominosteinen zur Einführung in PhysX und dessen Festkörper-Simulation
\item{} Erstellen einer Szene mit Partikelsystemen zur Simulation von Strömungen
\item{} Umsetzen der akquirierten Erfahrung in eine komplexere PhysX-Anwendung 
\item{} Generierung einer Szene mit hochpolygonalen Steinen aus Banteay Chhmar
\end{itemize}
\end{frame}

\section{Motivation}
\begin{frame}
\subheading{Motivation}
\begin{itemize}
\item{} Erweiterung von Virtueller Realität durch Physik-Simulationen führt zu realistischeren und unterhaltsameren Anwendungen
\item{} Implementierung jedoch aufwändig
\item{} Hoher Bedarf an Rechenleistung und Speicher
\end{itemize}
\end{frame}

\begin{frame}
\subheading{Berechnung auf Grafikkarten}
\begin{itemize}
\item{} Entlastung der CPU
\item{} Viele physikalische Berechnungen lassen sich gut auf Vektorprozessoren (GPU) parallelisieren 
\item{} Jedoch Abhängigkeit von Hardware (Physik-Beschleuniger / Grafikkarten)
\item{} Verkürzen von Entwicklungszeiten durch Middleware Physik Engines (Plattformunabhängigkeit)
\end{itemize}
\end{frame}

\section{Einleitung PhysX}
\begin{frame}
\subheading{Physik-Engine PhysX}
\begin{itemize}
\item{} Initial von Ageia entwickelt
\item{} Aufgekauft von NVIDIA und portiert auf CUDA
\item{} HW-Unterstützung auf Grafikkarten von NVIDIA (ab GeForce 8  Serie, CUDA-fähig, min. 32 Recheneinheiten und 256 MB Grafikspeicher)
\item{} SW-Emulation auf CPU mit geringerer Leistung möglich
\end{itemize}
\end{frame}

\begin{frame}
\subheading{Physik-Engine PhysX}
\begin{itemize}
\item{} Unterstützte Plattformen sind Windows, Apple Mac OS X, Linux, Nintendo Wii, Sony PlayStation 3, Microsoft Xbox 360
\item{} Engine und SDK sind unter http://www.NVIDIA.co.uk/object/physx\_new\_uk.html erhältlich.
\item{} Binärdateien sind für kommerzielle und nicht-kommerzielle Nutzung kostenlos, Quelltext kostet \$50k
\item{} Physik-Simulation in Echtzeit
\item{} Feste und weiche Körper, Flüssigkeiten, Gewebe, Kraftfelder, ...
\end{itemize}
\end{frame}

\begin{frame}
\subheading{Limitationen}
\begin{itemize}
\item{} Höchsten 64k Objekte
\item{} Höchstens 256 Polygone als konvexe Hülle
\item{} Verschiedene Flüssigkeiten können nicht interagieren
\item{} Gewebe kann nicht mit anderem Gewebe oder weichen Körpern interagieren
\item{} Kollisionserkennung nicht zwischen allen Repräsentationen
\item{} Physikalische Regeln verhindern u.U. eigenes Verhalten
\item{} Keine HW-Unterstützung auf Linux, Mac OS
\end{itemize}
\end{frame}

\section{Dominosteine}
\begin{frame}
\subheading{Dominosteine}

\begin{itemize}
\item{}Test auf realistischen Domino Effekt
\item{}Wovon hängt die Fallgeschwindigkeit ab?
 \item{}Größe der Dominos
 \item{}Zeitschritt
 \item{}Schwerkraft
\end{itemize}
  
\end{frame}


\begin{frame}

\begin{itemize}
\item{}Drehung über Rotationsmatrizen oder Quaternionen
\item{}Merkt sich globale Koordinaten und Ausrichtung
\item{}Box-Objekt teil des SDK
\item{}Kurvenradius abhängig von der Anzahl der Dominos
\item{}Max Dominos systemabhängig (~2000 - 5000)
\end{itemize}

\end{frame}

\section{Partikelsysteme / Strömungen}
\begin{frame}
\subheading{Simulation von Strömungen und Gasen durch Partikelsysteme}
\begin{itemize}
\item{} Erstellung von Partikeln (NxFluid) durch NxFluidEmitter oder durch Laden eines gespeicherten Zustands 
\item{} Entfernen durch Drains (Flag) oder durch Absterben
\item{} Interaktion mit anderen registrierten Objekten (Ausnahme andere Partikelsystemen)
\item{} Expliziter Programmieraufwand bei Meshes und beidseitigem Abstossen
\item{} Simulation in 3 Modi möglich
\begin{itemize}
\item{} Normaler (einfacher Modus) - Perfomant
\item{} Smoothed Particle Hydrodynamics - Kräfte zwischen Partikel werden berücksichtigt
\item{} Gemischter Modus - Dichte wird berücksichtigt
\end{itemize}
\end{itemize}
\end{frame}


\begin{frame}
\subheading{Steine von BanteayChhmar und konvexe Hüllen}

\begin{itemize}

\item{} Hochauflösende 3D-Scans von Steinen
\item{} Konvexe Hüllen für die Kollisionsabfrage berechnen

\item{} ConvexDecomposition
\begin{itemize}
\item{} extrem langsam, 3h für den kleinsten Stein
\item{} gute Näherung
\item{} viele nützliche Parameter
\item{} stürzt bei allen außer dem kleinsten Stein ab
\end{itemize}

\item{} MeshLab
\begin{itemize}
\item{} schnell
\item{} erzeugt viel zu große Meshes
\item{} keine Parameter
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}
\begin{itemize}
\item{} DecomposeSample
\begin{itemize}
\item{} schnell
\item{} viele Parameter
\item{} leider kein Parameter für maximale Anzahl Dreiecke, lediglich für maximale Anzahl Vertices
\item{} passende Parameter experimentell für jeden Stein einzeln von eigener Software ermitteln lassen
\end{itemize}
\end{itemize}
\end{frame}

\section{Implementierung}
\begin{frame}
\subheading{Verwendete Technologien}
\begin{itemize}
\item{} NVIDIA PhysX 
\item{} Microsoft Visual Studio 2010 Ultimate
\item{} Windows Presentation Foundation
\item{} Visual C\#, Managed C++, Visual C++, Marshalling
\item{} FreeImage
\item{} DecomposeSample, ConvexDecomposition, MeshLab
\end{itemize}
\end{frame}


\section{Architektur}
\begin{frame}
\begin{figure}
\begin{center}
\includegraphics[scale = 0.5]{diagram1}
\end{center}
\end{figure}
\end{frame}


\begin{frame}
\subheading{Unsere Architektur}
\begin{figure}
\begin{center}
\includegraphics[scale = 0.3]{architektur}
\end{center}
\end{figure}
\end{frame}

\section{Zusammenfassung}
\begin{frame}
\subheading{Zusammenfassung}
\begin{itemize}
\item{} OpenGL im Microsoft Kontext schlecht unterstützt $\Rightarrow$ Verwenden von DirectX
\item{} PhysX mächtig und leicht einzubinden
\item{} PhysX eher für spielerische Anwendungen, nicht für exakte Simulationen
\item{} Hochpolygonale Modelle benötigen Optimierungen (einfachere Kollisionsrepräsentationen)
\end{itemize}

\end{frame}

\end{document}

