 Hej, díky, můžu mít Myra Horvat. Já jsem technická artista seniora at Bohemia Interaktiv v práce office. A dnes bude mít se o Game Asset Production Pipeline na velmi rychlejší projekty, který je Armory Forger. Topiče, když můžu mít můžu Bohemia Interaktiv a Fusion, technologie, zámožitě zámožit, takže, za nejvámování, nejvámování, je to vždyče zámožit. Na dnes bude mít se o jaka brzeda je výzvať Bohemia Interaktiv. Vyžívam hlavní větma do Game Asset Production for Armory Forger and Watt's Enfusion Blender tools and it's features. So, let's start. I've been using Blender since, well, this graphical user interface, it's year 2005. I actually got to Blender because it had it's own game engine, it's simple as that. Same as Martin's. Since I joined Bohemia Interactive in 2007, I also started scripting with Blender's Python API and through the years I've been using Blender for various projects, mainly creating virtual landscape for ARMA series or military simulations. So, this is actually my... I had a talk in 2016 here at Blender conference about the add-on called Blenscape tools that I developed to help me create virtual landscapes for game and military simulations. This is actually my third talk at Blender conference already. Last seven years, I work as a technical senior technical artist and I've done lots of R&D for our new proprietary game engine called Enfusion and the Armory Forger project. I'm also quite active in geometry notes since the day one, commenting on patches, discussing ideas at DevTalk, testing, making YouTube videos and here's a few of my geometry notes experiments. You may know it from my YouTube channel. So, this one is trying to generate flow maps with Mantaflow. Together with geometry notes, get it into game engines. I did it for RBG, Godot and Unreal, I guess. This is a few more videos. This is faking a lighter sensor on a self-driving car because I had a time to play with that. Not again. In my free time, I use Blender also for 3D printing stuff and having fun prototyping simple games with my son in AppBG. That's how I pronounce it. So, let's talk real quick about Bohemia Interactive. It was founded in 1999. We have four offices in Czech Republic, one here in Amsterdam and Thailand and we have around 350 employees. Bohemia Interactive has under its belt such titles as Original Operation Flashpoint. Take on helicopters. These were made with a real virtuality engine. Vigor, that one is made with Unreal engine. Y-Lands, that's a Unity engine. Daisy also, the old real virtuality engine. A bit combined already with N-Fusion. Arma series. The last project in Arma series is Arma Reforger. That was released as early access in May this year. Its first game fully made with our new proprietary game engine called N-Fusion. Arma Reforger is predecessor to Arma 4 on the timeline. Here is the trailer. Maybe it sounds if it is possible. Anyway, let's enjoy it. Mentioning all of those games, I would like to emphasize that most of our games are heavily focused on modding. In other words, we allow our community to add content to games. Either it's a new models, textures, gameplay up to a new open worlds. For example, Daisy has started a community mod to end up as a standalone game with its own team of Bohemia Interactive developers eventually. Let's quickly talk about N-Fusion engine. Two of our own proprietary engines, real virtuality and N-Force engine, got fused into one and that's our new N-Fusion engine. The development started roughly seven years ago. These are the games I already mentioned them made with real virtuality. Engine, these are the N-Force engine games, shades, alpha prime command, carry command and take on Mars. This is how the main tool looks like. It's called workbench. If I mention workbench in this presentation, I mean this tool not Blender's render engine. Workbench allows user to preview whatever game asset, either it's mesh, textures, materials, config files. And it's also a main hub. From videos, you can get to all the editors, like word editor, practical editor, animations, procedural animations, string editor, behavior editor. And here's just a really short advert of N-Fusion modding capabilities. Okay, so let's go through a very light game dev theory. First thing, LODs. You probably may know it if you work in a game dev. So simply put, it's a mesh decimation to achieve better performance. In other words, to not render details that can't be seen at certain distance. So lower the number of LOD better the quality is. So this is LOD 0, this is LOD 5. Each LOD you see is a separate mesh that is being replaced by another. And this is nothing like dissolving vertices in real time. And here you can see the LOD switching in the context of open world. So object without the colored overlay are the most detailed meshes. Red overlay is first load, green, second, blue, third and so on. Switching is not based only on a distance from camera to object, but also on what area a specific object covers on the screen. Therefore, bigger object switches to force LODs later than smaller objects. Okay, another one, it's colliders. Colliders are used in physics simulation. And for the best performance these must be easy to describe mathematically. So box can be just a diagonal through the box. Capsule is just a radius and height. Sphere is just a radius, cylinder again a radius and height. And then it's like convex collider. And in some cases when asset is topologically complex triangle mesh type can be used, but it has to be used wisely. And here's an example of how the colliders look like for the specific model. And here again you can see how physics simulations see the world of colliders. They are color coded, so the blue ones are convex. No, blue ones are convex, purple are triangular, and the green ones are box colliders. And everyone is occluders. So these are planes which basically occlude everything what's behind them. Occlude means not render, so it's again for increasing performance. Here you can see that it can't be placed into the windows because if you would look out of the window you wouldn't see anything because everything would be occluded. And now you can see those bounding boxes. These are the bounding boxes of every object placed in the open world which actually got occluded, so not rendered. OK, let's move on. So shaders, shaders you already know from blender. This is basically a material used on a mesh. In Infusion we have plenty of shaders for various games, assets like post processes, objects. Yeah, there are like tree trunks, tree crown, terrain objects, a few more for terrain and for water, ocean simulation and so on. Yeah, and this is our most complex shader called PBR Multi that mixes four materials together via masks. And plus allows to overlay some VFX layers like dirt and mud. As you can see there's a lot of textures that comes in. I guess for this one it's 21 textures. Yeah, in other shaders we use a lot of textures and various types of textures based on the texture type. In other worlds it's suffix, like in this case underscore animal. A specific way of image channel compression is chosen during conversion. Conversion actually means to convert source texture, either it's png or tiff into internal format suitable for rendering in real time. In our case it's edds format. And during conversion also midmaps are created, what's basically something like LODs for textures. Yeah, and this is the example of animal texture. It holds information above normals in red and green channels, metalness information in blue channel and occlusion information in alpha channel. Yeah, there are like, as I said, a few more. For example, BCR that's like albedo, basic color in RGB and alpha channel is roughness. Ok, let's talk about what prefabs are. So simply put it's a collection of game objects, the dark group together, that you can instance in games world. So here we have a base mesh of a church with windows and doors and any additional stuff inside. And the moment we will see what's already a prefab. So it has all the stuff in it and it's ready to be instanced. So the advantage of it is if we change something within the prefab, so either we add something or remove something or add some logic, some meaning to these objects. Those changes get applied to any instance of that prefab placed already in the world. Ok, so yeah, I guess this is it for technicalities. One thing necessary to mention that all these technicalities I've just gone through are specific aren't specific to our engine. All the aforementioned techniques are used in other engines as well. Just the implementation and usage may vary. Ok, so let's talk about Blender at Bohemia interactive. So we have over 25 Blender users. I have encountered a few programmers who also are capable of dragging vertices around. So they can prepare simple meshes for debugging or testing engines, technology prototypes they are currently working on. And the rest of the artists are using other 3D packages. Even though Blender is powerful tool without the add-ons made by Blender's great community, our game assets creation pipeline would be tedious and time-consuming. So let me thank you to developers of these great add-ons we are using. It's very helpful. Yeah, how do we use Blender? So of course mainly we use it to match modeling from small props like vegetables, beer bottles to bigger objects. Let's call these vehicles vegetation and to big structures like this church. Oh, ok, not there, but we will get there. So yeah, we also use Blender as an asset quality assurance tool, but I will talk about it a bit later. So we use also Blender to make compositions of our assets and render them as images for example this is from Armory Forger website. Our video team used it to render some scene for trailers as well. Here's a short shot from Vigor trailer and here from Daisy trailer we used cell fracture add-on and then physically simulated the fragments. Also our operation department does pre-visualization of offices before reconstruction actually happens. This is set up from another office and also we do some pre-visualization of merge. So I as a technical artist do a lot of technical research with Blender. You could already see something in the video at the beginning. And in the future releases of Armory Forger we would like to or we will also bring buildings destruction. So currently I'm prototyping geometry nodes powered tool to help us cut buildings assets into fragments. Yeah, so let's talk about game asset creation process. Typicaly process is modeling high-res machines making UVs and then making LODs out of the high-res one. And doing or making other supportive machines like I already showed you colliders or colliders. When creating LODs we don't use decimate modifier at all as it's quite unpredictable and especially with objects where silhouette must remain constant through LODs. I've been also told by artists that decimate modifier breaks UVs. So instead of using decimate modifier artists dissolve vertices and edges. So good old manual labor to make LODs optimize as much as possible. So artists have to set up objects before exporting to Nfusion. For example to let Nfusion engine to recognize LODs objects within FBX. They has to be named with suffixes or prefixes. So in this case prefixes are for colliders, suffixes are for LODs. Also they have to configure colliders. So each collider must have its game materials as we call it a sign. And it defines for example what sound to play when hit, what particles to emit or what bullet holes decals to place where bullet hit the collider. Another thing we set up is layer process which defines what objects to collide with. So you can see there's a wood dot game mat. And after this is all done, artists should do validation but that's not the case in every case. So also they sometimes don't do it but they may also do a mistake like mesh having bad topology. So there are, I call it zero length edges or zero area faces. This may happen during the modeling or maybe using some modifiers. Also when modeling convex collider it may happen that actually eventually it's not convex. Or colliders they supposed to be closed volumes having non-manifold edges or making typos when naming objects. Yeah when duplicating objects they forget to remove our beloved dot 001 suffix. This is a problem as I said because when importing fbx into a fusion engine this dot 00 gets behind the LOD. So it's not recognized then as a LOD. Oh yeah and the same problem with dot 001 kicks in also when importing assets made in autodesk products that allow to name several objects by nonunique name. When configuring colliders they may also do typos or completely to forget to for example fill the layer presets that's a custom property. And how we help to overcome these problems I will be talking in a moment. Oh yeah I even have a screen picture of it. Yeah and after validation this is allowed to export to fbx. So we use fbx as a main exchange format among all 3D tools we use in Bohemia and we also use it to import stuff into infusion. During the production we also had to solve some problems how different 3D tools manage normals. Everyone does it a little bit differently so to have all of our assets shaded properly without any visual glitches. We use weighted normals modifier in all 3D packages maybe it's not called the same one the same in all of them. And yeah weighted normals also led us to avoid of making additional edge loops for better smoothing thus decreases poly count and that's what we want for real time. And yeah fbx lifecycle so we have to be able to open any asset store in store in fbx in any 3D software by our artist. Because for example one does model in blender and let's say manager needs to do review in Maya for example or happens that artist leaves company and someone else has to overtake this asset and he uses completely different application. Yeah so this is the life cycle and as you may already guessed it's not always a painless process it hurts so what happens Autodesk users using groups and layers lose them if fbx is resaved with blender or vice versa. If blender or blender user lose collection they typically use it for a better organization of the scene especially when there's like really like hundreds of objects. In some cases when using a wrong fbx version when exporting from Autodesk products custom properties got lost and this was really tricky to figure out because these custom properties are hidden it's not really visible that they are not there so we just found out when we imported to infusion and something wasn't working. Oops and added bone some of you may know this phenomenon when importing fbx with skeletons into blender and exporting it back to fbx blender ads on bone and then compatibility with Autodesk products is broken. It actually also got broken in infusion this was this breaking animation thing in infusion was fixed during or on the side of infusion during import but the problem is that. It's still in this fbx life cycle so if someone opens the skeleton in motion builder it's broken. For some time internally we use better fbx add-on which solves this I would get inspired but this is actually well it's add-on but it's just an exit file I can't take a look inside. And my other notes here so. I would like to mention vegetation creation process because vegetation is all vegetation assets were made purely in blender. So when I asked our artist why we haven't used other commercial tools for procedural tree creation a generation back then. Two three years when there was a pre-production they weren't able to cover whole pipeline in one tool. And in bed in blender they were unfortunately manually but they were able to do it on time. Yeah so here's a quick look at how it's how it's done. So typically we first bake foliage atlas textures. All these textures are either either taken by a by camera or we buy three models on the internet and render them. Then then we build a 3d branches from those atlases. That's the bright image and after that we build a whole crown out of these 3d branches. We also experimented with 3d scanning of the trunks because in a first person shooter when talking about trees the trunk is most visible part from a tree because player can reach it easily. So that's why we pay attention to details at this lower part of trees. And when I said that this whole workflow was manual there were actually a few scripts written to wrote actually to automate some parts of the development. Ok and let's move on to infusion blender tools. So because of previously mentioned issues as well as time consuming and tedious pipelines we decided to develop a tool to increase productivity of our internal artists as well as community of moders. And infusion blender tools or EBT for short is a typical blender add-on installed from a zip file and these features can be found here and there. Currently the add-on is available on steam as part of fork bench or infusion tool suite. Currently most of the features are bound to Armory forger but once we have more features that would be handy even for blender community we will release it probably on a GitHub. So let's talk about EBT features. So the first one is model quality assurance feature that checks through every game object in the blend file and reports on objects having invalid data. For example in this case usage property or layer presets I mentioned on colliders is empty or layer preset name from a pretty fine set, pretty fine list isn't used. User can select the object and fix it via object tools, another feature I will get to it in a bit. And in case user checks one of those mesh topology checks besides it reports on objects with invalid meshes it also automatically assigns mesh validator which is a geometry nodes modifier that shows issues in real time. What I mean by real time it highlights invalid topology and in the reports how many such issues is present and the cool thing is that you can see how it is being fixed in real time. So the overlay got removed because it was fixed. In this case it was the non-manifold edges and you can see there's like zero issues. So cool thing also about having it real time like changing for example the face area is that besides you can or it can mark zero area faces or zero length edges you can basically drag the slider because sometimes it's not just really empty. You can see all three vertices on one place but it may be really small one, very small face but you know it's invisible because this is really simple geometry but huge structures, you can't find it there so you can basically drag the slider and identify all the issues, all the cases. You probably remember this one so this issue basically gets also checked and reported so user can easily fix it otherwise .001 suffixes would cause as I mentioned the problem with LODs recognition during the import. Yeah, batch fbx export so when artist creates asset from scratch in blender it typically does the base mesh on this picture and also all the additional stuff so he has the reference how big the doors windows should be and as you can see in the outliner there's tons of them and all of these like base mesh and the additional stuff has to be exported to separate folders to separate fbx files. Yeah so you can see it here and therefore we added batch fbx export so where user basically just selects the collection which he would like to export says the folder and press batch export fbx and all the fbx get exported into the folder. Yeah, material preview feature, this one mimics and fusion shaders I already showed you in blender to visually assist users while creating a model from scratch or to help creating additional data like baking textures for last LODs and more. Here's a example of PBR basic shader in blender so on left there's blender, on right there's workbench so not workbench in blender but other workbench and here's PBR multi. So this is how all the shaders inputs look like, there's UV sets, sources, UV transformation for each texture and so on. And yeah this is the guts of PBR multi shader. At the beginning there's masks processing as I told you that you're using masks to blend all those four materials. There's color processing which is basically albedo textures, roughness processing, metalness and at the bottom normal normal normal processing or normal maps processing. And at the end all of this it's plugged into principle BSD shader. OK, so let me quickly explain why I said material preview only mimics and fusion shaders and it doesn't give exactly the same visuals as in fusion. So you already know also Martins mentioned it that we can't write shaders in GLSL and compile it so we have to do it with node editor or shader editor. So therefore it's quite challenging task, excuse me. Also the implementation of PBR it's a bit different, maybe quite different in an infusion and also in blender. Unfortunately nodes that would give for example gbuffer information are also missing. We use this information for our decals shader in infusion. Also the way how blender threads alpha information is a bit different than in infusion. For example alpha test or alpha clip is not allowed in alpha blend mode. It's only available only in alpha clip mode. Now I'm not sure what is this video about. OK, can I stop it? Also another problem is that shaders in blender use source texture formats like PNG or TIF. Whereas shaders in infusion uses compressed edds textures and because of compression they may be visual differences. For example on this picture. So when playing with alpha clip slider in this case the same number for alpha testing and multiplication are used but it gives a bit different result. And also because of all these aforementioned issues we can't support all infusion shaders parameters via material preview. So as you could see on the PBR multi the big one we support just a small fraction of it. OK, so let's have a look how we actually get textures or the assets with infusion shaders into blender. So all user needs to do is import asset via our custom FBX import. Here you can see just the reports that some of the materials are not supported as I mentioned. And also it may it may represent some source textures like TIF PNG is missing. You can also see in the outliner that custom FBX import also creates the dedicated collections based on what meshes are in the FBX. It creates all of these collection colliders collections. So it's easier to navigate in the outliner. And via material preview feature users are also allowed to edit materials, imported materials for these custom panels were added into the material properties. But editing material properties is only local right now. It means that the changes can't be exported back to workbench, but we're trying to figure it out. But still user can do the edits in infusion. We can change UVs on this material and the color on this one. The material has to be saved. And then just click the update materials. You can see the changes in UVs and the color. In case an artist is not getting what he expects to get while setting up shaders, workbench gives him opportunity to debug what is going wrong with by switching the debug channels. So we have it in infusion, but also in blender. This was the mask for the masking of all those four materials on PBR Multi. Last of all the texture baking. And typically all the upper or maybe lower LODs, they use like higher textures, but for the last one, the worst one, all the doors and windows has to be baked in the texture. Just as I showed you, the base mesh of the doors and additional stuff. You can see it here. This is the prefab with all of them. And so one of our artists actually found a handy usage of material preview feature. So he basically imports all the necessary assets in the blend file and begs it into the texture, into low-res texture. Another feature is terrain import and export. So we can import it from road editor to blender, do some changes and get it back to world editor. Even though our road editor has terrain sculpting tools, sometimes we need more precise editing. For example, sticking a custom-shaped mesh via geometry nodes. But this one is stupid one, but here actually you can see the terrain elevation is split to lanes, each having a certain slope to help testing and configuring physical properties of vehicles. In other words, how vehicles engine supposed to behave on certain slopes. So this is one of the possible use cases for the terrain import and export. We also support P3D import. P3D is a mesh format for real virtuality engine and basically old armor. Community has made thousands of assets saved in this format for the years and they would like to convert their creations into armory forger, so they just need to import the P3D files into blender and set up meshes and export them into FBX. Next one are object tools. Object tools helps quickly sort objects into collections. I already showed you in FBX import. Also, as I mentioned before, colliders have to have their properties set up, so physics, sounds, particles work correctly when player interacts with game objects and EBT provides quick way of setting properties by retrieving list of the settings from workbench. I will talk about this retrieving thing in a moment. So here you can see list of all available layer presets and when user picks it, its objects gets set via custom property and here are the game materials. The hash or unique ID at the end of the materials name helps to pick right material from resource database when importing asset into infusion. Animation export. User can make multiple animation within blend file and via EBT he can choose which ones to export at once. We support also export profiles. This basically defines which bones per each animation will get exported, so for example, here you can see them here. For example, user may want to export full body animations or just restrict it to upper body and we also support the additive animations. A cool thing is that once animation or any asset is registered in infusion, it's just about saving it and just switch to workbench and it automatically speeds up the prototyping stage. As I mentioned about retrieving information from infusion, in the first version of infusion blenders, we were retrieving all the necessary information and parsing text files. This one is material or the shader to get all the material properties so we can import them via material preview feature. This one is metafile. That's an infusion mesh, a metafile for infusions mesh object. Among other information it holds also a mapping of material name in blender to material used in infusion. That's the assigned material. This is the list of layer presets we used to fill a drop-down menu. You could already see with the settings. For the next release of infusion blender tools, we decided to let EBT to communicate with workbench via TCP-IP protocol. The way of retrieving data data is solid and future proof. Internally we call this feature bridge and it's part of our upcoming release. It works the way that we send requests from blender with information what infusion script to run the input parameters and workbench runs the infusion script and returns the result back. This is how it looks like in Python. The new way of connecting blender to workbench opens new possibilities that we are currently exploring. Here's one of them. This is a map in infusion. Infusion's word editor that I use as a testbed for testing geometry nodes here is the same location in blender and by just dragging the density factor we can generate points that represent trees' location and just send them to world editor. It's basically a trivial demo but you get the point where or how endless the possibilities opens up. It's necessary to mention that in infusion we have great tools to generate forests, roads, even rivers. This is really just some ideas what can be done with, for example, geometry nodes and the bridge support. Guys, this is it. Thank you for watching. I'm not sure if there's some time. OK, it's not, so let's meet up.