 Je travaille pour Fabric Engine et donc je vais vous présenter création de plate-formes. C'est une plate-forme de développement qui est basée très largement sur Python. C'est pour ça qu'on est là ce soir. Donc on travaille en fait dans un secteur d'activité qui est lié à tout ce qui est effet spéciaux, animation, cinéma, j'ai vidéo. Donc c'est surtout notre marché majeur actuellement. Et on fait des outils pour créer des applications. Donc on fait des outils pour créer des outils. C'est-à-dire qu'on crée pas une application 3D. On crée les outils pour que les gens puissent créer leurs outils. Donc la présentation est assez axée sur la 3D, dans la publicité du cinéma, dans le type d'outil qu'on peut utiliser dans ce domaine-là. Si vous avez des questions, parce que ce n'est pas forcément votre domaine d'activité, vous pouvez en poser, il n'y a pas de problème. Et je vais vous d'abord vous montrer le produit un petit peu ce que ça peut faire. Donc c'est la première fois de ma vie que j'utilise un Mac. Donc c'est Control-F5, non ? Function-F5, oui. Ok, donc démarrer, il ne sait pas ça. C'est ça. Normalement il y a du fond. Mais ça vous montre rapidement, en fait, on édite du code en Python qui vous permet de créer des applications, de construire votre application, comme par exemple définir le personnage que vous voulez avoir dans votre application 3D. Définir son squelette, définir ces matériaux. Tout ce genre de choses où vous devez définir, vous devez faire comme un menu de ce que vous allez mettre dans votre application. Tout ça se crée en Python. Et ensuite tout ce qui est évaluation, tout ce qui est lourd en calcul, comme calculer des milliers de pixels pour faire des opérations sur des pixels ou calculer une déformation sur un mesh. Tout ce genre de choses se fait avec KL, qui est notre propre langage à nous. Et qui permet en fait d'évaluer en parallèle. Et qui peut être appelé depuis le code Python. Donc c'est ça qui est assez intéressant. C'est qu'on peut appeler KL que pour les parties gourmandes en calcul. Donc je vais vous montrer ça après. Et on peut faire toutes ces applications comme une intégration avec des applications existantes. Donc dans Maya, dans Softimage ou standalone, donc là c'est une application standalone. Donc en gros ça fait plein de choses. Ça fait pas quelque chose en particulier. C'est un outil où vous pouvez créer avec, je sais pas, un système d'animation de personnage. Un système de fourrure pour un personnage. Pour simuler une fourrure, pour simuler des poils. Vous pouvez faire un système de déformation quelconque. Un système de simulation de particules. Simulation de fluide. C'est ouvert à tous les domaines où il y a besoin de beaucoup de calculs. Et je prends des exemples liés à l'animation parce que c'est mon domaine. Mais en fait c'est aussi très intéressant pour des applications scientifiques. Si vous êtes habitué à utiliser Python avec NumPy ou avec PyCuda ou des choses comme ça. On va un petit peu plus loin parce qu'on n'est pas juste un module pour pouvoir avoir accès au parallélisme. En fait on propose un framework, une application. C'est-à-dire qu'on propose... Vous pouvez créer une application avec un système d'endorado, la persistance. Toutes ces choses-là qui sont assez des viewport, un Syngraph avec des nodes. Donc ce n'est pas seulement créer du code et créer du code plus vite grâce à des modules. C'est aussi tout un framework pour créer une vraie application complète. Tout ce qu'on ne veut pas faire quand on développe quelque chose dans le domaine scientifique ou autre, ou de l'animation. On ne veut pas se concentrer sur les choses comme il manque l'endorado, il manque une timeline, il manque un graph editor. On propose tout ça et c'est très modulaire. Donc voilà l'idée de création plateforme. C'est aussi un système qui marche en standalone où il peut s'intégrer dans une application comme dans Softimage ou Maya. Parce qu'on a une API qui permet de connecter en fait création plateforme directement à Maya ou directement à Softimage. On peut connaisser Softimage ou Maya un petit peu si vous avez entendu parler. Donc voilà. Donc on utilise Python pour tout ce qui est définition de ce qu'on veut faire dans l'application. En fait, on utilise ce qu'on appelle un Syngraph. On va créer des nodes. Et un node, c'est juste quelque chose qui contient un data et qui est aussi accroché à une fonction. Donc par exemple, j'ai un personnage que je veux déformer. Je peux créer un node qui va stocker le maillage du personnage. Donc une grosse array de position, position du personnage des vertex. Ce maillage-là du personnage, je veux le déformer. Donc j'ai une fonction, une petite fonction qui va dire bouge les points. Le node encapsule tout ça et dit, cette fonction-là, on fait un binding entre la fonction et le data. Tout ça se fait dans le node. Donc ça c'est une chose mais ensuite on peut créer plusieurs nodes. Ce qui fait qu'on peut avoir accès à un calcul qui est paralysé très facilement parce qu'on a toujours un independent Syngraph. Donc en fait, on définit l'exécution de calcul et du coup, on est libre de faire du parallélisme. On peut très bien avoir deux personnages dans la scène qui seront évalués en parallèle. Ce qui n'est pas possible ou qui est très difficile à faire avec Maya ou Softimage. Là, on est en parallélisme dès qu'on peut. Bien sûr, des fois on ne peut pas parce que ce n'est pas possible mais quand on peut faire du parallélisme, c'est automatique. On peut le faire de façon implicite ou explicite. Donc on utilise Python, QT, QT pour ce qui est UI. KL, c'est notre propre langage. C'est un langage qui ressemble beaucoup assez ou à JavaScript qui est un langage clearly braced, qui est tippé. Contrairement à JavaScript, ça va très vite, c'est beaucoup plus rapide et qui est compilé Just In Time avec une LLVM. Donc en fait, ça peut rouler sur plusieurs plateformes, ça peut rouler sur du GPU, CPU. Du coup, on prend un petit peu les avantages de chaque domaine. Donc en C++, on est très rapide mais c'est assez lourd. Surtout quand on s'attresse à des gens qui sont en production qui font des outils dans des délais très courts pour une publicité, pour un film. Et le C++ est souvent très lourd pour ça. Donc là, en fait, on peut modifier le code dans l'application directement si on veut. On peut coder à part et puis lancer l'application ou on peut aussi modifier du code exécutable en runtime. Et puis bien sûr, on appitons pour tout ce qui est définition d'une scène. Donc voilà, par exemple, un exemple de dependency graph. Donc dans ce cas-là, le node 2 et le node 3 sont dépendants du node 1, donc ils ne peuvent pas être évalués sans lui mais après, les deux branches que node 2 et node 3 peuvent être évalués en parallèle. Et ensuite, la branche après node 2 et la branche après node 3 de même, ainsi de suite. Donc c'est le principe du scene graph que je vous montrerai plus tard. Donc voilà, je pense que c'est un des derniers slides. Donc en fait, le fonctionnement de Crashing Platform, le core, c'est tout ce qui est en bas en vert. On a donc KL, Python, une API pour pouvoir communiquer avec d'autres applications. Ensuite, par-dessus ça, on a rajouté des extensions. C'est un système d'extension toujours en C++ parce qu'on peut créer pas mal de choses avec KL. On peut en fait créer beaucoup de choses. On a créé dernièrement un moteur de rendue RealTime qui n'est pas écrit en C++, qui est écrit 100% avec KL. Bien sûr, il y a beaucoup de librairies qui sont faites avec en C ou en C++. Donc on ne voulait pas être isolé. Donc on a un système de plug-in qui peut brancher n'importe quelle librairie C ou C++ dans KL. Depuis KL, on peut appeler des librairies C++. Donc KL, c'est pour l'exécution de tout ce qui est gourmand. Pour tout ce qui est en fait création d'une application, création d'une application avec un système qui est de softguard, etc. C'est du piton, donc c'est tout ce qui est en bleu. Donc on peut créer un système d'undo redo. Le Syngraph, vous le définissez en piton. Donc tous les nodes que j'ai montrés là qui sont évalués par KL, en fait, vous les créez en piton. On verra ça tout à l'heure. Et pour finir, on crée des choses comme des caractères solvers, des muscle simulations, animation tools, tout ça avec création plateforme. On peut avoir une application comme Maya House of Image. Donc on peut créer ça standalone où on peut s'intégrer dans une autre application. Je parle de Maya House of Image parce que c'est actuellement celle qu'on a fait marcher avec création plateforme. Mais en fait, on a une API pour marcher avec n'importe quelle application C++ qui a une API pour pouvoir communiquer avec elle. Donc ce n'est pas limité juste à deux applications 3D. Donc ce que je vais faire, je vais vous montrer un petit exemple. Je vais essayer de pratiquer sur Mac pour vous montrer ce qu'on peut faire. Donc je vais d'abord vous montrer le résultat, une idée du résultat si je trouve guide. Comme c'est du piton, on peut lancer l'application en lançant un piton et là j'ai un fichier piton. Pour l'instant, ce n'est peut-être pas tellement clair la distinction entre piton et KL donc voilà, ça c'est une application faite avec création plateforme et le code ressemble à ça. Donc ça c'est le code principal pour l'application que vous venez de voir qui ne fait pas grand chose à part ouvrir une fenêtre avec un viewport. Et puis si j'ouvre avec un Syngraph qui vous montre un petit peu ce qu'il y a dans la scène c'est-à-dire pour l'instant pas grand chose mais tout est décréé dans le Syngraph vous avez un viewport qui est un node qui définit un matériau par défaut par exemple ça c'est la grille que vous voyez ici en fait il y a toute une grille créée par un node tout est créé par un node en fait donc si je regarde l'application ici pourquoi cette application est très simple parce qu'en fait on arrive de basic 3D application. Donc basic 3D application c'est c'est beaucoup plus complexe évidemment c'est pas la bonne touche Ctrl Z, Ctrl C, ça marche non si je complice ça va pas marcher Ctrl F ouais ça c'est la base pour toutes les applications création plateforme donc le plus gros du travail a été déjà fait si on peut dire et ici on définit en fait tout ce qui est par exemple quelles sont les extensions, les plugins que je veux charger donc là ce sont des plugins très particuliers pour la production 3D c'est pour importer des formats fichiers comme le format OBJ, format FBX c'est des fichiers 3D pour importer des personnages ou des mèches Fabrique LIDAR c'est un format de scan 3D pour avoir d'animages de points c'est utilisé par les géomètres pour scanner un paysage par exemple et puis c'est tout donc là ce sont des extensions qu'on peut charger par défaut si on veut on peut tomber en place la licence donc là par exemple je peux demander est-ce que je veux un viewport ou pas on peut très bien créer une application sans viewport c'est rarement le cas mais ça peut arriver on peut créer donc là je veux la grille est-ce que je vais avoir un autre pour décrire le temps donc si on a une application avec animation c'est déjà fait par défaut par défaut c'est pas fait par défaut c'est false par défaut c'est false etc etc donc toutes les grandes points qui sont importantes pour une application 3D sont déjà très pareilles ici donc pour revenir à notre application ce que l'on va faire c'est une petite application qui crée un node qui s'appelle si je le trouve il est là qui crée un node qui s'appelle Mandelbrot Image et en fait ce node là génère une fractale un Mandelbrot donc c'est pas très compliqué c'est pas très impressionnant comme démonstration je vais essayer d'avoir tous les crans donc aussi question platform vous donnez une timeline si vous avez besoin d'animation donc pour l'instant la timeline sert à rien la fractale ne bouge pas parce qu'elle n'est pas pilotée par le temps donc ce qu'on va faire c'est d'abord je vais vous montrer un petit peu le code je vais vous montrer un node qui génère une image parce que là si je cache la grille en fait là on a juste une image 2D d'une opération mathématique par pixel donc sur chaque pixel il y a une opération mathématique donc là il y a beaucoup de pixels donc ça va faire ça en piton ça serait assez long on pourrait le faire avec des modules mais nous on fait ça avec KL qui a un nom de langage et en fait KL va créer la couleur ce que vous voyez sur le GPU donc là ce qu'on voit c'est une image qui est sur le GPU et qui ne bouge pas pour l'instant donc je vais vous montrer ce qui se passe Mandelbrot donc là en fait l'application ne sert pas grand chose à pas créer un node MandelbrotImage donc on va aller voir ce que c'est ce node MandelbrotImage MandelbrotImage c'est une classe piton qui en fait dérive de images 2D qui est une classe piton qu'on a créée nous et en fait tous les nodes dérive de la classe SyngraphNode et un SyngraphNode c'est une abstraction d'un DigiNode c'est un dependency graph node c'est le node qui est créé par le Core donc avec un langage KL qui en fait n'est pas du piton du tout donc ce dependency graph avec toutes ces connexions qui sont en fait évaluées uniquement c'est quelque chose à besoin d'être évalué tout ce dependency graph peut être créé depuis piton comme dans cet exemple là donc là si je vais voir image 2D il va contrôler c donc image 2D c'est c'est une classe qu'on a créée qui dérive de images vous allez voir images je pense c'est une classe très simple c'est la classe de base pour les images image simple présentation voilà plus que 4 minutes wow c'est fou donc le SyngraphNode c'est c'est le node de base et par là vous créez en fait vous pouvez créer directement une classe en partant de SyngraphNode ou vous pouvez créer ou prendre des classes qu'on a créées pour vous comme le Mandelbot image donc dans cette classe là vous pouvez créer d'autres vous pouvez créer du data donc pour mon image j'ai besoin en fait de largeur hauteur, un centre, un zoom etc. plein de choses donc je vais vous montrer en fait ce qu'on peut faire je pensais que j'aurais plus de temps que ça c'est impressionnant comme ça passe vite donc contrôle s je vais vous montrer comment créer une connexion sur un node pour l'instant on ne peut pas driver le MandelBloodImage avec le temps donc ce que fait ce code Python c'est créer un port sur le node, un port time pour pouvoir connecter du time du temps sur le node donc maintenant si je relance l'application qui est là, qui est ferme qui est quelque part donc maintenant l'application je vais importer un objet donc là j'utilise en fait un plugin c++ qui qui open source pour créer pour importer des objets et donc là je peux remettre ça là je peux utiliser mon node MandelBlood qui est là maintenant si je zoom sur mon node MandelBlood il y a une connexion time que je définis en Python et cette connexion time je peux la connecter par exemple au time node qui est dans la scène quelque part on le retrouve c'est pas mal ça global time et puis je peux connecter ce time node cette texture en fait dans un matériau et puis la grenouille je peux la connecter dans le matériau du coup en fait je vois ma texture sur le matériau et je peux aussi jouer l'animation je vais brancher sur la caméra pour pouvoir pour pouvoir suivre ma grenouille donc ça c'est la caméra qui a été importée avec la grenouille qui a été animé qui suit la grenouille donc si je veux à début donc là j'ai animé la texture grosse si en fait dans le temps parce que le node MandelBlood image un de ses paramètres le zoom factor maintenant on n'est plus un paramètre tout seul c'est le time qui drive le zoom factor donc ce graph qui est évalué par KL a été créé en piton et je peux vous montrer pour finir en une minute donc là j'ai un node dans ce node je définis des paramètres on va dire du data mais ensuite ces membres je veux les modifier et modifier leurs valeurs donc je peux attacher une fonction à ces membres il y a un opérateur donc par exemple je peux utiliser en parallèle donc là je définis que pour tous les pixels ça c'est un opérateur qui définit que pour tous les pixels ma fonction et ça c'est la fonction MandelBlood qui est en fait définie dans un fichier KL donc si j'ouvre ce fichier il est ici donc là on n'est plus dans le piton c'est du KL code donc le KL code c'est très simple mais les les variables sont typées donc là vous pouvez définir des types donc là ça a été copié depuis internet c'est pour créer une fractale donc le code est là et ce code est utilisé par un autre piton directement donc quand on est là le node va on crée un binding entre le data qui est défini dans piton et l'opérateur qui est défini en KL donc voilà donc je pense que je suis arrivé au bout 3 secondes voilà