First we need to make a distinction between 3 types of models, summarised as such:
- **Props**: Models representing objects in the world, maybe interact-able, maybe static, maybe even animated, basically, everything that is not bolted down. These files go into the directory `assets/meshes`
- **Environments**: Floors, Walls, Door frames ecc. The basic structure of the world and what props are placed onto.  These files go into the directory `assets/levels`
- **Environment Tiles**: The modular components of which the environments are made of, don't necessarily need to be fitting in a square grid but they can be assembled together with other tiles to create the environment. These files go into the directory `assets/meshes`

After Consideration in our pipeline we are gonna abide by the following format:
- Environment Tiles are together in their own `.blend` file and [[Model Generation Pipeline#How to make an tile-set file and mark it as an asset library|Marked as Assets]]
- Level Environments then get their own `.blend` file that uses Blender's [Asset Library](https://docs.blender.org/manual/en/latest/files/asset_libraries/index.html) function and [[Model Generation Pipeline#How to make Environments using the Asset Library|Link Overrides]]
- Props should generally be thematically separated in their own `.blend` file, if separating part of the file is needed follow [[Blender Import Considerations#Separating meshes from `.blend` files with multiple objects|This Tutorial]]
- How to handle materials is still being taken into consideration.

## How to make: tile-sets file and asset libraries
---
Making an asset library is relatively easy, assuming that you have a blend file with meshes separated by objects and organized in collections, you can mark ***each object individually*** as an asset by `right click -> Mark as Asset` in the `Object Hierarchy` panel, this will add a library icon to the name. 

Then opening the `Asset Library` panel, from the drop-down choose the option `Current File`, once selected you will see an `Uncategorized` group on the left. This will contain all the assets that have not been assigned to a named library or group. These already work like this but for ease of use group them as follows, by clicking on the `+` icon to add a category:
- `file name` or `theme name`
	- One sub category for every collection that you have organized the objects in

This will create an easily searchable library to make environments in other files.

## How to make: Environments using the Asset Library
---
Starting with an *empty* `.blend` file, if you have not already done it go to `Preferences -> Asset Library` and add a pointer to all the folders containing the needed tiles files.

Then in the [Asset Browser](https://docs.blender.org/manual/en/latest/editors/asset_browser.html) panel you will see all the categories that have been defined in the other files, from this you can choose any asset and place it in the scene. 

**Special consideration needs to be taken for the asset copy mode**, this option is found in the top middle of the [Asset Browser](https://docs.blender.org/manual/en/latest/editors/asset_browser.html), it is a drop-down menu that most likely is set to `Follow Preferences`, make sure that it is set to `Linked`, by default it behaves like Append, unnecessarily duplicating meshes that then get re imported into Godot. 

With the `Linked` option set whenever you drag an Asset into the scene you will notice that it cannot be moved. By default a Blender link takes everything from the original file in an immutable manner, to fix that with the object just dragged selected go to `Object -> Link Override -> Make`. This will create a sort of *smart link* that will allow you to move/rotate/scale the object but still maintain the reference to the original file. 

Then to add another instance of the object just use `[Alt + D]` to duplicate the link and then reposition it. This file is then ready to be imported into Godot as a single Node. 

## Some notes on Live Update of meshes
---
- Imported environment files are 2 degrees of separation from their origin in their `.blend` file, more explicitly: `Godot Node -> Environment file -> Tile-set file`. Godot can only detect changes from 1 Degree of separation, but Blender doesn't have such limitation. Therefore any edits made on tile-set files will be represented in blender but not in Godot, this is because technically nothing changed in the environment file, and Godot detects nothing, to mitigate this just do a *quick save* on the environment file, this will force Godot to do a re-scan and update it's own meshes. 