Thanks for the reply, I think I have it clear now.
I use :
pSceneNode->getMaterial(i) = m_material[i]; // Assign unique material to each node
pSceneNode->setMaterialType( (E_MATERIAL_TYPE)sShader[ iShader ] ); // Set shader, same for many nodes
Then in OnSetMaterial:-
virtual void OnSetMaterial(const video::SMaterial& material)
m_tintcolor = material.DiffuseColor;
I can access the unique material for each node, and "borrow" one of the colors, such as Diffuse, and use it for the shader, because the shader does all rendering, and the diffuse and other colors are not in use.
Is that basically how to do it?