 is from Jean-Philippe Bouillet. He is programming for 15 years already, almost unbelievable. He's not much older than that, but it's true. And his topic today will be computer-designed for serious Lego fans. Who views a Lego fan? I guess almost all of you, yeah. So imagine what you could do if you have an endless amount of Lego bricks. And much more, this will be told to you by Jean-Philippe Bouillet. Give him a warm applause. Alrighty, morning. So, computer-designed for serious Lego fans. We're gonna talk about the whole computer-designed thing. First, I wanna get the whole serious Lego fans out of the way. What's a serious Lego fan? Maybe not that. Maybe these people. Maybe people who spend lots of time dealing with Legos, who maybe take calipers to their Lego parts just for fun when new parts come out. Maybe people like these. I'm probably in there somewhere. There are Lego conventions, just like there are hacker conferences. There are Lego things. There are many, there are many everywhere. And Legos are not only for kids. This is from the end of the Lego movie, which has a pretty nice message. But the dad is trying to say like, no, no, these aren't toys. You can't just put these on the shelf and play with these and whatever. No, no, we need to super glue them all and they need to be sorted just exactly perfectly. And they're serious construction. They're a robust system of prototyping, not toys. So, there's this whole community of what we call adult fans of Lego. And, whoops, what happened here? Yeah, there are groups that meet all over the world, Lego users groups that come together, often have some communal collection of Legos and often have some group themed builds, often participate in larger events, such as those conferences. You'll see regional groups bringing a giant table and all their stuff or sometimes some virtual collaboration project. So, for some reason, even though we're not kids, we're still building anyway. So, Eldra, what is Eldra? Well, it's a couple things. Originally, it was a DOS program written by this guy called James Jessamine back in the year that I was born. It's a file format. It's an open standard of, it's a text based format that describes a system of doing things in three dimensions. And it's also a library of parts that people have modeled to represent all the Lego parts that you would have in your boxes at home using this format. And a lot of things have grown from this format because it's pretty versatile. So, there's been a whole ecosystem of tools that people have written for pretty much anything you'd wanna do. So, I'm gonna show you if the demo gods are with me. The original, oh, that's hard to read. Yeah, I'm gonna have to do this blind. I have an idea. This is the original Eldra program rendering the classic Eldra car. There's a couple steps in building the car. First, we have the chassis, then we have the seat, we have a little steering wheel, we have more things. And this is kind of small because it's being rendered directly to VGA output. This is back in, this is a 16 bit real mode program. It's not another fun environment to program in. We have a car. Those graphics are kind of awful, but it was fantastic for the time. Just in case it didn't work. This is what I was supposed to, one of the things that it could look like. There were two programs that were originally released. There was Eldra to display models and the steps to build those models. And there was LD edit, which could be used to create models or parts using the system. So, that's what editors look like then. What do they look like now? Well, there's one that's existed for quite some time called ML CAD. Unfortunately, it's closed source. It's been the de facto editor for quite some years. You can run it in wine. It has a bunch of nice features like you can generate minifigures and position their hands correctly. You can do whatever you'd like. There's also an editor that someone wrote for Mac. It's an old screenshot, sorry, because I don't actually run OFX. There is an open source cross-platform editor that's called LeoCAD, which is more popular today. There's another cross-platform one called LDCAD. Bit more advanced. It's entirely written in open jail. All the menus and everything are done from scratch. It's kind of awkward and clunky. We'll see it later. But it's quite a good editor. There's another one called SR3D Builder. Another proprietary thing. There's a trend here. And then recently, there's been this shift from editors that you would run locally to everything's in the cloud these days. So of course, LEGO modeling programs go to the cloud. And so here's one in a browser. Someone's building the Millennium Falcon. There's another one that's recently been developed. There's some editors. What about viewers? There's this program called LDView, which renders everything in using openGL. There's a webGL-based viewer. So we can go in a browser and without any plugins or anything, we can have some nice LEGO models. And that's open source as well. There's one for an iPad because why not? So there's this ecosystem of tools that all interoperate with the same file format. So let's talk about what that is. Let's talk about how these models are actually represented. So there's this simple system of six different types of text-based lines. You have numbers that begin in zero, which are a comment. You have lines that begin in one, which are, hey, place some part at some location with multiplied by some matrix so you can scale the thing you're including or rotate it or insert the part in whatever orientation and however you need. Then you have other types for actually constructing those parts. There are a couple kinds of ways of modeling things. You have constructive solid geometry modeling, which is you have closed shapes where you say, okay, I have like this cube and from this cube I'm gonna extrude this face of it and I'm going to intersect it with this sphere or whatever. And you end up with always a watertight shape. And then there are other systems where you just define faces of it and you give coordinates to those polygons that make up the 3D model and hopefully you have a watertight shape. Potentially you don't. Potentially you have some side of it that you forgot to model. Eldra is just lines and triangles and quadrilaterals, which are really just triangles anyway. So there's a line type. There's a triangle type. There's a quad type. And then there's an optional line type and we'll see why that's used later. And of course, there's a, like every syntax, there's a Vim plugin to the syntax highlighted. So yeah, this system has some coordinates, some coordinate system for representing where things are. We have decided that negative Y is going to be up. That throws me off all the time. We also have to decide some units for how big things will be. And it turns out that Lego parts are perfectly divisible, that the actual units are perfectly divisible by this ratio. And so everything, we decided that one stud is gonna be 20 Eldra units wide. A brick is gonna be 24 Eldra units high. The stud itself is gonna be four units above that. And then we also have to define some way to represent what colors our parts are in. So there's a bunch of colors that actually exist from real bricks. And then there's a special color which allows us to model parts without specifying a color in the part. And then when we instantiate the part, give it whatever color we want. It'd be annoying if we had to have a different model for every type of color brick that we wanted. We just have one of that shape and then we apply whatever color. And this format's pretty simple, but there are extensions to it. So the standard is open and available online. There's additional parts to it, not in the standard. So one of those extensions is for back-face culling. So what is that? There are a couple ways of rendering shapes to images and we'll get into that more later, but one of them has to do with if you can eliminate work, that makes things go faster. And so if you have a triangle that you're looking at, that's the face of a brick, and you're looking at the brick from the outside, then we wanna draw that triangle. If we're looking at the brick from inside the brick, then we don't care because we're probably not gonna see the inside of a brick. We're probably going to see the outside of the other side of the brick. So don't render triangles if they are backwards. There's another extension for multi-part documents which is a way to say, within one file, hey, I have multiple things that I've built in it. Maybe you have a minifigure and you modeled him separately and then, or her separately, and then you wanted to put this minifigure in some place in your model and you wanted the coordinates of the minifigure to be relative to some origin for it so that you can more easily, say, reposition its arms or something. You could do that within this multi-part document system. There are, there's also an extension for adding textures to shapes. So for the longest time, all we had was polygons. There are some lego parts that have textures on them. There's like the faces on the heads, right? Well, for the longest time, these had to be modeled just using polygons. So you would say, okay, well, I'm gonna take my calipers to the smile on the little minifig's head and I'm gonna see how what it is and see about how tightly the curves are and model that, approximate that with some linear regions. And that was a very tedious process. There were tools that were written to automate most of it but that was still a tedious process so eventually we said, okay, well, instead let's be able to just take images and map those onto the surfaces that we want. So there's an extension for that. There's also an extension for custom color definitions because lego keeps making new colors and even if there are many different shades of gray. You can approximately tell how old someone is by asking them how many colors of lego they remember. So there's the lines and the polygons that I've talked about and then there's this other conditional line thing that I haven't really talked so much about. Lines are always drawn. Conditional lines are drawn depending on the angle that you look at them. So for example here, I guess you can't see my cursor but the line from C to D is always drawn. There exists a conditional line from C to F that we're not drawing right now. There also exists a conditional line from B to E and we're drawing that because we've designed that line so that it's only shown when it's at the edge of our shape. And so using that we can make wire frames that outline the shapes without always being present because if we had a sphere we want to just like see a circle around the sphere we don't want to see like all the polygons in it. That's it. And there's some extensions that individual programs have added to the standard that are in comments but for just representing models this is all you need. And so we can use these primitives to build LEGO parts and we'll see later what those primitives actually look like but it's just composing these basic shapes that allow us to build everything. So I talked about some editors that exist to talk about some viewers that exist. What else might you want to do with the system? Well we can animate things because once we have these models it'd be nice to make little videos of stuff. So there's programs that allow you to do that and end up with some pretty neat results. Now how do you make an animation like this? Well you just have to render each frame individually and then compose them together. How do you render each frame individually? Well that depends how much time and energy you'd like to invest into rendering it. So there are fancier ways of rendering than just putting it in your editor and seeing what happens. So let's talk about how things are actually rendered. There's this renderer called Pavre, it's a ray tracer. Ray tracing is a type of rendering that's not what your GPU normally does. It allows you to have nice things with lighting effects that are otherwise too computationally expensive to do and end up with models that look pretty darn realistic if I do say so myself. So let's look at what a normal rendering pipeline looks like. In essence you have some points. You connect those points with some faces. Those faces get translated by, we represent these points as just some vector. We have some three tuple of numbers. We have an x, y, and a z coordinate for this for a point for a vertex for like a corner of our brick say. If we'd like to move this brick or if we'd like to rotate this brick or something, well we can take that point which is just a vector and multiply that by a matrix to get the point with some translation applied to it and that's how the Eldra format actually works. That's how all 3D rendering pretty much works. So then once we've taken our vertices and figured out where they belong, then we collapse them down into, okay well these are three dimensional things but we want something two dimensional. Some of these faces are gonna be on top of other faces. Which ones do we draw? Do we need to like split them up or something? So then we end up with some flattened collection of shapes. Then we need to say okay well, maybe there was some light source in our model. So we have to find some, how light your faces depends on the angle between the light source and the angle that you're viewing it at. So you find that angle of incidence and that's some coefficient that determines how bright that vertex is gonna be and you do that for all the corners of your polygons. And then you have to smooth, you have to interpolate those values and you end up with some gradients on your shapes. Then you apply maybe some texture onto that, you multiply all those coefficients together and you end up with a pixel value for that pixel on the screen. But the important part to note is that we're starting with the shapes that we want and we're translating those down through a bunch of stages and there's actually more stages than this. But we're starting with the polygons that we wanna draw and we're turning those into, okay, for each polygon, where is this thing? And there's a bunch of stages. This is what the OpenGL guys currently say is the stages on the wiki. That's also, it's all triangles all the way down. Rate tracing works a little differently. Instead of starting with the shapes and turning them into the points, we start with the points and figure out what shapes are there. So we take our screen, we say, okay, I have this model of the world. I'm looking at the world from a particular point. Well, I'm gonna have some angle that I can see the world at, some width of my vision and some height of my vision and I'm gonna turn each pixel into an angle and so I'm gonna have a vector going from my camera point through some things in the world and I'm gonna hit something. I'm gonna hit maybe a brick and then I'm gonna see, okay, what angle did I hit this brick at? Oh, I hit it at this angle. Okay, what's, I'm gonna follow that angle that I hit it. It's like I'm playing pool or something. I'm gonna follow that angle and see, oh, I hit another brick and I'm gonna follow the angle that it reflects off that again and say, oh, well, I'm like this close to a light source. And so then I trace all that back. I figure out how those light sources and the reflectivities of the materials that I've hit and there's a bunch of different coefficients that go into it. I go back and I trace those back to figure out for my initial vector, what color should it be seeing right now and I do that for all the points in my image and then I get the result. And that's a more time consuming process which is generally why that's not what your games are rendered with. But it produces really nice images and we can use them to make quite photorealistic models of Legos. So let's talk a little bit more about our primitives in Eldra, right? Everything that I described was flat. We had triangles, we had quadrilaterals but those needed meat at some angle and Legos aren't actually all angular. Legos have smooth parts to them. So it's fine when we're trying to model things in the system where we have the polygons and we're trying to turn those into the points. It's fine when we're trying to rasterize everything because the less individual faces we have, the faster that process goes and the smoother our editor is gonna appear. But for high quality rendering, that's not what we want. This is an example of some of the parts that are gonna produce slightly suboptimal results. So for example, here on the top left we have a stud of a Lego brick. Could also be used in other things. So let's look at what happens if we're trying to retrace these shapes. I don't know if you can really see it on this weird LED TV thing. But to me, the head on the right looks a lot smoother and the head on the left, there's clear breaks between the different surfaces in what would otherwise be a smooth skull. So let's look at that a bit closer. On the right we have a very smooth curves and the gradients are more, I have better interpolation and on the left we have these blocky things and that's not really lifelike. Also the textures, different surfaces of different bricks might have different textures and Eldra doesn't have a way to represent that. We just take calipers to parts and turn it into a three dimensional shape. So if we're trying to do photorealistic renderings, it makes sense to have some separate library of primitives. So for each one of these things, there is a, these are discrete shapes. We have some continuous shape which actually has the curves that we model as a circle that we use when we're trying to do the ray tracing. So these fake models, these virtual models are all nice and I can build whatever I want but at some point once you've built some awesome model and you wanna actually build it for real once you've prototyped it with a computer because you can have all the parts you want in whatever color you want and whatever quantity you'd like, maybe you want to actually have the thing in your hands. Maybe you're like, okay, I wanna build it for real. So at some point, some years ago, about 10 years ago, LEGO created their own thing which they called LEGO Digital Designer. Eldraw came first, this is, Eldraw is not officially a LEGO thing at all. It's just a community project and ecosystem. LEGO created their own official editor which didn't use the Eldraw library and at some point they said, okay, well, we're going to allow people to take the models that they've built and upload them to our site and buy the pieces that are in the model. And so they had this whole designed by me brand thing and LEGO created, I think it was called Creator, not the classic Creator series. But unfortunately, and that was super exciting. A friend of mine built me a little LEGO AT-AT thing from Star Wars once, it's great. But nope, they shut down, which is really unfortunate because maybe you want to take your real parts and have a real model with it. Well, fortunately there's a secondhand LEGO market and actually it's huge. So there's this site called Bricklink which is basically eBay for LEGOs so I can go here, I can go to just parts and maybe I can make that bigger, yeah. I can say, give me the most classic piece, give me a two by four brick. Well, that's part number 3001, there's my brick and I can see all of the, wow, that's a lot of colors. Like I was saying, yes. And say, say I just want it in red. Well, do I want dark red or other dark red or other dark red or sand red or reddish brown or just, I just, I think I just want red. And then it shows me, okay, well, this person has 17 of them, this person has 140 of them and where they are and how much shipping would be, this guy has 2,000 of them. Okay, well, that's fine. But that would be a real pain if I wanted to take my big thing that I've designed and one at a time go and find all the parts. So fortunately, someone created a piece of software where you can take an L draw model that you've created, export a bill of materials for it and then export that into this big XML thing that Bricklink will take and then it can automatically find, okay, well, this is the vendors that you would, this is like the smallest set of vendors you would need to be able to get all the parts that you wanted or oops, maybe you designed this model such that there's a part that doesn't actually exist in that color because Legos never made it and so too bad. But the market for secondhand Legos is actually really, really big. So much so that one guy decided that he's gonna automate the sorting process so he can just bulk ingest tons of Legos and built this machine to using machine learning, identify or at least identify similar enough pieces that they're into useful categories so that then he can say, okay, well, I can provide you exactly what you need and as many of them as you need. Go to yard sales, collect things, individually categorize them so that people can use them as they'd like. There are also some books on L draw and there's some more resources that I put in the slides just because they'll be available afterwards and they're useful. So now let's actually look at some modeling. I'm gonna try to mirror my screens so that I can see what's going on. I might mess with the recording if I do that. Okay, I'm just gonna have it be smaller. So here is one editor. Let's open a car. So we have a model of our car. We can go and add some pieces. Let's say we wanted to put our gargoyle on the roof. We can do that. Go put him here. All right, not actually on the roof. Now we have a gargoyle on the roof of our car. All right, let's save this car as awesome car. Now let's go and open this in a different program. Go open our awesome car. Now we have our awesome car. The bottom isn't rendering but that's just because I'm trying to use a Windows program through wine and Linux problems, yeah. But it does work well. So this is an old editor called ML CAD. It was the standard for a while and this one allows us to view the actual things that are going on in the file. So we have a bunch of parts and we have a bunch of these comment lines for the steps in the car. Because remember this is the same model that I showed at the very beginning where the original L Draw program was stepping through building the different stages of it. We've seen this model in a visual editor. Let's look at this model in a text editor. Oh, that's probably too small for you to see. All right, there we go. So we have this standard header. So this is the name of our model. The name of the file, this is the author of it. This is James Jessamine. James Jessamine was the original author of the original DOS L Draw program and unfortunately he died before he could see the community that he's created really flourish and the open source awesomeness take off where people started contributing all of the different tools. There's a memorial award in his honor that's given to some prolific, I'll draw a contributor every year. This is a part. It says, okay, we're going to insert this part with this color, with this orientation and this is the part. And then we're going to, we're gonna do a bunch of those and we're gonna have a step. Now this is some meta command that tells the viewer to pause and we just have a bunch of those. It's not a particularly interesting model. It's just a bunch of parts. So let's open one of those parts. This is the two by four brick. The, we have the name of the brick as it appears in the editor. We have the name of the file. We have who wrote this, who made the model of this part. We have some other metadata. We have the license of it. Every part in the official old draw parts libraries under the Creative Commons license. We have this comment, which is back face culling, which I briefly mentioned earlier, which is don't try to draw triangles that are clockwise. This says, I'm certifying that this document has all of my polygons wound with vertices in the counter clockwise direction. So if there's anything in the other direction, then don't display it. That's a rendering optimization. Here's some more metadata. And then we have including some sub file. And then we have some four, four quadrilaterals. And so those are the, I believe the sides of the model. And so we could go and look at what exactly this part is. So let's use another program. Let's use LD view. This is open jail based viewer. So this is the part that was included by the two by four brick. Now, as you can see, it's missing its sides. We also don't see, we do see this face, except when we're looking at it backwards, we don't, we only see the inside of the brick. But it's always missing the sides. So what that brick was was just, a lot of L draw is composition. We have small primitives that we then include to make bigger primitives, which we then include to make bigger primitives. For example, there's a circle that's used with a cylinder to make the studs. That's also used to make these bottom cone things. Because a lot of parts and legos are quite similar. You have, bricks are fairly standard. You have the studs, you have the face where the stud meets the rest of the brick. So that's basics of the viewer. Now, that awesome car that we made. What if we wanted to render some really nice picture of it and give that to our friends to put on their wall? So here's our car, our awesome car, sorry, because it was a gargoyle thing on top. I'm going to export a poverty scene of it, and that's just telling it, hey, represent this and what the ray tracer interprets, which is different than the L draw stuff. We can take a look at what that looks like. So here we have, hey, there's a camera. It's at this place. It's looking at this other place. We have a bunch of materials that represent, hey, this is approximately how shiny legos actually are. So when you're trying to calculate how the light reflects off of them, approximate these empirically measured values from real bricks. There's some light sources, and at some point it's going to include a, here we have, hey, we have this object. It's this other object, which is a stud, and multiplied by this matrix to give it a different position. We have the same stud model. We're just putting it at a bunch, we have a bunch of them and we're putting them all at different places. And there's a whole bunch. Here, now we're doing something a little bit differently. This is not directly from Eldra. Eldra was all flat shapes. This is a cylinder. So we have a continuous, we've described our model with a continuous mathematical function that we'll use when we try to do the rendering. So we're substituting the flat faces for the higher semantic meaning of what we actually wanted in our model. Okay, well, that's all well and good, but what does it look like? So, oops, so I've just rendered the thing. And now we have this awesome car, for some reason, up against the wall, which is vertical, and it makes no sense because it's a flying car against a wall, but it doesn't matter. And you can see it has nice shadows rendered and things that other editors wouldn't do. So now we can go give this to our friends and say, look, wow, Legos are cool. So I have a couple other editors that I could show you guys. We could look a bit more into the file format. We could look a bit more into the, anything you guys would like to see more of. Real quick, I'm gonna show you, in the beginning I mentioned there were two types of modeling. We could either take faces and try to make solid objects out of them, or we could start with solid objects and only ever have solid objects. I'm gonna show you something which is not Legos, but is a different way of doing 3D modeling, which is something that I found equally interesting when I was first getting into this. So here's a way of constructing models by performing set operations on more primitive shapes. So what do I mean? Take a sphere, make a cylinder, and subtract those cylinders from the sphere, and this is what you would get. We can create higher level domain specific languages to represent in a parameterized way the things that we would like to model. Normal CAD programs, you sit there with a mouse and keyboard and significantly the mouse and try to draw the shapes that you want and extrude them, and then like, oh, that's actually, I want this distance specific, so you set your mark and you say, oh, this is the actual distance that I want, and then if you wanna change one little thing, you have to recalculate all your other distances and manually adjust them, and it's generally awful. As a programmer, that bothers me. I want everything to be declarative. I want everything to be, all my distances to be a function of some other distance, which I've decided, and so this is a system that allows you to functionally compose 3D shapes, and it allows you to do some pretty interesting things. Here's a 3D fractal done entirely by this programming style of making 3D models, and you might be wondering, why did I just throw this into a presentation on Legos? Well, actually, I can find my browser window again. Someone has taken exactly this concept and applied it to modeling with Legos, so the same domain specific language where you're, this is some Lisp style thing, where you're doing the same principle in a parameterized way that you can program, you can also now do with Lego models, and so it used to be that you would have to sit there with your editor and adjust your things, like for example, positioning minifig's hands was always really tedious because you had to find just the correct matrix to like, well, if the arm was already raised up and you wanted to just rotate the hand, then you had to also go back with the inverse of how the arm was rotated and then figure out how the hand was supposed to be, and it was just a mess, and this is a way of much more cleanly being able to represent the semantics of what you're trying to model, and is something quite interesting, and is a combination of the things that have been built in the yeldraw community for viewing Lego models and the things that have been built in the traditional CAD world where you're doing solid geometry, which is important if you're trying to like mill an actual part or something like that, so yeah, with that I think I'll take questions. Sorry, I can't hear you, you have to speak up. The web-based version of the Lego modeling. Yes. Like kids in school. Yeah, actually, so one of the things, I don't know if you noticed, when I was trying to place the gargoyle on top of the car was that it was trivially easy to create impossible positioning, so I could put it inside the stud of a brick, which I mean two things can occupy the same space. One of the things that Lego Digital Designer, Lego's official one, and also this web-based thing tries to do is have mappings of where bricks collide. And so it's as simple as, hey, let me drag a brick on here. Oh, if I can. Being a little slow. Let me drag another brick. Yeah, and so, oops, well, anyway. But yeah, I mean it's relatively easy to make the things that you want to make. And you don't have to download anything, it's all just there in the browser, yeah. When you showed bricklink, I saw that there was many different colors. Has anyone measured these spectrum of plastic? Yeah, that's a quite interesting problem, because there is no correct RGB value, because it all depends on the lighting. There's different materials reflect different wavelengths, different ways, you can't just say this is the canonical color value for this material, because it depends on the source lighting. And so different people have tried to measure Lego's under different conditions and approximate what they should be, but that gets into material science stuff that I don't understand. It's not a trivial problem, yeah. It's an interesting one, though. There is no data yet. There is data, so there's, here is the, oh, it's a little big, oh well. This is the config file, which defines the colors for all the all-draw parts, and so there's a mapping between the name that we've assigned it and its RGB value, but that's not enough information to actually capture how the part visually responds to the light that it's under, so yeah, that's, to actually do that requires stuff I don't understand. Thanks. Another question? I was wondering how these programs relate to the original CAD programs or the BIM modeling programs. I see a lot of similarities to BIM modeling, you know. BIM modeling? A building information modeling. Oh. It's used in the building industry. Well, I live under a plastic rock with lots of studs on top, so yeah. I get to live in and play with my Legos and not interface with the real world, so I don't know about how that works. Well, maybe it's interesting to compare. Yeah, because it looks like BIM modeling programs use libraries, so if I were to do this, I would ask you to make a library for Legos and use the whole very, I don't understand it as well, complicated programs that are already there, but. There has been some efforts to try to share libraries of parts between Eldra and others. The Lego tried to make a game called Lego Universe at some point and they had to model a bunch of parts and there was some sharing that went on between the two communities, but I'm not sure to what extent that really happened or who took more from whoever. That could be interesting. Yeah, yeah. More questions? Anybody? Do you have some models to show as you made with these tools? Not on this computer, no, sorry. Yeah, so there's sites that exist. The question was maybe some other models that exist. There are, if I can get out of my editor, there are sites that exist to share these things. So there's, Linux, sorry, not Linux, Lego users groups have traditionally organized over this thing called LugNet, which is an NNTP use group, believe it or not. And they had, where is it? There was a group in there for posting models. There's this thing called the official model repository, which is people recreating actual Lego sets. There is also, Brickshelf was one of the original places where people would go to share mocks, my own creations, either pictures of things that they had made in the real world or sometimes also things that they'd made in Eldrall, like this one looks to be rendered, yeah, some big thing. Yeah, it looks like the Star Wars thing. Lots of people do stuff on Flickr. The brother's Brick is, is a cool blog that does a bunch of like your related things and they also, they often have a lot of models. I don't know if this is real or they have nets, probably not, but yeah, there are, there are models, they are floating around wherever people wish to share them. Yeah. More questions. No more? Be brave. No? Okay. Yeah, yeah, yeah, yeah, okay. Go ahead. Final one. Do you have any examples of rendering out instructions? Yes. So people can easily build them. Yes. So there was, that was one of the reasons why, yeah, Eldrall has been historically used for that. No starch press, one of my, actually probably just hands down my favorite publisher uses Eldrall stuff in their LEGO books. They have a lot of things which have instructions. For example, like the book of LEGO rubber band guns, not that you should ever build those, is, yeah, like these, these building instructions are all rendered with Eldrall. There's this piece of software called LPUB, which was written for exactly that. There aren't screenshots on its site as far as I remember, but the, that's why the step command exists. So there's that comment step that you saw in the car model. That's for the purpose of separating your model into an ordered sequence of parts to do, so that they actually like, yes, you must connect this one which physically connects to this one before the other one which is floating on top. And there's some software to try to automatically order your parts into a sequence that would actually be buildable from the unordered set of model that you have eventually generated. And then there's, you can even just use make files if you'd like for pushing those all through software to convert them to Poverty things and render those if you'd like, or just keep them in a, like a more matte rendering from LDVU or something like that. There's also the library of unofficial parts and these are all rendered, they have, well it's a, yeah, but they're all rendered in an automated way. Pyrrhon is a database of instruction booklets and sets and what parts are in those sets and many LEGO things. And if I just go to any, what's a, does someone have a favorite LEGO set number off the top of their head? These, this bill of materials for this particular LEGO set is, this is all rendered with Eldra in a headless way on some server someplace. I don't know if that answers your question, but yes, there are tools for that. Okay, if there are no more questions, by the way the time is over or two and Jean-Philippe has to run for his next talk. Thank you very much for the very interesting presentation. Let's give him a warm round of applause. Thank you.