I recently was a tutorial use substances in Unity3D. I understood that a Substance is a material we can dynamically manipulate at run time, but I am still unclear about it. Could someone shed some light on this?
Substances are basically dynamically generated materials.
There main purpose is to take the grunt work out of generating tileable materials like bricks and stone roads and the like. Basically artist wont have to spend time dealing with things like aligning seams and what not.
They also have the advantage of drastically reducing the amount of textures stored on the disk.
They also are resolution independent meaning that you can create the texture at runtime to be as detailed as you need depending on resolution.
This does not however come for free the texture will still have to be store in memory and will cost you as far as RAM consumption.
So you will have some input textures that will be used to dynamically generate your substance.
Wether you should use them or not depends on totally what your trying to achieve. They are particularly useful if you want to say have multiple looks applied to the same object at different times in your game.
The tech that unity uses is from this company http://www.allegorithmic.com/ and if you want to truly take advantage of this you will probably need to buy a substance editor from them as they make it pretty easy to build different materials.
They have some cool tools just be aware of the performance implications.
So a practical example of use would be:
Say I wanted to make a game where the same environment would look aged when the character came back to it years later.
You would build your substance so that the sliders will expose some cracks on the table and perhaps even some peeling of the finish. All changeable during runtime. With some exposed parameters also changeable in the editor.
Example of that is here ---> https://www.youtube.com/watch?v=AxAw7LIqIKM
They are dynamically generated textures. http://www.allegorithmic.com
Substances are created with substance designer using stock images, vector graphics, code functions, or other substances to generate a new texture. Substances are VERY convenient and and nice. They really shine when you want to add variety to textures while keeping disk size low (as long as the substance is built correctly).
You can also have unity generate a new substance variant at runtime for individual game objects. Although, the you would need to check if the substance is finished generating the texture as each substance has a runtime as well before applying it, otherwise the object will appear solid blue until it is finished.