Dual Universe |Dual Universe Challenges techniques création monde virtuel "single shard" | April, 2017

Originally Presented at Devoxx France [1] (https://www.youtube.com/watch?v=wFy5yKLWr8g). Transcribed/Translated by yamamushi and John6739.

French transcribtion by Elildar.

English Transcript [ edit source ]

0:00: Hey guys, good morning, my name is Jean-Christophe Baillie, thanks to be so many today. We are going to talk about Dual Universe. The first online virtual reality civilization. I know, the title is quite ambitious, right? I want to talk to you about a passion, about one of my dream, a common dream shared by gamers, which is to build a very reallistic virtual world with no artifacts without loeading time, without instances, an immense world shared by everybody. In that world, gamers, we could call participants, can create an avatar, creat stories and create their gaming environment, their social interaction, their town, buildings, everything.

1:07 It's incredibly ambitioous. Who among you know this book: “Ready player One”? It is a best seller in the United kingdoms and the United states. A movie is being made based on it by Spielberg, I think.. It tells a story of a virtual world. I could select other movies or books, like The Matrix. Several books or movies are based on this idea to be immersed in an alternative reality, very realistic. Dual Universe is a game, and MMORPG, we are between Eve Online, Minecraft, etc... You will see why, very soon. This is clearly an MMO.

1:51 The big idea behind this is the content generated by users. Users will be allowed to do all sort of things, with a emergent gameplay, we do not propose quests or constraints. We will bring mechanisms that allow players such as building their own political systems, economy, spatial ship, markets, war... Instead of developping explicitly what players can do, and the game content.

2:42 we give a platform for users to create their own content, and to regulate it, instead of creating static content for them. We will talk more about it when we will be looking at Emergent Game Play. Let us see a quick trailer of “Dual universe”. What we see here is Massively multiplayer, it's what we call a single shard universe, which is one single cluster server where all the players connect to. There is only one instance of the universe. It is built incrementally, according to the content the users add. Let us see more images of the trailer. So. Here I am moving around, let me accelerate a little bit. It is real time, and everything can be edited.

4:25 Let me create a hole. I can also create geometrical objects, and so on. The user can get resources through mining of planets. Everybody departs from the same planet. The starting planet is called Alioth, with the Arkship... Look at this orbital station, it is about 8 km long. It's huge. Planets and spaceships are technically the same. Look at this object, it is a planet a king of huge spaceship. It is about 20 km of diameter. It was made a bit smaller than real planets, to be more convenient to play with, there is a huge surface. And everything is in real-time.

5:20: As you can see, I am all alone here. As we will see in the coming videos, there can be thousands of people walking around, continuously, without loading times. The images are rendered dynamically, with a LOD mechanisms, we can control the resolution.

5:55: We can compute the texture of objects at a more slow speed, based on what resides on the planet. This mechanism is updated regularly. For example, we captrure geometric forms from the surface made by players, and everything is visible from the space. It is quite realistic and exciting for players. There is no cheating we can really do what we want in this world.

6:20: Planets we see from the ground really exist, we can go to it. You have probably seen a lot of games such as No Man sky, Star Citizen, Elite Dangerous, and so on. The most interesting thing in our game is that everything can be edited, it's way more complicated, but very interesting. A lot of techniques used in games today, given that we have information that is given and that does not change, cannot be used here. Here we have to dynamically adapt.

7:00 When I go to a planet I have never been to, I can’t know what I will stumble upon. I might know that the content was not modified by anyone. In that case, we fall back on classical procedural generating techniques. But when something has been modified, then we have to send a request to the server, to re-compute everything. We cannot precalculate the world.

7:35 It might seem like something you already saw, but, a lot of very innovative things are being done behind the scene, in terms of gaming experience,. It's very interesting about gameplay, and the kind of things one can do.

8:04 You can also see all these trees. Those are imposters. Here, we are using a rendering technique, that allows us to display several billboards, and 2-d images that look like 3-d images from a far distance. This spaceship can completely be edited by the user. This is the Arkship. According to the story of the game, the earth will disappear by a neutron star. The United Nations makes Arkships that last five hundred years. These Arkships are sent to humanity that is spread all over the universe. And you are one of these groups that arrive in the Akrship called the Nova Ark. And you arrive on this planet to rebuild its civilization. Nothing less!

9:01 Let’s talk a little bit about Novaquark, the company that I founded, that implement this project. We are a startup of 25 people. We have investors. We are based in Paris. We also have an extraordinary community that we developer, and which has supported us in a Kickstarter which was a very big success. We are the third biggest Kickstarter of games in the world last year. This is quite exciting for us. Because we are not a big company, with the Nth version of a known game, or with superstars from the video games. We are the underdogs, with a big technical potential. We strive to be innovative in an industry that wants to step up. You know there are not so many innovations in the MMORPG type. As Entrepreneur, I think, it's an industry that wants to be disrupted. It's something to do, cause now there are algorithms we developed, and infrastructures such as bandwidth, and scalability abilities of servers, as well as powerful client machines that make a lot of things possible. We went accross limits, this now allows us to go forward on the MMORPG type and be the first.

10:58 Again, we are not a big and famous gaming company, so this is quite a big success for us. We have a very active community, which is fantastic. We have a website: community.dualthegame.com. People can create organizations called Guilds. We will come back on that later. It is part of emergent game play. We have around 1300 of them that have been created. Some of them have more than 400 members. This is quite big, especially for a game that has not come out yet. Players never tested it, so it's very impressive and encouraging!! The press talks a lot about our company, we received prices. Voilà, here you have this website, you have the organizations, they all role-playing, some have constitutions, it's incredible.

12:00 Our team is composed of both game and tech experts. We are working to have the game out by the end of 2018. We are planning on having an Alpha version by the end of September.

12:24 How do we pull this off? We have some issues to solve. First of all, we have to solve the problem of the single shard cluster. Our friends of CCP, the company that developed Eve Online, came close to solving this problem. They were quite exceptional. That was more than ten years ago. They are the ones who made Eve Online.

13:00: Their approach is that it's a single shard universe with a single reality. But the system is static and divided into solar systems. When one of these systems, or zone is full, it is closed, and then the user is put on a queue or sent to the next one.

13:32: This is already not bad. You already have a single shard universe. You have global financial markets. So, there is a lot of emergent things that are quite spectacular. Using this model, if we consider the space unit to be a planet, then we will have planets with people in the order of thousands simultaneously, and that will be it.

14:00: In that case, this model will not work with what I showed earlier. Let’s see a video that explains the concept. The main problem is: how are hundreds of thousands of people going to be in the same city simultaneously? That is what we are trying to solve. In the Techno, we have the planetary voxel engine, which allows the customization of the environment, and also to propagate up the details about the modifications being made. In such a way that if you build something huge, the details are apparent from a far distance.

15:00: We also allow you to see your modifications in real time. We actually go further than this basic model. Our major problem is, if you have 100,000 players in the game, what will happen if they all meet at the same location? We are trying to solve this challenging technical problem. We also have a second important technology, it's the voxel system, at the planet scale. This techno allows you to modify the environnement as you want, and at the same time to propagate to higher levels and to other players all the modifications you are doing. In manner that, if you do a enough big hole in the planet, it will be seen from space by others. Everything is done seamlessly. We go way forward to the basic problem which is the update of positions of the different entities in the game. We are able to synchronize the physical environment in the game, knowing that it can be fully editable. We used well known technologies such as techno voxel. But we also add several new layers: server, etc...

16:00 lets now take a look at a concept called dynamic space splitting. You can see points which are users that are gathering, and as a result their densities are increasing. Each cube seen here represent physical servers. The idea is to dynamically assign more machines where the user density is increasing, by recursively dividing the space. Thus we mobilize more physical server where there are players, and all this happens seamlessly without the client knowing, no change of IP or something like that... So, we have the ability to use server power where it is needed the most. For example, you can have only one guy in one solar system, thus only one physical server will manage this solar system, or several players on the same space location, which will be managed by several physical servers. In fact one physical server can be assigned to different areas to exploit all the server power we have. We then, have a central server which is on top of all the other servers.

17: 02 : You see here the second crucial aspect. We can see that, people who are far from us are updated less frequently. It's not new, but we do it very efficiently. This allows for an efficient use of bandwidth when there are many people around you. Here you have an example, the video is laggy, but it's the assets' movements which are not optimized. It is practically possible to easily render a thousand people around us. The interesting aspect is people close to you are updated 10 times per second.

18:06: People that are far from us are less accurate. And that is ok, since we are not doing an FPS, or any sniper related game. We have a system of "lock and fire" when you shoot on someonen then the consequence (Ed. damages) of this shot will be calculated according to all the specifications of your equipments, fire power and defense power. We had to do some kind of tradeoffs.

18:32: This guy you see here, was not really there, he might be a bit farther. But in general, we what you see, you have this feeling of crowd. If the density increases as the camera is moving closer, we also see less far, and vice versa. This, I believe, is an innovation in these kind of MMO games. Here we where looking just at a very local area, but in theory we could fill of players the whole planet you see now without problem.

19:07: Of course, I won’t go through all the technological details of the implementation, it is kind of a secret. I just want to go through the generalities of why we are different from instance based systems, or Eve Online.

19:47: Lets dive a little bit deeper. We are using actor based programing used in Erlang. We have also started using Scala/AKKA, but then we gave up. Cause we are using a lot of codes that are running on both the server and the client. The client is obviously written in C++. We kind of did not have much of a choice, since we were using a C++ based engine. We did not want to move back and forth between Java and C++. So, we finally opted for a C++ based server, which could afraid some people. We actually used what I usually call C++ minus C. We don’t use C related structures, such as pointers and so on. We instead use smart pointers, Containers, Lambda, and so on.

21:06 We also used a new C++ library called LIBCAF which implements the formalities of ERLANG.

21:25. Here in our codes, we have an actor called Mirror that sends back what is sent to him. Ask you can see, the syntax is nice. We send him a “hello word”, and we wait for a few seconds, and we use lambda expressions to filter the response based on the type of what was sent. We then print it on the screen. An actor is basically a behavior that assigns to each message the action that has to be taken. So it is much closer to Erlang. Syntaxically too. The behavior returns a string when it receives a string. It's very nice. This library was developed at Hamburg university. There is a lot of people working on it, and it is updated frequently. I think it is interesting when you are working with an Actor based paradigm. Just as a reminder, an Actor based system is the principle that brings scalability to your project.

23:06 But there is a huge constraints, it is important to understand that Actors can only communicate with each other through messages. There is no concept of shared memory. It does make things a little bit complicated, but it is the price to pay for scalability. With this approach, your actors can be moved to any environment. You can abstract all the network layer and be focused on you actors. Actors can send messages to other actors wherever those are. You can rack servers as you want. I think this library is a must, when you want to do an Actor based programming in C++, I do not thing there is something equivalent in C++.

24:17 It is still C++, It is different from Erlang, you cannot hot swap codes. But, you can really do everything else in Actor based programming using this library.

24:39 Now, let’s look into Voxel, the second major technology here. Voxels are not new, and I am not talking about Minecraft’s Voxel, which is very basic, every Voxel is a cube. The goal of the game is to smooth these cubes in order to have more naturally looking curves. These are not new Techno’s. It is heavily used in medical imagery. We have the following Techno’s that help us to smooth our cubes: marching cubes, extended marching cubes, and dual contouring. Dual contouring, is not related to Dual Universe, Dual is the mathematic formula.

25:47 Dual contouring which uses Hermite Data Fields, allows us to have sharp angles in our smoothing. Black and white on the figures respectively represent the presence and the absence of matter. The goal of the game, again, is to build the cubes using these information. In the marching cube technique, when the color of a segment changes, we find an intermediary point and we connect those points. With marching cube, everything is round. We can’t have a right angle. It's really limited.

27:00 Extended marching cubes goes further and compute the normal of each isosurface, that is calculated on the surface separeting the 2 areas. Dual contouring uses this information to compute a point in each square, using information of the normal. This prevents the loss of information. For example here, we are able to represent the fact that there is a sharp corner. This is very useful in an environment where you have walls, and you want to build houses. We can use these techniques to represent the junctions between walls.

27:56 Lets look at a video that illustrates this concept. It is not perfect, because as we can see we don’t have the feeling that the surfaces are smooth enough. To solve this problem, we can use shaders, to give this feeling of smooth surface. We can build any kind of shapes we want, they don’t have to be cubes, in comparison to Minecraft. The frames used to build different shapes have limits based on the grid. This grid is 1 meter for planets, and for user’s constructs, it is 25 cm. Which is already confortable, you can have nice details in your stuffs.

28:48 There are other games that are not MMO’s, that use dual contouring too. Dual contouring can be used for sculpting too. Voxel "menseurs" (Ed. not sure about the English translation) the term used to describe those who use Dual contouring for sculpture. You can see here the objects that were built using Dual contouring, with this grid calculated after dual contouring. The smoothing was applied afterward. Behind the scene, we have cubes, in fact, this is Minecraft ++, but with the illusion that we are in a smooth world. Details are important. We have to worry about the details of the scenery at different scales. The challenge is to build frames (Ed. with dual contouring) at each different scales or levels. We use dual contouring to reconstruct the mountains, at a level of details that can be computed and displayed. We cannot have a resolution of 2 cm on a planet scale... you can see why.

29:30 There is a lot more work to do, even though we have a working product. We are not done yet. We still have lots of R&D to achieve, to solve the problem of propagation of information between leveles, for example. In this project, we use dual contouring in an extensive way.

31:00 When a modification is done, in the server side, we define a region where that change has been made, and we render just that region, leaving the other regions unchanged. The challenge is in displaying all the details in a scalable and real manner.

31:30 I talked a lot about technology, but there is also something essential here, it's the Emergent Gameplay. The concept behind this is that, we are not really doing game design, but Meta game design. Here, we define rules, and by respecting these rules, palyers will create things that we can have in a more classical gameplay experience.

32:07 For example, we don’t have quests, but, in the game we have the equivalent of the job market. When a company might need miner to harvest resources to build the Death Star, for example. This is a quest. Instead of having developpers asking miners to harvest, and expect them magically to obey, we have an environment that uses the same rules as in real life to reach goals. Here we use the concept of a company that hires workers and gives objectives to other players. This is an essential feature.

33:22 Not everybody needs or have to be entrepreneurs. We just need a few people to want to come up with big projects, so that the other majority of players can get involved, through these systems of job markets. I will take another example of spaceships building. You can mass produce them and then sell them on the markets.. We just need a few geniuses to build extremely good spaceships so that all the other players can benefit. The problem of User-generated content is that, users do not always build good looking objects, look at Minecraft buildings, there are goods and bads...

34:11 Here, the best objects built by users will be automatically selected by the community.

34:24: Let me come back to building objects. We can build spaceships, buildings, cities and so on. In the video here, we are using what we call a Core Unit to build a spaceship. A Core Unit is what is given to us by the system as a starting point, the seed. When a Core Unit is generated, a unique local frame of Voxel is created. This Voxel frame is independant to the planet. In fact, we don’t have a unique voxel frame with all the objects in it, but rather, several voxel frames that are hierarchically related to each other.

35:18 Here, we are building a jet-fighter. We position a cockpit, as you want. The key idea is that a construct is actually a voxel infrastructure that gives a skeleton. And, we then add other Elements on top. These Elements are building blocks that NovaQuark develops, each with a specific function. We have a cockpit, fuel tank, a weapon, reactors and so on. The elements are physically based, engines push and you have to coordinate them to make fly you starship. We then use Lua coding to coordinate the interaction between these Elements. The users can code the interactions in Lua. Because it is challenging we'll also propose an auto-configuration system that will create basic coordinations between the engines of a spaceship for example. The player is free to change and improve this basic scripting, such as scripting a sudden avoidance manoeuvre for better positioning of the spaceship weapon toward the adversary spaceship....

37:00 Here, we place the fuel tank. The videao here is quite old, but the concept is sill the same. Here we position the reactors. We also add decorative Elements to make it looks good. We can paint the voxels. We can do a lot of exciting stuff and express your creativity.

37:32 these are small engines that control the direction of the spaceship. It’s realistic, but not too much, because to design a real fighter you have to work at Dassault (Ed. Boeing). But it's sufficiently reallistic to have a challenge in-game.

38:10 Lets get into our cockpit and take off. I can do everything I want. I can build a small fighter like this one, and I can even build this huge orbital station using the same principles.

38:37 Here we build something more ambitious. It's a huge cargo spaceship that can carry other spaceships. It took us five to six people from our team to build this. The video is quite long, we will leave it for the fan to watch. It could take you weeks to build this thing! Because here there is no resource collecting limitations, and no problem of securisation of the building site from enemies. It is quite challenging to build this kind of huge structure!

39:40 There we go. We have our spaceship ready. The asteroids is also made of Voxels, so we can mine it.

40:05 Let’s talk about Lua scripting. In Lua scripting, each Element exhibits two things: events that can emit (For example sensors...), and methods that can execute fucntions . Each Element will be described by the type of events it can achieve and the actions that object is capable of doing. You can plugged Elements into slots that we can name. The DPU (Ed. Distributed Processing Unit) is what we can customize to obtain an action. The DPU is contained within a Control Unit. The Control Unit has a set of named slots where we can plug in our Elements. We then write codes to appropriately select the actions to Elements plugged into our Control Unit. You can apply filters to information comming from the Elements connected to the Control Unit. It's quite simple. There is not limit on what we can do with this. We could have timing events that we can catch and handle according to what we want.

41:41 Lua script executes on the client side, and only has access to the methods authorized by the objects. We will also introduce a control on the frequency of updates the script can do. These updates are nothing but messages sent to the server. We will have to shield our script well, so that it does not do anything we don’t want. All that to avoid any abuse...

42:17 If the client is not connected, his code cannot work. Fair enough. We don’t want to return tier codes on our server. It is a bad idea.

42:38 I will go a little bit faster, because there is not much time left. We have organizations that are a generalization of Guildes. They can be organized into legates and members. Legates can vote, create member functions, and so on. We tried to generalize what is a Human organization, in a manner, that the user can use this template and define their own organization in a more specialized way. For example, they can define a corporation, a nation, and so on. This is Emergent. It's a way to create politics.

43:12 We have a Rights and Duty Management System (Ed. RDMS) which is not far from what we use in real life. We have assets that have the power to do certain actions. For example, the right to open a container. Each power has tags, which are represented here as keys. Users can be assigned tags, which are keys to execute the power of an asset. And you will be able to exercise power over an asset if you at least have a tag that corresponds to the tag of the asset. This is emergent too. you can create sophisticated RDMS, tags are hierarchically structured, there are ways to avoid the micro-management.

44:11 Economy is realistic. For those who know EVE Online, it is exactly the same concept. You have markets with buy and sell orders. You have an equilibrium which is dynamically achieved around the demand and the offer. The price of resources will be determined automatically and dynamically according to the offer and demand.

44:44 I think this will balance the gameplay. For example, if players do not want to mine, the price of minerals will go up, and players will be forced to mine.... I skip the territory management...

44:57 I will jump write to conclusion. There is still a lot of work to do. As I already said, I have to get the game out to the public by end of 2018. It is a very ambitious project, with a lot of technical challenges, ti's really exciting. We recruit. You can browse our website at the address shown on the screen (Ed. dualthegame.com). We really want to innovate in the MMO world. We might not make it, but it is worth trying to create this virtual world where players can build their own civilisations.. Thank you.

French Transcript [ edit source ]

0:00 - Bonjour, je suis Jean-Christophe Baillie. Merci à tous d'être venu si nombreux.

Alors, on va parler aujourd'hui de Dual Universe : "The first online virtual reality civilization" - Ca c'est un titre ambitieux, hein !

0:14 - Heu, en fait je vais vous parler surtout d'une passion, d'un rêve que j'ai et que je crois (si certains d'entre vous sont gamers), je crois c'est un rêve qui est partagé par beaucoup de gamers. C'est cette vieille idée de construire un monde virtuel qui soit très réaliste, sans coutures, sans chargements, sans artefacts, sans instances. Quelques chose qui soit vraiment un monde à la fois très grand, mais partagé par tout le monde dans lequel les joueurs (on pourrait peut-être appeler ça les participants) vont être capable de s'inventer des histoires, de se créer un personnage et créer réellement leur environnement de jeu, leurs interactions sociales, leurs constructions, leurs villes, etc.

1:00 - C'est incroyablement ambitieux, et c'est pas nouveau. Bon là j'ai pris un livre, je sais pas heu. Qui parmi vous connais ce bouquin, par exemple ? C'est intéressant de voir. C'est pas très connu en France, mais c'est un gros best-seller en Angleterre, aux Etats-Unis. Spielberg est en train de l'adapter, je crois, en film. Et ça raconte une histoire de monde virtuel. Mais j'aurais pu prendre Matrix ou beaucoup de films ou de livres qui jouent avec cette idée de nous plonger dans une réalité alternative très réaliste.

1:29 - Alors on est bien sûr sur le créneau des MMO. Dual Universe, c'est d'abord et avant tout un jeu vidéo. En terme de positionnement, on est quelque part à la croisée de Eve Online, de Minecraft, ce genre de jeu, vous allez voir pourquoi tout de suite après.

1:49 - La grande idée, (...) le fil directeur, c'est le contenu généré par les utilisateurs. C'est à dire que, vous voyez, on introduit dans le jeu, dans cet univers la possibilité pour les joueurs de faire tout ça de manière émergente. C'est à dire qu'on va pas avoir des scénarios, on va pas avoir des quêtes, on va pas avoir des choses contraintes. On va avoir plutôt des mécanismes qui permettent aux joueurs de construire leurs systèmes politique, de construire (physiquement je veux dire) leurs villes, leurs vaisseaux spatiaux, leur économie (de l'organiser comme ils veulent), du commerce, la gestion de territoire et bien sûr de la guerre. On vit dans un jeu, et on peut se taper dessus aussi.

2:29 - Donc ça fait partie de cette idée que plutôt que de construire vraiment explicitement ce que les joueurs vont avoir à faire (créer le contenu en fait), on est plutôt une plateforme qui va mettre en place les mécanismes qui permettent aux joueurs eux-même de créer leur contenu, et puis aussi de le réguler, de l'équilibrer. (On en parlera après quand je reviendrais sur le gameplay émergent)

2:50 - Je vous propose de regarder à quoi ça ressemble. Donc, petit trailer (très rapide) de Dual Universe :

2:55 - TRAILER

3:25 - Alors, on insiste sur "MASSIVELY MULTIPLAYER", parce que tout ce que vous voyez là (et je vais en reparler), c'est un des points principaux de cette présentation. (...) C'est ce que l'industrie appelle un "single shard". (pas "single shared", mais "single shard") Ce qui veut dire que vous avez un seul et unique (...) "cluster" centralisé, et tous les joueurs se connectent sur le même (...) "cluster". Il n'y a pas plusieurs instances, il n'y a pas plusieurs versions de l'univers, il y en a 1 seul, et il évolue au cours du temps de manière incrémentale en fonction de ce que les joueurs y font.

4:00 - Donc c'est très ambitieux, je vous montre ces quelques images (parce que le trailer est un peu court et on a quand même un petit peu de temps) de ce à quoi ça peut ressembler. Donc là je me balade un petit peut, je passe en accéléré, hein. Vous voyez, alors tout ce que vous voyez là bien sûr est temps réel, et tout est éditable. Je pense qu'à un moment donné je vais faire des trous. Voilà, hop! Là je pose des formes géométriques, qui peuvent être assez quelconque. On vient de le voir à l'instant là. Là je fais des trous. Vous voyez l'idée.

4:28 - Aussi c'est le point de départ pour les joueurs. Fondamentalement, ils vont collecter des ressources en minant, c'est à dire en récoltant les matériaux qu'il y a dans le sol des planètes.

4:38 - Ca c'est la planète de départ, qui s'appelle Alioth. Tout le monde démarre du même point, d'ailleurs (c'est une particularité, parce que notre technologie le permet), qui est l'Arkship dans lequel tout le monde est arrivé, etc.

4:49 - Vous voyez cette station orbitale ici, (...) elle fait à peu près 8 km de long, c'est absolument monstrueux. Il n'y a pas vraiment de différence en réalité technique entre les planètes et les vaisseaux. C'est géré de la même manière. En fait cette planète c'est un énorme vaisseau qui doit faire une vingtaine de kilomètre de diamètre. Elles sont un peu plus petites, évidemment, que les vraies planètes. Enfin "évidemment", pour des raisons de game-play et aussi des raisons techniques. Mais c'est quand même très confortable, hein, il y a de la place.

5:18 - Et vous voyez tout ça là, en temps réel. Bon là, je suis tout seul, mais il peut y avoir (on va voir quelques vidéos tout à l'heure), pour illustrer, il peut y avoir des milliers de personnes qui se balades (etc.), de manière (encore une fois) continue, sans instances, sans écran de chargement.

5:35 - Vous voyez comme les décors se chargent progressivement. Avec les mécanismes de gestion de LEV, qui permet évidemment de contrôler la quantité de détails qu'on affiche. Vous ne pouvez pas, bien sûr, afficher toutes les informations à cette taille là. Ceci dit, on a un mécanisme qui permet de calculer des textures avec, évidemment, un rythme plus lent, mais qui permet de calculer des textures de la surface de la planète sur la base de ce qu'il y a effectivement dessus, et qui est mis à jour régulièrement de telle sorte qu'on voit (en fait) là une sphère mappée de l'espace.

6:14 - Un peu plus qu'une sphère, puisqu'on capture quand même la géométrie. C'est à dire que si (d'aventure) quelqu'un s'amusait à faire un énorme trou dans la planète, ce qui prendrait probablement des mois, parce que c'est assez réaliste ; hé bien on le verrait depuis l'espace. Ça c'est assez bluffant et je pense que c'est assez excitant pour les joueurs. C'est à dire qu'il n'y a pas de triche, quoi ! On peut vraiment faire ce qu'on veut dans ce monde. Quand on voit une planète depuis le sol, une lune, bien elle est vraiment là. Elle existe vraiment. On peut vraiment y aller.

6:42 - Alors vous avez peut-être vu des choses. Je veux dire, il y a plein de jeux en ce moment, surtout dans le domaine Sci-Fi qui surfe avec ça. Entre "No Man Sky", "Star Citizen", ou heu... Il y a plein de choses. Je pense que ce qui nous caractérise et ce qui fait qu'en fait ça va être beaucoup plus compliqué et intéressant d'un point de vue technique (c'est une conférence technique aujourd'hui quand même), c'est que tout est éditable, donc beaucoup des astuces qu'on utilise habituellement pour "renderer" dans des jeux, sachant qu'on a là une information (finalement) statique. On peut pas vraiment les utiliser. On est obligé en permanence de s'adapter à ce qu'il y a vraiment.

7:18 - Quand j'arrive sur une planète où j'ai jamais mis les pieds, avec un client, je ne peux pas savoir ce que je vais y trouver. Je peux éventuellement savoir que personne n'y a touché. Dans ce cas là, on "fall back" sur des techniques de génération procédurales classiques. Puisque je sais qu'elle est standard cette planète, elle n'a pas encore été modifiée, mais dès l'instant où on arrive à un endroit qui a été modifié, vous voyez-bien qu'il faut que le serveur nous l'envoi, qu'on recalcule tout... On ne peut pas pré-calculer tout un tas de choses, etc.

7:46 - Donc, si vous voulez, ça a l'air d'être quelque chose que vous avez peut-être déjà vu, mais en fait, derrière la scène, c'est très très compliqué ce qu'on fait. Et, heu, c'est franchement innovant et très intéressant en termes de perspective pour le gameplay et le type de choses qu'on peut faire dans cet univers.

8:04 - Vous voyez aussi, là, tous ces arbres, derrière, en fait, sont des imposteurs, une technique de rendu qui permet d'afficher un très très très grand nombre de "billboard". C'est à dire des images 2D qui à distance paraissent être en 3D.

8:20 - Là, je vais revenir sur ça, je vais en passer un petit peu mais, tout ce vaisseau est bien entendu complètement éditable et modifiable par le joueur. Je commence à poser des choses dessus mais vous allez voir.

8:29 - Ca c'est le fameux Arkship. Heu, par rapport à l'histoire du jeu, en fait l'humanité va disparaître, la terre va être détruite par une étoile à neutron. Donc l'ONU fabrique des Arkships (ça dure 500 ans) et envoi l'humanité essaimer dans la galaxie. Et vous êtes un de ces groupes qui arrivent dans l'Arkship, qui s'appelle le Novark. Et vous arrivez sur cette planète pour reconstruire la civilisation. Rien de moins.

8:59 - Alors, un petit mot quand même sur Novaquark, la société que j'ai fondée et qui développe ce projet : On est aujourd'hui 25 personnes, on est à Paris. C'est une startup. Donc, on a des investisseurs qui nous financent.

9:13 - On a aussi une communauté extraordinaire, qu'on a travaillée, qu'on a développée, et qui nous a soutenu récemment dans un Kickstarter qui a été vraiment un grand grand succès. Ce sont des chiffres assez élevés pour Kickstarter. On a été en fait le 3ème plus gros kickstarter de jeux vidéo l'année dernière, dans le monde. Ce qui est d'autant plus exceptionnel (enfin pour nous), parce qu'on n'est pas un gros studio qui a déjà une "IP", (vous voyez), qui a déjà fait des jeux qu'on connaît bien et qui font la version d'après, ou qui auraient des super-stars du jeu vidéo dans leur équipe.

9:47 - On est en fait (finalement) un peu sorti de nul part avec nos gros sabots technologiques, et on arrive pour essayer de secouer un petit peu le cocotier du MMO et avancer sur quelque chose qui finalement, si vous réfléchissez, le MMO ça avance pas beaucoup niveau techno.

10:02 - Les gens se reposent quand même pas mal sur leurs lauriers et sur une approche à la World of Warcraft, majoritairement. Il n'y a pas beaucoup d'innovations. Donc moi, en tant qu'entrepreneur, mon sentiment c'est que c'est vraiment une industrie qui a envie de se faire disrupter là, où il y a quelque chose qui est à faire, parce qu'on a aujourd'hui des algorithmes qu'on a mis au point qui changent la donne.

10:23 - Et puis aussi, il faut être honnête, pour bien comprendre un "package", il y a aussi des infrastructures aujourd'hui en termes de bande passante, de technologie de scalabilité du côté serveurs. Même certainement de la puissance des machines qu'on peut s'attendre à trouver du côté de nos clients, qui font que (à mon avis) on vient de passer un cap où il y a certaines choses qui deviennent possibles en terme d'ambition de ce qu'on peut faire sur le sujet des MMO.

10:47 - Donc on essaye de franchir ce cap, d'être les premiers. Mais voilà, on n'est pas une boite de jeu vidéo connue, donc ça c'est un très gros succès pour nous.

10:55 - On a une communauté très active, qui est hallucinante. On a un site qui s'appelle community.dualthegame.com, il faut y aller. Les gens créent dessus des organisations, c'est à dire des guildes. On reviendra un peu après sur ce que c'est, ça fait partie du gameplay émergent. Mais on en a déjà 1000 (heu, je crois 1300) qui ont été créé (c'est énorme!), dont certaines ont déjà plus de 400 membres, pour un jeu qui n'est pas sorti et qui n'existe pas. Enfin, je veux dire, il existe bien sûr mais, du point de vue des joueurs qui n'ont jamais pu le tester, c'est assez encourageant.

11:31 - Voilà, la press parle de nous, on a gagné des tas de prix. Enfin, c'est super !

On avance.

11:36 - Oui voilà, c'était ça le site. Je vous invite à aller faire un tour sur ça. C'est assez sympa de voir comment cette communautée déjà s'approprie et role-play dans cet univers. Heu, voilà. Ils ont écrit des constitutions! Alors il y a les "Terran Union", il y a la constitution du truc! C'est absolument bluffant quoi!

11:56 - Heu, voilà pour Novaquark. Donc c'est une startup. On a des gens à bord qui sont à la fois des gens du jeu vidéo, mais aussi des gens de la techno, pour des raisons évidente (vous voyez bien). Et on essaye de développer ce jeu. L'idée, c'est de le sortir fin 2018 et d'avoir une alpha dès ce mois de septembre de cette année. Donc on a du pain sur la planche.

12:19 - Alors, comment on fait tout ça ? Parce que là, techniquement, ça a dû allumer un certain nombre de lumières rouges dans votre tête, ce que je viens de raconter, parce que, déjà pour commencer, un des problèmes fondamentaux, c'est de régler le problème du "single shard cluster".

12:38 - Alors, ceux qui s'en sont un petit peu approchés (quand même, oui, très bien approchés) et qui sont assez exceptionnels, enfin, je veux dire, ils ont vraiment fait quelque chose de spectaculaire, d'autant plus que c'était il y a plus de 10 ans maintenant, sont nos amis de CCP qui est la boîte qui développe Eve Online.

12:54 - Je pense que beaucoup d'entre vous connaissent, si ce n'est, ont joués à ce jeu. Et donc leur approche à eux, c'est un "single shard" avec une seule réalité, mais vous avez une division de l'espace statique en systèmes solaires (grosso-modo) qui est telle que quand une zone est full, étant donné les capacités de leur serveurs, à un moment donné, ça continue de grossir au fur et à mesure des avancées techniques, mais il y a toujours une limite, à ce moment là, la zone est fermée et vous êtes obligés de faire la queue ou de passer autours, etc.

13:26 - Bon, c'est déjà pas mal, parce que vous avez quand même un univers "single shard", vous avez quand même des marchés, par exemple des marchés financiers dans le jeu qui sont (en fait) globaux. Donc tout ça est assez important et fait que Eve Online est quand même à part dans le monde des MMOs, et assez exceptionnel.

13:44 - Vous avez beaucoup de choses qui se passent au niveau émergent dans ce jeu qui sont très spectaculaires. Mais néanmoins, ça reste... On va dire, si on prend ce modèle là et qu'on dit, par exemple, que l'unité d'espace c'est les planètes ; on va avoir des planètes sur lesquelles on peut avoir quelque milliers de personnes simultanément. 2-3000, 4000 peut-être si on est très très fort, mais après c'est fini. Donc, ce modèle là, il va pas fonctionner pour pouvoir avoir ce que je vous ai montré toute à l'heure.

14:14 - Et on va plus loin, je vais vous montrer une vidéo qui explique le concept. Mais c'est le problème prin... Alors, le problème principal c'est :

Vous avez 100 000 personnes dans le jeu. Qu'est-ce qu'il se passe s'ils s'amusent à tous se rassembler dans la capitale city en même temps.

Voilà ! C'est ça le problème, hein ! Donc, fondamentalement, c'est ça qu'on essaye de résoudre.

14:34 - Et puis vous avez cet autre volet dans les grosses techno qui sont derrière tout ça, qui est, on l'appelle le moteur planétaire, moteur voxel planétaire. C'est à dire, cette techno qui permet à la fois de modifier l'environnement comme vous le voulez, mais en même temps de propager, dans les niveaux de détails vers le haut, les modifications que vous faites. De telle sorte que si vous faites un trou qui est suffisamment gros, au bout d'un moment, à un niveau de détail élevé quand vous regardez de loin, bah il apparaît.

14:05 - Et tout ça de manière efficace, de manière centralisée sur le serveur. De telle sorte que quand vous êtes en train de faire des trucs, de creuser, etc., les gens autour de vous le voient aussi.

15:10 - Donc vous voyez, on va bien plus loin finalement que le problème de base. On va dire qu'il y a le problème de la mise à jour des positions des différentes entités du jeu, ou des tirs, etc. On a tout ce problème de synchroniser, finalement, l'environnement physique, sachant qu'il est totalement modifiable.

15:30 - Heu, intéressant! Alors, il y a des choses qui, enfin, on s'est basé sur des technologies quand même assez connues, bien connues même, sur les techno voxels, je vais en parler dans un instant. Mais on a dû quand même ajouter toute cette couche (on va dire) serveur d'interaction dont je viens de vous parler. Donc ça c'est les 2 grosses techno.

15:48 - Alors, on peut regarder une petite vidéo qui explique le concept de ce qu'on appelle le "DYNAMIC SPACE SPLITTING".

15:56 - Voilà le concept : (Vous avez...) En fait, ici les points c'est des joueurs qui sont en train de se rassembler, et leur densité augmente. Est-ce que vous voyez ? Chaque cube que vous voyez là, pour simplifier grossièrement, c'est en gros une machine, un serveur physique.

16:13 - Et donc l'idée c'est que quand la densité augmente, vous voyez que l'on subdivise récursivement l'espace (c'est un de nos tris) en zones de plus en plus petites, de telle sorte qu'(en fait) on mobilise plus de machines là où il y a plus de monde, de manière complètement fluide et dynamique.

16:27 - C'est complètement "shieldé", enfin "fermé" du côté du cluster. Le client, il parle toujours à la même IP, il est pas au courant qu'il se fait rebalancer. Mais il y a cette capacité à distribuer la charge là où on en a besoin.

16:40 - Et vous pouvez avoir un gros bout du système solaire dans lequel il y a 1 gugus qui se balade ; bah, il y aura 1 serveur qui s'occupe de tout le système solaire pour toutes ces personnes un petit peu éparpillées.

16:53 - Donc c'est très efficace en terme d'utilisation des ressources, puisque bien sûr, en réalité, une machine physique sert plusieurs zones à la fois, évidemment. Donc on est capable d'exploiter toute la puissance dont on dispose.

17:08 - Et vous voyez ici, un deuxième aspect qui est crucial, c'est que les gens qui sont plus loin de vous, on les met à jours moins fréquemment. C'est pas original, mais on le fait de manière très efficace. Evidemment on ne calcule pas les distances. Et donc vous avez (en fait) un effet où vous voyez que là les mises à jour sont beaucoup moins fréquentes. Et donc en termes de bande passante, si vous avez beaucoup de monde autour de vous, ça coûte pas si cher que ça.

17:32 - Heu, là vous avez un exemple... Alors c'est horriblement saccadé, pas à cause du serveur

ou quoi que ce soit, c'est les assets qui étaient pas optimisés. Bon, il faut qu'on refasse cette vidéo mais, peu importe, c'est surtout le nombre de gugus autour de vous qui est impressionnant. Vous voyez ici ce qu'il se passe côté cluster. Et, vous avez de l'ordre de, je crois, 1200 personnes autour de vous, tranquillement.

17:51 - Et évidemment, la propriété qui est intéressante, c'est de les gens qui sont proche de vous sont fluides, updaté 10 fois par secondes. C'est juste les types qui sont un peu plus loin là qui sont moins accurate.

18:02 - Et donc, comme on fait pas un FPS qui a pour but d'être très exacte sur les positions avec des trucs de snipers, on a pas cette approche là, on a simplement une approche de "lock and fire". Quand vous allez tirer sur quelqu'un vous le verrouillez, puis après vous tirez, et finalement il y a un lancer de dés qui détermine avec toutes les caractéristiques, votre équipement, etc., si vous le touchez ou pas.

18:22 - Donc on est pas tellement embêté par ça. Il faut bien abandonner quelque chose. On peut pas tout avoir. On est obligé de faire des "trade off". Et heu, le gars que vous voyez là, en fait il est peut-être pas vraiment là. Il est peut-être un petit peu plus loin, etc.

18:33 - Mais globalement vous les voyez, vous avez ce sentiment de foule. Et si la densité augmente, bah en fait l'horizon se rétrécit. Hein, vous voyez un peu moins loin. Il y a moins de gens au loin. Et inversement si la densité s'espace, vous allez voir beaucoup plus de monde, y compris des gens qui peuvent être assez loin.

18:50 - Voilà, et ça, je pense qu'on l'a pas vu souvent dans des MMOs. Sachant que bon, là on était en train de zoomer sur une petite zone de gens, mais on pourrait tapisser la planète de joueurs comme ça et en fonction de là où je regarde, j'aurais des informations qui sont locales.

19:10 - Donc ça, alors évidemment, le diable est dans les détails. Il faudrait que je passe deux heures à vous expliquer tous les mécanismes qu'il y a vraiment derrière. Et puis de toute façon, je le ferais pas parce que c'est un secret, quand même, de fabrication.

19:24 - Donc tout ça c'est grossièrement les idées qui font que ça vous permet de comprendre (en fait) en quoi on est différent d'un système à base d'instances, ou même de Eve Online. Et comment on peut approcher les problèmes dont je parlais tout à l'heure, et faire ce qu'on a pour mission de faire.

19:43 - Alors, on est dans une conférence un peu techno. Je vous parle un petit peu, quand même, de ce qu'il y a à l'intérieur :

19:47 - On a un modèle à base d'acteurs, heu, donc je pense que vous connaissez, hein ! Ça vient du nom d'"ERLANG".

19:54 - Vous avez aussi une implantation avec "SCALA/AKKA". On avait commencé avec ça d'ailleurs, mais en fait on a abandonné "SCALA/AKKA" parce qu'en réalité, (heu, enfin) ce qui est un peu particuliers (je pense) pour nous, c'est qu'on a beaucoup beaucoup de code qui est commun au client et au serveur.

20:11 - Le client est évidemment en C++. Heu, on peut pas vraiment faire autrement quand vous avez plein de librairies qui vous utilisez. Et notre moteur est en C++, donc bon bref, client en C++, l'affaire est conclue.

20:24 - Et comme on a du code commun entre le client et le serveur, on s'est rendu compte (en fait) que faire des ponts entre Java et C++, c'était quand même pas une bonne idée.

20:33 - Et finalement on a opté pour un serveur en C++, ce qui peut paraître se faire assez peur. Mais en fait, d'abord on utilise ce que j'appelle souvent C++ -C, c'est à dire qu'en fait on s'interdit toutes les structures de C. Y’a pas de C, y’a pas de pointeurs, enfin je veux dire, y'a pas de raw pointeurs dans notre code. C'est strictement interdit. On a pas, tous les trucs, heu, crado là, qui sont en fait de l'assembleur déguisé.

21:01 - Non, on travaille à plus haut niveau. On utilise bien sûr des "smart pointeurs", des "container", des "lambda", etc. Et on utilise, pour la programmation ACTOR BASED PROGRAMMING, on utilise une bibliothèque qui s'appelle "LIBCAF", qui est vraiment assez sympa, qui est relativement récente, et qui implémente le formalisme "ERLANG", (on va dire) en C++ moderne.

21:20 - Vous avez un exemple ici de ce à quoi ça ressemble :

Ici on spawn un acteur qui s'appelle "mirror", en fait c'est un acteur qui renvoi ce qu'on lui envoi. Et là on fait un petit exemple avec "Hello world!" qui va se brancher sur son "buddy", donc sur l'acteur qu'on vient de créer. Et vous voyez que la syntaxe est assez sympathique.

21:39 - Là, ici, on va requester à "buddy", et on va attendre 10s, et on va lui envoyer "Hello world!". Et puis quand ça revient, heu bah en fonction de ce qui revient, donc là on peut en fait filtrer sur la base de "lambda" qui vont filtrer tout simplement sur la signature des types de ce qu'on lui envoi. Et là on fait un truc, quoi ! Genre, on "print" le machin.

21:59 - Et que fait "mirror" ? Bein lui il créé un "behavior", donc c'est... En fait quand on définit un acteur, il suffit de retourner un "behavior", qui est en fait une description de l'ensemble de toutes les associations entre des messages et la réponse qu'on y apporte.

22:11 - Vous voyez, donc c'est très très très proche d'"ERLANG". Et même syntaxiquement, bon bein ils ont utilisé la surcharge, ils ont utilisé tout un tas de mécanismes pour que ce soit assez sympa.

22:20 - Donc là, voilà, on retourne une "behavior" qui dit que quand je reçoi une string, je retourne une string, et heu, en gros je retourne la string à l'envers. Et heu, j'ai pas le run de ce programme, mais vous l'avez compris, il écrit "Hello world!" dans l'autre sens.

22:34 - Bref, donc là c'est assez sympa. C'est une bibliothèque assez sérieuse qui est développée par des gens à Hambourg dans une université. Donc il y a beaucoup beaucoup de suivi, il y a beaucoup de gens qui travaillent dessus. Et je pense que c'est intéressant, hein, si vous êtes, heu... si vous travaillez avec un paradigme Actor Based.

22:56 - Je rappelle (hein) pour ceux qui éventuellement ne connaissent pas, Actor Based (le principe, hein) c'est ce qui apporte la scalabilité, justement, dans ce que vous développez. Ce qui est une grosse contrainte, c'est que vous acteurs qui sont, en gros, (on va dire) des objets ; ils ne peuvent communiquer les uns avec les autres que par des envois de messages.

23:12 - Et il n'y a absolument pas de mémoire partagée, ou de quoi que ce soit. Donc, chaque objet vit dans son espace, et vous êtes obligé de vous envoyer des messages pour faire quoi que ce soit.

23:22 - Alors ça rend tout un tas de choses plus compliquées, mais cette complexité, en fait, vous ne pouvez pas y échapper, parce que c'est le prix à payer pour avoir la scalabilité.

23:30 - Puisque, avec cette approche là, vos acteurs peuvent vivrent sur n'importe quelle machine, et le travail de "LIBCAF" ou "SCALA/AKKA", etc., c'est de vous abstraire de toute la couche réseau. Vous êtes pas au courant de ce qu'il se passe, vous envoyez des messages, (etc.) à destination d'acteurs ; peu importe où il se trouve, ils le recevra et y répondra.

23:48 - Donc c'est un paradigme qui est très contraignant, mais du coup cette contrainte vous apporte une propriété qui est essentielle, si vous voulez vraiment faire des systèmes qui scale où vous rackez des machines et votre truc il prend la place qu'il faut.

24:04 - Donc voilà, c'est une bibliothèque assez sympa. Je crois pas qu'il y ai vraiment d'équivalent en C++ d'autre chose. Donc c'est un peu, si vous faites de l'Actor Based Programming, c'est à mon avis le passage obligé.

24:19 - Voilà, donc, ça reste du C++, donc on a pas, on utilise pas comme "ERLANG", on peut pas swapper du code à chaud et des trucs comme ça. Toutes les applications n'ont pas non plus besoin de cette feature de l'Actor Based Programming. Et vous pouvez quand même faire déjà à peu près tout ce que le paradigme propose avec cette bibliothèque.

24:40 - Deuxième grosse techno : les voxels

Donc, cette techno permet d'éditer le monde. (Heu, fondamentalement...) Alors, les voxels, c'est pas du tout nouveau. Je parle pas des voxels Minecraft, en faisant des cubes. D'accord, ça c'est la version vraiment la plus simple de la notion de voxels. Vous avez, heu... Ok, bon bein, chaque voxel c'est un cube et heu..., on l'affiche, point barre.

25:05 - Et en fait ce que... On peut aller plus loin que ça. Et heu, le but du jeu c'est de smoother (en fait) ces cubes et de donner des courbes qui soit un peu naturelles.

25:15 - Et vous avez heu... C'est vraiment des techno très anciennes, c'est pas du tout nouveau. C'est beaucoup utilisé dans l'imagerie médicale, par exemple. Et vous avez plein de techno. Voilà, j'en cite 3, qui sont des techno classiques pour smoother vos cubes : "Marching Cubes", "Extended Marching Cubes" et "Dual Contouring".

25:34 - Voilà, ils sont illustrés là. Je vais vous montrer comment ça marche. Donc c'est ça qu'on utilise, nous. Heu "Dual" ici n'a rien à voir avec Dual Universe, en fait le "Dual" est le terme mathématique, ici.

25:46 - Donc "Dual Contouring", qui utilise des "Hermit Data Fields". Donc je vais vous montrer ce que c'est, mais c'est ça qu'on utilise. C'est le... Si vous voulez, la propriété qu'on a avec ça, c'est que vous pouvez avoir des angles pointus dans votre "smoothing", paradoxalement.

26:05 - Heu, le "Marching Cubes", vous le... Alors voilà, ici on a une espèce de grille qui représente, en fonction de la couleur par exemple. (bah en fait c'est un index, hein mais) Là vous avez du blanc ou du noir qui vous dit s'il y a de la matière ou s'il y a pas de matière. D'accord, donc le but du jeu c'est de construire l'enveloppe de ce truc où il y a 3 bouts de matière, etc.

26:25 - Donc ici vous avez une approche classique de "Marching Cubes" qui va essayer de calculer un point intermédiaire entre les... Heu, chaque fois que vous avez un segment qui change de couleur, vous allez trouver un point intermédiaire et puis vous reliez les points.

26:36 - En fait le "Marching Cubes", tout est rond, quoi ! Et alors, tout fond. Vous avez jamais d'angle droit. Vous ne pouvez pas faire ce qu'il y a juste en dessous. Vous voyez ici que votre coin qui est peut-être celui d'un vrai cube, pour le coup, il va se retrouver tout fondu.

26:55 - Alors c'est une grosse limitation, et heu, donc y'a des modèles ici "Extended Marching Cubes" qui vont un peu plus loin, qui tirent des traits, etc.

27:02 - Mais là vous avez un modèle ici qui est celui qu'on utilise, qui est basé sur cette représentation là, qui ajoute sur chaque segment des informations de normale, qui dit, heu, voilà la normale de l'"iso-surface" (ça s'appelle), sur la surface que l'on essaye de calculer qui sépare mes 2 zones. Voilà la normale qu'elle a.

27:23 - Donc on voit ici, par exemple, les 2 normales de cette partie là et ici, on voit assez clairement cette partie là. Et en fait, il est capable de reconstruire... Ce que fait le "Dual Contouring", c'est qu'il calcule 1 point dans chaque cellule, donc dans chaque carré ici, 1 point en utilisant les informations de normale de telle sorte qu'on les préserve le mieux possible.

27:42 - Vous voyez qu'ici on est capable d'exprimer le fait qu'il y ai un bout pointu. Et ça c'est fondamental, parce que voilà, dans Dual Universe vous avez des murs, vous pouvez faire des maisons, y'a des coins anguleux partout. Donc vous avez besoin de ce genre de technologie.

27:59 - Voilà, donc c'est ce qu'on utilise. Ici une petite vidéo qui illustre ce que ça peut donner. C'est pas parfait, vous avez vu à l'instant la sphère, hein vous voyez, elle est quand même pas parfaitement lisse. Après, on peut rattraper le coup avec des shaders pour donner l'impression que c'est lisse, mais purement au niveau graphique.

28:19 - Et heu, ce que vous voyez là, ce qui est intéressant, c'est que (vous voyez) par rapport à Minecraft, on va beaucoup plus loin que les cubes, hein. On fait un peu ce qu'on veut, en fait, dans la limite de la résolution de la grille.

28:32 - Pour les planètes, c'est 1 mètre, la taille de cette grille que je vous ai montré à l'instant. Pour les constructs qui sont fabriquées par les joueurs, c'est 25 centimètres. Ce qui est déjà assez confortable, on peut exprimer quand même une certaine finesse.

28:46 - Et heu, en fait, on est pas les seuls à utiliser "Dual Contouring", hein. Il y a d'autres jeux, mais alors qui sont pas des MMOs. Donc en fait, qui partagent ça avec nous, mais ça s'arrête là. Heu, qui ont déjà exploré ça.

28:57 - Et en fait, on regarde ce que les gens font avec ces techniques là. C'est absolument hallucinant, et on parle de "voxelmanceurs", pour les gens qui font vraiment des sculptures littéralement très impressionnantes avec cette technique.

29:10 - Là vous voyez un peu l'envers du décor. Donc ça c'est la grille après calcul, après smoothing "Dual Contouring". Et heu, "behind the scene" en fait, vous avez des cubes (en fait), hein. Donc, c'est Minecraft++, mais avec cette capacité de donner l'illusion que vous êtes dans un monde smooth, à moindre coût, évidemment, puisqu'on pourrait faire des trucs beaucoup mieux, mais complètement pas tractable.

29:33 - Et surtout, on gère les niveaux de détails. C'est à dire qu'il y a... Heu, le défi c'est qu'on est pas vu sur une grille au "L.O.D.0" (Level Of Detail), à éditer des trucs juste devant nous.

29:42 - Il faut se préoccuper de construire des grilles de différentes échelles, à chaque fois x2, dans un autre tri, qui vont comme vous les voyez là, hein, qui vont reconstituer là des espèces de... On repose le problème "Dual Contouring" à chaque étage, et on reconstruit comme ça ces montagnes, etc. à un niveau de détail qui est tractable, qui fait qu'on est capable de le calculer et de l'afficher. On pourrait pas avoir une résolution de 2 centimètres là, vous voyez bien pourquoi.

30:11 - Donc, y'a toute cette... Vraiment, c'est très compliqué. Et d'ailleurs, on a pas fini, hein. On a quelque chose qui marche, mais on a en tête tout un tas d'améliorations. Il y a beaucoup de travail de R&D encore à faire pour gérer, par exemple, le problème de la propagation.

30:26 - Qu'est ce qu'il se passe quand je mets des petites barres les unes à côté des autres, espacées de la taille de la grille ? Vous reculez, au bout d'un moment bah vous arrivez sur un "L.O.D." supérieur. Votre grille, elle a changé de pas. Vous ne pouvez pas (en fait) afficher l'information des petites barres. C'est plus possible ! C'est vraiment impossible et il n'y a pas de bonne solution.

30:45 - Et heu, vous pouvez dire... Puis en fait, votre algorithme, en toute généralité, il ne sait pas que c'est des petites barres. Donc il peut même pas (en fait) dire : Bon bein ok, je vais remettre des barres, mais un peu moins fréquentes. Tout ça c'est..., ça scale pas (si vous voulez), par rapport à la généricité du problème.

31:00 - Donc, très intéressant. On prend une vieille techno, on va dire ("vieille" enfin... bien connue) "Dual Contouring". Et on va, sur des sujets de scalabilité, de... Parce qu'en fait tout ça est synchro au serveur, donc quand je fais une modification à un endroit, on définit une petite zone dans laquelle, une sorte de "bounding box" qui dit où on a fait la modif, pour pouvoir propager juste ça. Vous voyez, y'a énormément de hack et le diable est dans les détails pour que tout ça scale et fonctionne en vrai au delà du modèle théorique.

31:33 - Alors, je vous ai parlé de techno. Il y a quand même un sujet qui est absolument fondamental dans ce qu'on fait : c'est le gameplay émergent.

31:40 - Le gameplay émergent, ça veut dire (comme je l'ai dit au début), c'est qu'on n'explicite pas vraiment, enfin, on fait pas vraiment du game design, en quelques sorte, on fait du méta game design. C'est à dire qu'on va décrire des règles dont la conséquence va être que, les joueurs utilisant ces règles vont faire apparaître des éléments qu'on reconnaît être du gameplay classique.

32:08 - Par exemple, on n'a pas de quêtes, mais on a dans le jeu l'équivalent d'une espèce de marché du travail (si vous voulez), où une organisation peut dire : "Bon bah voilà, moi j'ai besoin de mineurs pour m'aider à récolter des ressources, parce qu'on est en train de construire l'étoile noire." Voilà, donc y'a un job. Et ça c'est une quête, en fait.

32:27 - Et donc, au lieu d'avoir un magicien qui vous dit : "Allez chercher 3 champignons dans la forêt.", vous avez (en fait) un vrai humain, une vraie organisation, d'ailleurs avec plusieurs centaines de personnes probablement, qui met des objectifs par rapport à une vision, quelque chose qu'il veut faire, et qu'il met (en fait) publiquement accessible aux autres joueurs.

32:48 - Et ça c'est un principe aussi fondamental qui est qu'on ne s'attend pas à ce que tous les joueurs soient finalement des entrepreneurs qui ont des grands projets, qui ont envie de construire des trucs. C'est pas comme ça que ça va marcher.

33:01 - Il suffit d'avoir une petite proportion des joueurs qui ont le temps et l'envie de pousser un certain nombre de projets avec ces systèmes, type "job market", etc. qui permettent (en fait) de transmettre leurs intentions aux autres joueurs pour que les 95 autres pourcents puissent en bénéficier.

33:23 - Et je vois un autre exemple : si vous fabriquez un super vaisseau spatial, bein vous allez pouvoir le produire en série, et puis le vendre sur les marchés du jeu. Et il suffit qu'il y ai un petit nombre de petits génies qui fabriquent des vaisseaux absolument superbe pour que finalement toute la population des joueurs puisse en profiter, et que vous commenciez à voir proliférer des vaisseaux plutôt sympa versus des trucs quand même assez moche.

33:47 - Puisque le problème du "user generated content", si vous allez sur un serveur Minecraft open, vous allez voir que c'est quand même pas terrible. La plupart des gens font pas des trucs très bien, hein c'est pas... C'est dur hein, de faire du contenu de qualité.

33:59 - Donc en fait, vous avez besoin de ce mécanisme qui fait que les meilleures constructions vont être sélectionnées de manière complètement automatique par le système. C'est vraiment les joueurs qui décident de ce qu'ils veulent.

34:15 - Alors, je reviens sur un aspect fondamental du jeu, que j'ai esquissé, mais qu'on n'a pas vraiment regardé, qui est la construction. Le fait qu'on peut fabriquer des vaisseaux, des villes, enfin, des bâtiments quoi !

34:26 - Heu, là ici, on construit un vaisseau en déployant ce qu'on appelle un "core unit" qui est en fait le point de départ (si vous voulez), la graine, qui va techniquement, en réalité, quand je déplois un "core unit"... "Quand tu veux, va-y !"

34:41 - Heu, bon ! Quand je déplois donc un "core unit", ce qui ne va pas tarder, et bien on créé une grille locale. On crée un repère local de voxels qui n'est pas la planète et que le système va gérer indépendamment.

34:56 - Donc en fait, pour être plus précis, par rapport à ce que j'ai dit tout à l'heure, on a pas une grille voxel avec la planète et tout l'univers. On a en fait plein de grilles voxels qui sont gérées toutes les unes par rapport aux autres, qui peuvent avoir des relations de hiérarchie, etc.

35:11 - Bon, je vais passer un peu plus vite, parce que c'est une vidéo qui est assez longue. Mais là, en gros, on est en train de construire un petit "jet-fighter". Donc on positionne un cockpit, n'importe comment. Hop, on va le... Je pense que là c'est pour montrer le "undo". Et, heu...

35:28 - Alors là, l'idée clé, c'est que, c'est quoi un vaisseau, enfin une construction ? C'est une infrastructure voxel, qui donne la forme, l'enveloppe, d'accord, le squelette. Et par dessus, vous allez coller des éléments, qui sont en fait des "mesh" (vous voyez) assez joli, qu'on essaye de faire heu... et qu'on fait nous-même.

35:48 - Donc là, pour le coup, on fait du contenu. Mais vous voyez, c'est des "building blocks" hein, c'est des Légos. Et chacun de ces éléments va avoir une fonction. Ça peut donc être un cockpit, une arme, un container pour mettre du fuel, des réacteurs évidemment pour pousser.

36:03 - C'est "physically based", c'est à dire que les réacteurs poussent pour de vrai. Et il faut en fait coordonner l'activité de tous ces réacteurs pour que votre truc il s'équilibre et il vole.

36:12 - Et cette activité de coordonner les différents éléments les uns par rapport aux autres, c'est fait avec du LUA. Alors les joueurs peuvent carrément éditer ce LUA s'ils le veulent. Biensûr, on pousse pas trop loin quand même parce que c'est un peu challenging. Heu, mais y'a une espèce d'auto-configure qui va regarder le vaisseau, voir où sont les moteurs, et fabriquer un script LUA qui fait qu'il va voler.

36:34 - Donc on a un truc automatique. Après, libre aux joueurs d'aller le modifier, d'aller faire quelque chose de plus heu... je sais pas, de rajouter un "starbuck effect" où le truc il se retourne et heu, le vaisseau voilà qui arrive derrière nous, il se retourne et il lui fait fasse pour lui tirer dessus. Ok, ça c'est peut-être un combo avec des réacteurs spéciaux que le truc aura mis, enfin, on peut faire ça. Je trouve ça assez excitant d'avoir quelque chose qui est finalement "open".

36:59 - Donc là on met un réservoir de fuel, je passe un peu. Heu, ça a beaucoup changé à vrai dire, hein. Je vous montre là une relativement vieille vidéo, mais heu, conceptuellement c'est la même chose. Là on pose ses réacteurs. Heu quelques éléments dit décoratifs, dont cette petite aile qu'on vient de voir. Etc. Etc.

37:19 - Et heu, ouais, on peut faire de la peinture, on peut colorer les voxels, enfin y'a plein de trucs pour que les gens puissent exprimer ce qu'ils ont envie. Ça c'est des ajusteurs par exemple, c'est à dire des petits moteurs qui font un peu pchit-pchit pour générer des petites poussées pour pouvoir contrôler l'orientation du vaisseau. Heu, voilà.

37:42 - C'est réaliste, sans être trop réaliste. Hein, parce que fabriquer un truc qui vole en vrai, il faut bosser chez Dassault, quoi ! Donc y'a, voilà, y'a une partie suffisamment réaliste, en tout cas, pour qu'il y ai un challenge. Et heu, voilà.

37:58 - Donc, je crois qu'après on rentre dedans, on monte dans le cockpit et on décolle et on s'en va. Voilà, et ça c'est cool ! Parce que, vous vous dites : Ah oui d'accord, donc en fait je peux faire ce que je veux. Je peux vraiment construire un petit vaisseau comme ça, mais aussi cette énorme station orbitale ; je sais pas si vous la voyez, mais bon, vous l'avez vu tout à l'heure ; heu, qui est construite de la même manière, sur le même principe. Donc voilà.

38:26 - Heu ici, juste très très vite, on construit un truc un peu plus ambitieux, qui est un gros vaisseau, cargo à priori. Donc là on avait 5-6 personnes de l'équipe qui se sont rassemblées pour construire ce méga-ship, et on le passe en accéléré.

38:52 - Donc la vidéo est un peu longue. C'était vraiment pour les fans. Je vous montre ça rapidement quand même pour vous donner une idée. Voilà. Ça peut être la construction d'un truc un peu...

39:02 - Et ça, ça peut prendre des jours, des semaines, parce que encore là, y'a pas la question de l'approvisionnement en matières première. Sécuriser peut-être aussi le site de construction. Heu, il peut y avoir des pirates. Il peut y avoir des factions ennemies qui veulent vous attaquer. Tout ça, c'est... Ça rigole pas quoi !

39:19 - Y'a vraiment un volet très intéressant, très challenging, et heu... voilà.

Je vous montre la fin.

39:34 - Voilà. Et voilà !

39:40 - L'astéroïde est aussi fait en voxel, il est complètement minable. Enfin, on peut le miner quoi ! Ouais, c'est minable. Bref, on peut le miner. Et voilà.

39:50 - Ok, donc je pense que vous avez compris l'idée de base. Je vois qu'il me reste 5 minutes, donc je vais un peu appuyer sur le champignon.

39:56 - Le scripting LUA, en fait c'est l'idée heu... d'un point de vue technique, si vous voulez, chaque élément (les armes, les cockpits, les moteurs, etc.), en fait c'est des objets qui exhibent 2 choses : des évènements, qu'ils peuvent émettre (ça c'est plutôt pour les capteurs, les senseurs, etc.) et puis des méthodes, enfin des fonctions qu'ils sont capable d'exécuter, donc c'est des méthodes.

40:17 - Et côté LUA, en fait chaque élément va bien sûr être incarné par un objet et va décrire : voilà le genre d'évènements que j'émets, et voilà les actions que je suis capable de faire.

40:26 - Et vous allez être en mesure de les pluger comme ça dans des slots que vous nommez, et le cœur d'un "DPU", c'est à dire la chose que vous pouvez customiser en LUA pour créer un comportement et qui est hébergé dans un "control unit" qui est 1 élément particulier qui sert à stocker le code LUA. Donc le "control unit", il est quelque part. Vous lui branchez tout un tas d'éléments. Chaque élément est branché dans un slot.

40:47 - Et après, le code, c'est tout simplement des actions/réactions. Vous écrivez des évènements, des filtres en fait sur des évènements, qui peuvent provenir de chacun des trucs que vous avez branché. Et vous lui dite, bah quand tel élément se déclenche, bein j'exécute tel code LUA, qui bien sûr va pouvoir utiliser les différentes méthodes des objets/éléments que vous avez plugé dans votre "control unit".

41:10 - C'est assez simple, et bon, en terme d'expressivité, c'est sûr qu'on peut faire ce qu'on veut avec ça hein, y'a pas de limite.

41:16 - Vous avez aussi des slots standards, comme "system", qui sont capable d'émettre des pulses. Donc, vous pouvez mettre des timers, enfin des trucs comme ça qui génèrent des événements que vous pouvez catcher pour faire des choses périodiquement, etc. Donc là, y'a pas de limites. Vous pouvez aussi bien brancher des lampes que vous avez allumées en faisant des patterns. (...)

41:36 - Alors la particularité, juste, c'est que le script LUA s'exécute sur le client, et bien sûr il n'a accès qu'aux méthodes autorisées des objets, hein donc heu, il peut pas faire n'importe quoi. On va certainement aussi introduire un contrôle sur la fréquence des updates qu'il peut faire, et qui chaque fois se traduisent par des messages serveur. Tout ça va être bien borné.

41:58 - Le script LUA aussi, pour ceux qui en ont déjà fait, l'intégration de LUA en C++, c'est pas mal. On peut contrôler le nombre de cycles qu'on attribue à LUA, la mémoire, etc. Donc on va bien le shielder pour que ça puisse pas faire n'importe quoi.

42:13 - Mais surtout, c'est exécuté "client side", donc si le client n'est pas connecté, son script ne peut pas fonctionner. Bon, fair enough. Heu, ça nous évite... Parce qu'on peut pas faire tourner de code, qui est écrit par un tier, sur le serveur. Ça c'est : bad idea. Obviously, voilà. Mais voilà, donc c'est un axe.

42:32 - Je passe un peu vite parce qu'on a vraiment plus de temps. Mais, y'a les organisations, qui sont une généralisation des guildes, qui permettent de structurer en "Legates" et "Members". Vous voyez, ils ont pas les mêmes rôles. Ils peuvent voter, créer des rôles pour les "Members".

42:45 - En fait, on a essayé de généraliser ce qu'est une organisation humaine de telle sorte que vous puissiez prendre ce template et le spécialiser pour faire une nation, une corporation, une guilde de pirates... Et en fait c'est le même moule derrière, que vous spécialisez.

43:00 - Donc ça c'est "émergent". On va voir ce que les gens vont créer. C'est une façon de gérer la politique, puisque cet outils là permet de répartir le pouvoir entre les différents membres ou legates de l'organisation.

43:11 - On a un système de gestion des droits qui est pas très loin finalement d'un "file system", où vous avez des "Assets" qui ont des "Powers", c'est-à-dire qu'ils peuvent faire des choses. D'accord, un coffre, on peut l'ouvrir, on peut regarder ce qu'il y a dedans ; ça c'est un autre "Power".

43:23 - Chaque "Power" a des "Tags" qui sont en fait comme des serrures. Et vous allez pouvoir donner à des "Users" des "Tags" aussi, qui en fait des clés. Et vous allez pouvoir exercer un "Power" d'un "Asset" si vous avez au moins 1 "Tag" qui correspond, dans votre "Wallet", qui correspond au "Tag" du "Power" en question.

43:40 - Je simplifie. C'est beaucoup plus compliqué. Mais vous avez l'idée. C'est qu'en fait on va pouvoir distribuer comme ça des droits. Et moi, pour savoir si j'ai le droit d'ouvrir cette porte, le système va vérifier que j'ai au moins 1 "Tag" qui match avec le "Power" de "Je m'ouvre" concernant cette porte. D'accord ?

43:56 - Donc, ça aussi c'est assez émergent parce que les gens vont pouvoir créer des trucs assez sophistiqués. Les "Tags" sont structurés en hiérarchie. Y'a plein de moyens pour éviter le "micro-management", évidemment. Mais j'ai pas trop le temps d'en parler.

44:07 - L'économie est réaliste, alors, pour ceux qui connaissent Eve Online, c'est exactement la même chose que Eve Online. Vous avez des marchés avec des "buy orders", des "sell orders", et vous avec un équilibre qui se forme dynamiquement entre l'offre et la demande.

44:19 - Et donc, moi je ne sais pas combien coûte 1 kg de fer, ou 1 kg de cuivre dans Dual Universe. C'est le marché qui le dira, en fonction (tout simplement) de l'offre et la demande.

44:29 - C'est assez intéressant en terme de dynamique émergente ça parce que, par exemple, je pense que ça va aider à réguler aussi le gameplay par rapport aux activités des joueurs. Si y'a des joueurs qui vont pas miner, bein le prix des matériaux va augmenter, et puis ça va inciter des joueurs à miner, par exemple.

44:45 - Voila. Gestion des territoires, je passe, parce que je voudrais aller à la conclusion.

44:49 - Je vous ai déjà dit que le jeu sort fin 2018, donc on a encore beaucoup de travail. C'est un projet très très ambitieux, très excitant, vraiment plein de challenges techniques. On recrute, vous l'imaginez bien. Il y a une adresse, vous pouvez aller visiter si ça vous intéresse.

45:06 - Et heu, on veut vraiment essayer d'apporter quelque chose de nouveau dans le monde du MMO. Peut-être qu'on va pas y arriver, mais en tout cas on s'en donne les moyens. Et ça vaut le coup d'essayer de créer cet univers de réalité virtuelle ou les gens peuvent finalement créer leur propre civilisation.

Merci.