= Customizable Objects, Classes and Populations
TODO: Diagram of how this works at user level
= Population Class
This is a new type of asset added to Unreal Engine. It defines which customizable object is itthis class based on and what are theits characteristics of this classistics. Each caracteristic is a limit to what are acceptable options for one parameter and its relative chances of appearing on random instances of this class generated by a population. Depending on the type of parameter, it allows setting how common it is to find certain parametersoptions, choosing a single optionvalue as valid, andor even using a curve to define the chances of appearence of continuous numeric values. The class also allows blacklisting and whitelisting integer and boolean parameters via tags, both globally and on a per parameter basis.
You can create CustomizablePopulationClasses from the Content Browser Add New menu:
This is a new type of asset added to Unreal Engine. It produces random instances, and defines which and how often the population classes are created when generating random instances of the population. It allows a single population to create instances from multiple different customizable objects and or from the same customizable objects but from different classes.
You can create CustomizablePopulations from the Content Browser Add New menu:
Its customizable object instance generation algorithm is updated each time the population or the population class are saved, using the parameters from the customizable objects of each population class at that time.
It's also updated when the project is packaged, so it's ensured to be up to date.
= Population Class Editor
The left panel is to edits the Population Class. It's used (1) to choose which Customizable Object it is based on, (2) to define characteristics of that class and (3) to set the global population tag whitelist and blacklist.
Each population class defines constraints: they define what values will be found in random instances of the class, for each parameter, and their chanceThere is at most one characteristic per parameter that the base customizable object has.
At most it can have one constraint per parameter that the base customizable object has.Each characteristic is defined using constraints: they define what values will be found in random instances of the class, for each parameter, Different types of constraints can be used depending on the parameter typeand their chances.
Different types of constraints can be used to define a characteristic depending on the parameter type.
Any parameter that is not specified with a constraint,valid characteristic will be randomized, with each of its options having equal chance of being on an instance generated from this particular class.
Any parameter that is ill-defined will also be randomized as if it was not defined at all.
Tags are used to indicate that certain parameter options should be found or not on population classes. That is done by whitelisting and blacklisting those tags.
Tags are created on the tag manager, using the search function. When you search for a tag that does not exist, it's automatically created.
Tags can be assigned to each of the options of an enum individually, as well as to boolean and integer parameters.
Each population class has a general whitelist and blacklist, to define in broad strokes what will and will not be found on instances generated from that class.
Integer and boolean parameters, then can have tag constraints set on them. Those constraints override the general whitelists and blacklists when it makes sense, but only for the specific parameter that is defined by the tag characteristic. This allows us to specify exceptions to the general whitelists and blacklists to fine tune specific classes.
The tags are stored in the customizable object, so different population classes of the same customizable objects have access to the same tags, on the same parameters and parameter options.