# Research Notes

## Jan 30 - Feb 5, 2017

Possible generators

1. World Machine :: xml scripting PG; Meant to be a piece in a larger workflow.
2. Unity 3D

Possible Workflow(s)

 Including possible human elements?
World Creator to Unity 3D? (stealing/blending unity code?)


Notes

• The most important envirogen notes

## Feb 6-13, 2017

• Explored Unity's scripting capabilities.
• I found that world generation is possible on the scripting level. However, is too time expensive.
• Found Unity World creation plugins.

## March 13 2017

• Houdini typically does work in nodes.
• Python scripting when nodes don't provide enough functionality.
• Once we create a network of nodes which can generate a terrain, python scripting can let us have access to those nodes' parameters.

## July 12 2017

Files that have parameters we need to edit for generation are…

• Stamper.cs
• TerrainHelper.cs
• GaiaSettings.cs
• Spawner.cs
• GaiaGenerics.cs
• GaiaResources.cs

Most of these files have a ton of variables which we do NOT want to edit for generation. So, I've started collecting a list of variables we do want to edit and from which file they come.

The Unity part of the project needs to have a file for setting variables. The file has data structured like so… name_of_the_file_where_knob_exists,name_of_knob,type_of_knob,list_of_values_important_in_creating_variable_of_before_mentioned_type Lines where // is found at the beginning are ignored.

I created a file reader for this settings file. It marshals the data into 3 nested objects a setting object, a setting_collection object, and a setting_collection_collection. The setting object holds the property name, type and values. The setting_collection holds the name of the file where the setting is found and has a list of setting objects. The setting_collection_collection holds a list of the setting_collections. Since we're going to need to edit multiple files in the project, I thought it would be good to group all of the settings for one file in one object.

I've tested the above file reader and it works well for the types of settings that I've decided to start with. The settings vary widely in their typing. Idk if all types will be supported now.

I have not yet attached the file reader to the gaia project yet. That part of the project needs at least the following to be ready to work.

• I have to figure out where the main of gaia is. It's alluding me as of now. Or if there even is a main like function. From the Unity reading I've done usually there is a start() function where things are kicked off. Gaia of course doesn't have one.
• I need to decide whether to edit all of the above files to have constructors which take the parameters I've stored in the text file OR I need to add a ton of setter functions. I'm leaning toward setters because I can't find the main-like function for gaia. If all else fails I can insert a function call somewhere near the end of the construction of everything. That function can then call all the appropriate setters for each of the files.
• Terrains! So, the settings file needs to know about all the terrains and possibly all of the props. This is because I have to tell gaia in which order I want to stamp terrains and what terrains.
• At least programmatic automation from the start up of gaia. This means being able to programmatically 'click' the various buttons in the gui to kick off different processes. The other option is figuring out gaia enough to create an all encompassing function which calls everything it needs to make stuff happen without the gui. This is preferable in that I'll have more control potentially. But it means I'll be mucking about in code that I don't understand most likely leading to bugs I might not be able to figure out…. I think I'm leaning toward the gui button 'clicky' option.

I think if the above is accomplished I should be able to change the settings of most of the project.

Other things I've been researching or doing over the last months…

• Finding props(models, textures, effects, sounds) for gaia
• learning to create spawners for gaia
• automating Tenkoku
• got word-to-vec to work
• I've created a smallish corpus to train w2v. It is composed of popular fantasy novels and famous poets. I figured that I wanted words that would better fit our outdoor setting and want descriptive language.
• looked into image-to-vec. Could be useful if it works. Hopefully DARCI can pull up the slack if i2v doesn't work out.
• contacted the creator of gaia, Adam Goodrich, to collab on Envirogen. But it seems he is too busy to help.

## August 15 2017

1. From W2V choose a word to generate off of.
2. If we've generated for this word before.
1. Search for the best iteration settings and regenerate or take from previous generation.
3. If we haven't generated before but we have a “close” relative.
1. Take best iteration settings and use that as a seed. Create enough generation batches until the user is happy with result.
4. If we haven't generated before and there are no “close” relatives.
1. Let user know there is no close word and no previous generation. Ask “Do you want to start training for that word?” Take best iteration settings that are closest and use that as a seed. Create enough generation batches until the user is happy with result.

Generation Folders

• The word that is generated off of
• Different generation batches
• All of the siblings for a generation
• Game.exe and settings file
• Settings file will need to have relation information about the other siblings, and its parents.

Training

1. Manually setting the initial settings for words.
2. Generate 9 other similar setting groups. There should be a total of 10 settings for a word.
3. Generate the environments for each of the settings.
4. User is given 2 files to compare at a time.
5. User enters input on those 2 files.
6. Repeat steps 4-5 until all combinations are evaluated.