I have recently been thinking about the methods that Blender uses for it’s procedural textures, from the point of view of making realistic materials, and it seems that there is room for improvement.
My thoughts are these:
For general use, (noobies) it would be easier to have a set of preset materials to choose from. This would allow more complex and realistic materials to be used straight off, as they would have been created by A.N.Other, rahter than by tweaking the specular and the colour of the default material.
All materials should really use a node type system.
The node system should allow any meaningful variable in the procedural texture to be modified by the output of another texture. Thus you can cause the wood rings in the wood texture to move aside to allow a ‘knot’ from a voronoi texture to poke through, or a cloud texture to vary the depth of noise in another cloud texture.
There needs to be the option to vary the probability of a texture feature to occur. There also needs to be the possibility of mapping an imported texture, such as a photo or painting, or another procedural texture, into each feature of another texture.
What got me thinking is that to carry out a photo realistic texturing of an everyday object is extremely hard. Take a table. What makes it seem real is the day to day wear and tear, - or scratches, in other words. However, if we had a table of 1*2 metres, and we wanted to paint an image for the scratches, assuming they are 0.1mm wide,we would need a minimum image size of 10,000 by 20,000 pixels. Given that we might want scratches at angles, to avoid jaggies, we would need ten times this. So, it is totally impractical to use a painted map.
We could use a small map and repeat it, but then we would get a tiled effect.
So, what we need to be able to do it take a small image of a scratch ( or a procedural that mimicks a scratch), and drop it at random all over the object. (It would be better to use a procedural if possible, as then we wouldn’t have to UV map around edges etc.) Likewise, we could create a texture of a ‘pit’ of rust, or a ‘flake’ of paint, and repeat these at random. However, we don’t want to just make them equally random all over, then fade them out where they are not supposed to be. Paint is either flaked, or not, it isn’t flaked flatter, niether is rust pitted smoother, etc. It either is or it is not. Variations in depth do occur, but not necessarily related to where the effect is. Thus we need to vary the probability that a pit, or a flake, or whatever, will exist, dependent on the underlying texture. Paint tends to flake with cracks along the ridges of the wood grain, for example. Rust starts with a few spots, and then they merge into one another…
Another possibility would be micro-distortion of the surface, so that textures can alter the underlying mesh without it having to be sub-divided. This would allow a brick texture to make the edges of the object truly rough. This is another order of magnitude more complex, of course.
I’m not going into the details of implementation here, just trying to get an idea of what others think, and other ways this could be added to, before thinking about putting together a proposal to the dev team.
Matt