Hi to everyone, some time ago I asked a question about the API for plants. As API of such kind is not implemented yet I listed a small suggestions about plant API that can be possibly added to allow creating custom plants with plugins or modify existing plants (probably) here.
This is a list of how plant can be defined:
- Plants have a unique ID by type (with key set plugin-plant-name -> integer number) if Rising World on Unity uses plant IDs like Java version. This tale will aloow safely add and remove plugins with plants;
 - Any plant can be defined as a list of mesh objects (probably in OBJ format);
 - Each plant have a vertex color information how wind should be applied to it (for example – red color gradient);
 - Each plant has an instance of shader with texture mask (single texture with 3 channels) for sub-surface scattering (leaves, red channel), glowing parts (for plants that can glow, green channel) and refracted parts (blue channel);
 - Plant can defile its LOD (for example LOD1 and LOD2) to improve game performance, the most distant LOD is a simple geometry with plant image and it can be generated by the game itself;
 - Plants can have a specific events like cutting event to make possible change default plant behavior to something unique or add additional functionality (like collecting rubber from Hevea or collecting fruits);
 - Plants can be one of 3 suggested types:
 
Tree Plant (Cuttable Plant)
- Can be cutted with axes or other tools (probably the tool can be defined in plant to allow users create custom tools to cut plants);
 - Will drop its content after cutting and leave a stump;
 - Stump can be uprooted and can define its drop;
 - Models are stored in a list of 3 separate lists (or in multi-indexed array) – random variants of upper parts, stumps and full for each plant age, all 3 lists have the same length and parts have the same indecies to make cutting operation smooth (without model changing);
 - Drops will be scattered across upper plant model part.
 
Bush Plant (Collectable plant)
- A small plant that will be collected;
 - Models are stored in a list of lists (or in multi-indexed array) – random variants for each age.
 
Grass Plant (Ambient Plant)
- A small plant that will be added to grass material depending on biome;
 - Is a 2D texture with defined size;
 - Couldn’t be collected.
 
How plant shader can be organized:
- All plants can use the same shader with complex behavior;
 - Texture mask for sub-surface scattering (leaves, red channel), glowing parts (for plants that can glow, green channel) and refracted parts (blue channel). This will alow make plants of almost any kind – from bioluminescent mushrooms (which are technically not plants but can be defined in this way) to any kind of tree.
 
Sub-surface scattering
This is a common shader technique for thin plant parts like leaves as they will scatter light. There are many different approaches on it
Wind mask
Color/Colors baked inside model vertices, colors can indicate different reaction on wind
I hope you enjoy the idea of such API, discussion and criticism are welcome ![]()
		
		
		
	