\documentclass[a4,compress]{beamer} \AtBeginSection[]{ \begin{frame}{Sommaire} \tableofcontents[currentsection, hideothersubsections] \end{frame} } \usepackage{multimedia} \usepackage{color} \usepackage[absolute,overlay]{textpos} \setlength{\TPHorizModule}{\paperwidth} \setlength{\TPVertModule}{\paperheight} \setlength{\fboxrule}{0pt} \newcommand{\overpict}[2]{ \begin{textblock}{0.7}[0.5,0.5](0.5,0.5)% \fbox{% \begin{minipage}[c]{1.0\linewidth} \begin{center} \colorbox{black}{% \textcolor{orange}{#2}% }\vfill% \colorbox{black}{% \includegraphics[width=1.0\linewidth,height=6cm,keepaspectratio]{#1}% } \end{center} \end{minipage} } \end{textblock} } \usepackage{xspace} \usepackage{slashbox} \usepackage{graphicx} \usepackage[utf8]{inputenc} \usepackage[cyr]{aeguill} \usepackage[english,francais]{babel} \setcounter{tocdepth}{2} \usetheme{CS} \title{Une chaîne de production pour applications ludiques} \author{Guillaume Libersat } \institute{Kyanite Studios} \begin{document} \maketitle \section{Introduction} \frame { \frametitle{Introduction} \begin{itemize} \item Buts \begin{itemize} \item Présenter une suite d'outils \item Focus sur l'aspect informatique \item État des lieux \end{itemize} \end{itemize} \begin{itemize} \item CrystalSpace, CEL, ... \begin{itemize} \item Présentation ``conceptuelle'' \end{itemize} \end{itemize} \begin{itemize} \item Outils utilisés pour Apricot\footnote{http://apricot.blender.org} \end{itemize} \only<2>{\overpict{figures/apricot.png}{Les personnages d'Apricot}} } \section{Conception et données} \frame { \frametitle{Conception} \begin{itemize} \item Idées \end{itemize} \begin{itemize} \item Background \end{itemize} \begin{itemize} \item Scénario, Level design \end{itemize} \begin{itemize} \item<1-12> Concept Art \end{itemize} \only<2>{\overpict{figures/ideas.png}{Des idées}} \only<4>{\overpict{figures/background.png}{Background}} \only<6>{\overpict{figures/scenario.png}{Scénario}} \only<8>{\overpict{figures/kerin1.png}{Concept Art \#1}} \only<9>{\overpict{figures/kerin2.png}{Concept Art \#2}} \only<10>{\overpict{figures/kerin3.jpg}{Concept Art \#3}} \only<11>{\overpict{figures/kerin.png}{Concept Art \#4}} } \frame { \frametitle{Des données !} \begin{itemize} \item Modélisation \begin{itemize} \item Blender, Makehuman, ... \end{itemize} \end{itemize} \begin{itemize} \item<3-> Textures \begin{itemize} \item The Gimp, Krita, ... \end{itemize} \end{itemize} \pause \begin{itemize} \item<5-> Son \begin{itemize} \item Audacity, Puredata, ... \end{itemize} \end{itemize} \pause \begin{itemize} \item<7-9> Musique \begin{itemize} \item Ardour, Freewheeling, ... \end{itemize} \end{itemize} \only<2>{\overpict{figures/crane.jpg}{Une grue sans texture}} \only<4>{\overpict{figures/grenade.png}{Une grenade avec texture}} \only<6>{\overpict{figures/sons.png}{Bruits, sons, ...}} \only<8>{\overpict{figures/lymbago.png}{Musique !}} } \section{Support d'exécution} \subsection{CrystalSpace3D} \subsubsection{Introduction} \frame { \frametitle{CrystalSpace3d\footnote{http://www.crystalspace3d.org/}} \includegraphics[width=3cm]{figures/crystal.png} \begin{itemize} \item Framework d'applications 3D \begin{itemize} \item Non spécifique aux jeux \item Libre (LGPLv2.1, GPLv2, -- GPLv3, MPLv1.0) \item Portable, modulaire, extensible \item Support des différentes générations de matériels \end{itemize} \end{itemize} \pause \begin{itemize} \item Quelques stats (\textit{ohloh.net}) \begin{itemize} \item Démarré en 1997 \item Plus de 180 contributeurs (Fév. 08) \item 987000 LOC (Juin 08) \end{itemize} \end{itemize} } \subsubsection{Généralités} \frame { \frametitle{Portabilité} \begin{quote} \textit{\og Un développeur utilisant CrystalSpace [...] ne devrait ABSOLUMENT pas se soucier des questions de portabilité. CrystalSpace 'se doit' de tout gérer. \fg} -- Jorrit \end{quote} \pause \begin{itemize} \item Processeur : XML (+binaire) \item Système d'exploitation \begin{itemize} \item Système de fichiers : VFS \item Périphériques d'entrée \end{itemize} \item Système de fenêtrage \item Matériel 3D \item Son \item ... \end{itemize} } \frame { \frametitle{Modularité} \begin{itemize} \item Très modulaire \begin{itemize} \item Noyau minimal (maths, SCF, ...) \item Maintenance, extensibilité \item Tout est greffon \end{itemize} \end{itemize} \pause \begin{itemize} \item Greffons \begin{itemize} \item Interfaces (ex: iPhysics, iGraphics3D) \item Implante une ou plusieurs interfaces \item Interchangeable (ex: OpenAL, DirectSound) \end{itemize} \end{itemize} } \frame { \frametitle{Vue d'ensemble} \begin{columns} \begin{column}[l]{6cm} \includegraphics[width=6cm]{figures/cs_overview_t.png} \end{column} \begin{column}[2]{6cm} ~\\ ~\\ ~\\ ~\\ ~\\ ~\\ ~\\ \includegraphics[width=6cm]{figures/cs_overview_b.png} \end{column} \end{columns} } \subsubsection{Le moteur} \frame { \frametitle{Un monde CrystalSpace} \begin{itemize} \item Monde minimal \begin{itemize} \item Secteurs (4ème dimension) \begin{itemize} \item Lumières (Directionnelle, Soleil, ...) \item Objets 3D (Meshes) et leurs usines \end{itemize} \end{itemize} \end{itemize} } \frame { \frametitle{Un exemple de monde} \begin{center} \includegraphics[width=9cm]{figures/world_elements.png} \end{center} } \frame { \frametitle{Meshs} Mesh $\simeq$ Assemblage de géométrie 3d + Propriétés \begin{itemize} \item Différents types \begin{itemize} \item Simple \item Animé \begin{itemize} \item Keyframe \item Squelette/Hiérarchique \end{itemize} \item Particules \item Terrain \item ... \end{itemize} \item Usines de Meshes \end{itemize} \only<2>{\overpict{figures/mesh_simple.png}{Simple Mesh}} \only<4>{\overpict{figures/mesh_keyframe.png}{Keyframe}} \only<6>{\overpict{figures/mesh_bones.png}{Squelette}} \only<8>{\overpict{figures/mesh_particles.png}{Particules}} \only<10>{\overpict{figures/mesh_terrain.jpg}{Terrain}} } \frame { \frametitle{Matériaux et Shaders} \begin{itemize} \item Matériaux \begin{itemize} \item Couleur (diffuse, ambiante, spéculaire) \item Texture (statique, procédurale) \end{itemize} \end{itemize} \begin{itemize}[<2-4>] \item Shaders \begin{itemize} \item Programmes exécutés sur la carte graphique \item Agissent sur les propriétés du mesh \item Exemples \begin{itemize} \item Normal/Parallax mapping \item Eau (réfraction, ...) \end{itemize} \end{itemize} \end{itemize} \only<3>{\overpict{figures/parallax.jpg}{Parallax mapping (CS)}} } \frame { \frametitle{Portails} Portail $\simeq$ une porte qui connecte un secteur vers un autre \begin{itemize} \item Effets (distortions, miroir, ...) \end{itemize} \begin{itemize}[<4->] \item Améliore les performances \item Taille de niveaux \og infinie\fg \item Plus facile pour développer \end{itemize} \only<2>{\overpict{figures/portal_sectors.png}{Secteurs connectés via un portail}} \only<3>{\overpict{figures/portals.jpg}{Résultat de connexion}} } \frame { \frametitle{Cullers} \begin{columns} \begin{column}[l]{9cm} \begin{itemize} \item<1-> Culler ? \begin{itemize} \item Supprime le rendu des objets non visibles \item Un culler par secteur \end{itemize} \end{itemize} \begin{itemize} \item<2-> Frustvis \begin{itemize} \item Objets hors de la vue \item Secteurs simples ou vides \end{itemize} \item<4-> Dynavis \begin{itemize} \item Détermine l'ensemble des objets occultés \item Scènes intérieures, remplies \end{itemize} \item<5-> PVSvis (Potential Visible Set) \begin{itemize} \item Précalcul, rapide à l'exécution \item Ne fonctionne pas actuellement :-( \end{itemize} \end{itemize} \only<3>{\overpict{figures/frustvis.png}{Frustvis}} \end{column} \begin{column}[r]{4cm} \includegraphics<2>[width=4cm]{figures/frustrum.png} \end{column} \end{columns} } \frame { \frametitle{LOD} LOD = Level of Detail \begin{itemize} \item Réduction du niveau de détails \begin{itemize} \item Distance, qualité, matériel, ... \end{itemize} \item<2-> Différents types \begin{itemize} \item Progressif : fusion des faces \item Imposteur : rendu sur texture \item Statique : défini à la modélisation \item Terrain : algorithmes particuliers \end{itemize} \end{itemize} \only<3>{\overpict{figures/lod_mesh.png}{LOD sur Mesh}} \only<5>{\overpict{figures/lod_imposter.jpg}{LOD avec imposteurs}} \only<7>{\overpict{figures/lod_terrain.png}{LOD sur Terrain}} } %\frame %{ % \frametitle{Boucles de rendu} % % TODO %} \frame { \frametitle{Eclairage et Ombres} \begin{itemize} \item Lightmap \begin{itemize} \item Très bon rendu (radiosité, photon mapping, ...) \item Précalculées (long) \item Rapide (pas de coût à l'exécution) \item Statiques \end{itemize} \end{itemize} \begin{itemize}[<3->] \item Stencil Shadows \begin{itemize} \item Dynamique \item Bon rendu \item Lent, dépendant du matériel \end{itemize} \end{itemize} \begin{itemize}[<5-7>] \item PSSM (Shadow Mapping) \begin{itemize} \item Dynamique \item Performant \item Se mélange bien avec les lightmaps \end{itemize} \end{itemize} \only<2>{\overpict{figures/radiosity.png}{Lightmap (Raydium)}} \only<4>{\overpict{figures/stencil.jpg}{Stencil Shadows}} \only<6>{\overpict{figures/pssm.jpg}{Parallel-Split Shadow Mapping}} } \frame { \frametitle{Collision et Physique} \begin{itemize} \item OPCODE \begin{itemize} \item Simple, fonctionnel \item Léger \item Pas de physique \end{itemize} \end{itemize} \begin{itemize} \item Ode, Bullet \begin{itemize} \item Physique \og réaliste\fg (masse, élasticité, ...) \item Support des joints (+ destruction) \item Relativement lourd \item Support multithread en cours (Bullet) \end{itemize} \end{itemize} } \frame { \frametitle{Son et Musique} \begin{itemize} \item Son 3D, OpenAL \begin{itemize} \item Des sources \item Un récepteur \item Effets (Doppler, ...) \end{itemize} \end{itemize} \begin{itemize} \item Musique d'ambiance \begin{itemize} \item Wav, Ogg, ... \end{itemize} \end{itemize} } \frame { \frametitle{HUD/Menus} Afficher des plans 2D au dessus de l'affichage \medskip Deux supports \begin{itemize} \item<1-> Billboards \begin{itemize} \item Légers, Simple \item Mixe 2D/3D \end{itemize} \item<3-5> CEGUI \begin{itemize} \item Complet (pensez GTK-like) \item Outillé (éditeur) \item Plus lourd \end{itemize} \end{itemize} \only<2>{\overpict{figures/billboard.png}{Radar avec billboards}} \only<4>{\overpict{figures/cegui.jpg}{CEGUI}} } \frame { \frametitle{Scripting} \begin{itemize} \item Langages \begin{itemize} \item Python \item Perl \item Java \item (C\#) \item (Lua) \item (XML) \end{itemize} \end{itemize} \pause \begin{itemize} \item Accès à (presque) toute l'API \item Tire profit des spécificités \item Très bonnes performances \end{itemize} } \frame { \frametitle{Débogage} \begin{itemize} \item Bugplug \begin{itemize} \item Débogueur visuel \item Ex: Colorier secteurs, Désactiver éclairage, ... \end{itemize} \item<3-5> Console \begin{itemize} \item Interaction avec le moteur \end{itemize} \end{itemize} \only<2>{\overpict{figures/bugplug.png}{Bugplug}} \only<4>{\overpict{figures/console.png}{Console}} } \frame { \frametitle{Google summer of code '08} Projets en cours \begin{itemize} \item Parallélisation \item Nuages volumétriques \item Océans, rivières, ... \item Amélioration de l'IA \item<1-5> Amélioration de l'éclairage \end{itemize} \only<2>{\overpict{figures/clouds.png}{Nuages volumétriques (Harris)}} \only<4>{\overpict{figures/water.jpg}{Shader d'océan (Johanson)}} } \subsection{CEL} \frame { \frametitle{Introduction} \begin{columns} \begin{column}[1]{7cm} CEL : Crystal Entity Layer\footnote{http://www.crystalspace3d.org/main/CEL} \begin{itemize} \item Au dessus de CS \item Notion d'\og entité\fg \end{itemize} \begin{itemize} \item Entités \begin{itemize} \item À la base : un point dans l'espace \item Greffe de fonctionnalités \og préfabriquées\fg \item Un comportement \end{itemize} \end{itemize} \end{column} \begin{column}[2]{3cm} \includegraphics[width=3cm]{figures/cel.png} \end{column} \end{columns} } \frame { \frametitle{Vue d'ensemble} \begin{center} \includegraphics[width=9cm]{figures/cel_overview.png} \end{center} } \frame { \frametitle{Couche physique} \begin{itemize} \item Gestionnaire d'entités \end{itemize} \begin{itemize} \item Système de messages \end{itemize} \begin{itemize} \item Système de persistance \begin{itemize} \item XML, Binaire \end{itemize} \end{itemize} \begin{itemize} \item Fonctionnalités générales \begin{itemize} \item Réseau, Système de règles, ... \end{itemize} \end{itemize} \begin{itemize} \item Property classes \end{itemize} } \frame { \frametitle{Property classes} \begin{itemize} \item Property class ? \begin{itemize} \item 1 \textit{PC} $\simeq$ 1 Fonctionnalité \item Se greffe à une entité \item $n$ \textit{PC} par entité \end{itemize} \end{itemize} \pause \begin{itemize} \item Des property classes \begin{itemize} \item Mesh \item Récepteur sonore \item Soumis à la gravité \item Camera \item ... \end{itemize} \end{itemize} \pause \begin{itemize} \item Exemple : un coffre \begin{itemize} \item PcMesh + PcInventory + PcSolid + ... \end{itemize} \end{itemize} } \frame { \frametitle{Couche comportementale} \begin{itemize} \item 1 comportement par entité \item C++, Python, XML, ... \end{itemize} \pause \begin{itemize} \item Réponse à des messages \begin{itemize} \item Venant des Propclasses \begin{itemize} \item ex: pcdamage\_hit \end{itemize} \item Venant d'autres entités \end{itemize} \end{itemize} \pause \begin{itemize} \item Envoie de messages \begin{itemize} \item Vers d'autres entités \end{itemize} \end{itemize} } \frame { \frametitle{Résumé de CEL} \begin{center} \huge{Entités + Property classes + Comportements = Logique de jeu} \end{center} } \frame { \frametitle{CELstart} \begin{columns} \begin{column}[l]{7cm} CELstart\footnote{http://www.crystalspace3d.org/main/CELstart} \begin{itemize} \item 1 unique binaire (statique) \item Démarre une application CEL \end{itemize} \begin{itemize}[<2->] \item Données CELstart \begin{itemize} \item Pas d'obligation de code natif \begin{itemize} \item Portabilité \item Rapidité \end{itemize} \item Regroupé sous forme d'un ZIP \end{itemize} \end{itemize} \end{column} \begin{column}[2]{3cm} \includegraphics[width=3cm]{figures/celstart.png} \end{column} \end{columns} } \section{Co-réalisation} \subsection{Verse} \frame { \frametitle{Verse} \begin{columns} \begin{column}[l]{6cm} Verse\footnote{http://verse.blender.org} \begin{itemize} \item Connecteur d'applications 3d \end{itemize} \begin{itemize}[<2->] \item Chaque application peut \begin{itemize} \item Partager des ressources \item Utiliser des ressources \item Modifier des ressources \end{itemize} \end{itemize} \begin{itemize}[<3->] \item Dans notre cas \begin{itemize} \item Intéressant pour les artistes \item Visualisation du rendu final \end{itemize} \end{itemize} \onslide<4->{Vidéo !} \end{column} \begin{column}[2]{4cm} \includegraphics[width=4cm]{figures/verse.png} \end{column} \end{columns} } \frame { \frametitle{Démonstration de Verse} \begin{center} \href{run:mplayer -fs movies/verse.mpg}{\includegraphics[width=0.8\textwidth]{figures/verse.png}} \end{center} } \subsection{Blender2Crystal} \frame { \frametitle{Blender2Crystal} \begin{columns} \begin{column}[1]{7cm} Blender2Crystal\footnote{http://b2cs.delcorp.org} \begin{itemize} \item Éditeur de niveau pour CS/CEL \item Script blender (Overlay + Exportateur) \end{itemize} \begin{itemize}[<3->] \item Création de scènes CS \item Gestion des entités CEL \item Création d'applications Celstart \end{itemize} \onslide<4->{Vidéo !} \end{column} \begin{column}[2]{3cm} \includegraphics[width=3cm]{figures/b2cs.png} \end{column} \end{columns} \only<2>{\overpict{figures/b2cs-overlay.png}{Overlay de B2CS}} } \frame { \frametitle{Démonstration de B2CS} \begin{center} \href{run:mplayer -fs movies/b2cs-1.mpeg}{\includegraphics[width=0.38\textwidth]{figures/b2cs-1.jpg}} \end{center} \begin{center} \href{run:mplayer -fs movies/b2cs-2.mpeg}{\includegraphics[width=0.38\textwidth]{figures/b2cs-2.jpg}} \end{center} } \section{Conclusion} \frame { \frametitle{Conclusion} \begin{itemize} \item Chaîne d'outils (quasi) complète \begin{itemize} \item Beaucoup d'outils complets et efficaces \item Couvre la plupart des besoins \end{itemize} \end{itemize} \pause \begin{itemize} \item Peu intégrée \begin{itemize} \item Peu de connexions entre les logiciels \item Formats d'échanges ? \item Travail collaboratif \end{itemize} \end{itemize} \pause \begin{itemize} \item Reste très centrée \og informaticiens\fg \begin{itemize} \item Outils pour scénaristes ? \item Facilité des éditeurs \end{itemize} \end{itemize} } \frame { \frametitle{Questions ?} \begin{center} Merci pour votre attention, \end{center} \begin{center} \huge{des questions ?} \end{center} } \end{document}