 My name is Kenan Belükbaşı. I'm going to present an automated sprite rendering system using Blender. It's okay. Let's just first thing first. The point of the talk is not really going to be about the introduction or showcase of the system, but actually I want to show how easily this kind of thing can be put together using Floss. And yes, first just a little brief about the thing. So it's an in-house automated sprite rendering system using Blender. It has no name yet, so it's designed for in-game use because we are producing mobile games and we need to use sprites for that stuff. So yes, it makes our job pretty easy actually because we automate so many things that we normally have to make manually and it takes time and all the revisions again takes time. And also it works completely on Blender except a little command line interface written in Shell Script, written in Python and Bash and like 500 lines of code. The base system is written in one month more or less by me. And there is the Atlas Generator part which is written by Ismail Donar. He is my colleague from my company. It has not released yet. We have some plans to release it as open source, but not right now. And in fact I would like to actually allow to hear if there is actually interest in that stuff or not because I have no idea what the industry actually uses for that kind of stuff. So maybe there is a gap for that. I don't really know if I couldn't find such thing before writing this thing. Briefly, it uses 3D models generated in our design departments. It imports them as collade exchange files. And the system automatically imports the model as shading, texturing, lighting, and cameras, environment effects, some other things like rotation for some models that need to be rotated and it does the render settings and its renders generate the Atlas, blah blah blah and suddenly you see it on the game. And again, why am I? I'm Kenan Bölükbaşı. I live in Istanbul. I'm a CG generalist kind of. And also a hobbyist programmer and kind of designer. I use a fully open source software stack for six, seven years as a professional. I'm the lead of Graphics Department at Exerio Studios which is again located in Istanbul. I heavily use Blender, GIMP, Inkscape, ImageMagic, and as operating system Arch Linux. And Exerio Studios, again, I want to tell you a little about us because we completely use open source software in the studio as well. We are a game development studio located in Istanbul, completely free open source technology stack on development, fully in-house production, infrastructure, and game engine. We are a small company like 13 people but we are very ambitious and we have people that knows their job, luckily. And seven people are actually working on the project I'm working right now and three on development, foreign graphics included in the graphics stuff. We are doing an online multiplayer cross-platform strategy game. It works on Mac and Linux and Windows and iOS and Android, pretty much everything. Our game uses sprites for rendering, as I already told. My employer asked me when I first joined the company, my employer asked me to provide some kind of a system, not the one I came up with at the end, but some kind of a system so that we can easily see the graphics we generate in-game directly, so not to interrupt with their agile development process. So we started developing this thing and it was actually needed because when you are doing sprites, it's a little hard and problematic thing because you always have to maintain the same assets over and over again and render them again and again. And too many assets, you can easily make mistakes like 50 assets and many variations of them and you have to take many, render many sequences and it's very easy to make mistakes. So I needed to automate it and also there was some settings that were I so we needed a Blender's user should probably have, okay, for some sharing structures and stuff you can already link libraries, many things can easily be added and centrally controlled but in this case really linking libraries didn't do it so anyway. It was so much repetitive work. We always had to revise the concepts, the materials and the lighting. Lighting were due to change. Models should be rendered with varying number of directions so that the characters can go like eight directions or so. And sprites should be managed properly for Atlas generation so the actual program can read the sprites. And again to sum up, some repetition variation, linking library didn't do it, everything changes constantly and agile development thing. So I realized I need some kind of system to optimize labor. Actually I was doing the modeling and animation stuff at the beginning so my labor, I needed a centralized mechanism to control the settings and I never done Python before but I realized it was easy so let's just start doing this. And my aim was from the left going to the right. Shrinking all this workflow, automating everything as possible and we actually pretty much were successful in that. So normally you should first come up with a concept and then do the modeling, the animation, the texturing, the materials. You should set up the environment, lighting, render settings, blah blah blah. And I managed to cut out all these parts in the middle so just the concepts, modeling and also of course animation, texturing and the game, directly in-game visuals. So there were also later additions to the system that we did. The frame step mechanism is actually a pretty nice mechanism and it's already in blender so I'm not really counting that. And also, okay, just a second. Okay, so I also needed proper handling of imports which means that normally if you only come up with a system that imports the stuff and renders the stuff but if you actually needed to sometimes modify these things in blender it will again be problematic because they were not being imported or easily modified the stuff. And so we needed something for that too and we managed to come up with it. And collada support means you can pretty much do the modeling and animation stuff in any software at all just except if you are doing rigging. I'm talking about basic animation because rigging stuff is completely different. And several animation directions were imported so that again the characters can walk around. We managed to do some little system that takes apart the model and creates a random particle and turns it around one time so that you can use it as a particle in the animation like after an explosion or something. And we also did some kind of primitive effects and compositing and some other stuff as you can see a little technical anyway. Okay, but I think I missed somewhere in... Yeah, okay, I didn't miss anything anyway. So I can turn to this stuff later just first show this. It's the system right now works like this. You start... It has a command line interface and you say, okay, I want to create a new unit called, for example, I don't know, Mechanic is the name of the unit. So it creates something like a skeleton for you. It creates a project directory and it creates a blender file in it so you just open it and do the modeling and close the stuff and put it around there. Or you might try to import it in case it is actually done in some other modeling software so you say, create me a new unit and import the model named Mechanic and it will do the importing of the textures and the materials and it will do the necessary arrangements and it will import, for example, if your Mechanic unit has like five different levels, it will actually import all these levels in one file and as different scenes and if you have, again, for the same units, like have five different kind of animations, it will again import all the animations in the same file so that you can easily work in only one file for one unit after that. Anyway, and then if you want to render it, it does all the arrangements and just takes the render. Okay, this is a sample command line interface command. This actually does more than one thing. So the name of the command line interface is Sprite and the parameters you can see here are the parameters I was just talking about. N is for creating a new unit, I is for doing the import in this new unit and R is for rendering and A is for Atlas generation and the names that come after that are the ones that automatically processed. So all these models are going to be automatically processed and rendered and the Atlas generation will then after you run this command and this actual result will be something like this. I'm not sure you can see the stuff but these are four generated Atlas results, as you can see and there is like six, eight models in there. They're all rendered correctly and put into the file and I can't really... I don't think it is easy to see the details but some details like some little effects and distortions that we intentionally did and they are all done automatically. Okay, let's just show a little example. So, yes. This is my production directory. Imports are the files that actually came from the design department to me. These in, for example, like a unit, there is models and there is a textures directory and the animations are inside them as call other files and PNG files. They are all separate and there is absolutely no material creation exists in the files, only the base models and the animations and also you give some placeholder names for the materials but do no settings at all because they are all replaced afterwards. So anyway, the model directory is the one that is populated after the importing of stuff. The asset directory is the one that is populated after the rendering of the stuff. Let's just do a little example about it. Okay, so Gooseberry. When I first import just a second, it's a little slow, so air missiles. Okay, so we have the animation for one of our models. Let's just open it and as you can see, the model and the basic animation is here but there is actually no materials. There are materials but there are no settings applied to any material. There are only placeholder names for the actual materials and no texture whatsoever, so only the materials and as you can see, no cameras, nothing, no environment settings. So what then? Okay, yeah. For example, for the same model, if I say sprite, new units, okay, just do this first, air missiles is the name of our model. So, okay, it should be, yeah, it populated the model directory. Now we have an air missiles folder in it and there is a blend file in it which is actually empty right now because we didn't do any importing. So close it again. So this is done only because if I want to actually model all the stuff in Blender, which means if I am doing the model, of course I'm working on Blender, so let's just close it. So again, sprite, I, which this time means import the stuff and again let's just do air missiles. And now it's started to import all the kolada files into my model. Okay, it's finished. So let's just look at it again. Yeah, now it's here. Now, as you can see, also the materials, the actual materials are here and they are actually, okay, the materials doesn't actually show the textures but anyway, the textures are there. You can just see it here. Of course, if you know about Blender. So the textures are there. Just somehow can see it in the Blender file texture. So anyway, it did the importing stuff. It replaced the materials with the actual materials I created but using the actual textures that are painted by the texture artists and I have no participation in that part. I only do the importing. And let's just see, just in case there is some files here. So sprite asset. This is the files folder that should be populated after I render the stuff. So let's just, this time we are doing the rendering. Okay. Yeah, it started to render. So it's here. This is the first level actually and yeah, this is the default animation. As we can see, it started to be rendered. And all the, by the way, all the files have different, all the units have different grid sizes in the game. So I actually, the program actually gets the grid size data and the directional data from a JSON file and renders accordingly. So, okay. This is, yeah, this is almost finished. And the other levels of the same units are actually getting rendered right now. So it's pretty easy really. When the animation comes to me from the design departments, the only thing I do is to look at the name of the animation and just do sprite and IR and the thing is rendered correctly. So, okay, it's done. Yeah. And if I can just do sprite A, which is the Atlas generation thing, somewhere here, we should see the generated Atlas of the files we just rendered. Okay. So there is, if there is something else I can... Yeah. And why using Floss? We all know why we use Floss because, yeah, yeah, the first thing is, of course, community and it's extremely easy to change stuff and which is a very good thing if you want to customize things, if you want to develop some in-house software, changing some stuff is absolutely necessary and which is when open source comes very handy. So... And also great community, of course, again. And my contact information, you can find me on Twitter, mail, websites, Github, also a free note, of course, and you can get to our company's website from x-area.com. I know it sounds like English, but not. And thanks to community and special thanks to Libre Graphics community and, of course, Blender Foundation and thanks to Emacs, OrkMod, Beamer, LibreOffice and GIMP for the presentation tools they provide. Thank you very much. Questions? No questions? So then... Thank you very much. I saw you were using a Blender internal rendering engine. Can it be modified for cycles? Yes, indeed you can modify it for cycles, but I did so many settings by codes especially for the internal. At this point, for my own project, I wouldn't switch to that because I already talked about that. How many lights are you using, for example, in that setup there? Is it quite complex? Because it looked right for internal? Yes, it's not actually... The render settings are not really too much. Probably like 40 lines, of course. So it would be changed in a day. And Blender internal actually fits for my needs pretty perfectly right now. So I'm not... This is the main reason I used Blender internal because cycles were already there when I started the project, so I could actually choose that spot. Blender internal fits better. But it's very, very, very easy because everything... I can show you later how easy it is. Thank you. You're welcome.