For the longest time I've struggled with how I wanted to handle materials in my graphics framework. When searching around for existing solutions I found basically two things.
A: Shaders with strict inputs:
A single shader that had specific inputs that were textures, floats, etc etc.
B: Node based shaders:
Crazy flexible graphical editors for materials...