Specularity, Glossiness And Reflection
The Need For Some Shine
Okay, before the debate begins to rage as to whether or not to actually use specularity, or just stick to reflection mapping, let's first assess the necessity for shininess in the first place.
Basically, without shininess, an objects surface appears flat, and does not really "react" to the light shining on it (of course, the fact that it has a colour means that is it reacting in some way to the light, but I'm talking more in terms of visible "highlights"or "hotspots" here).
Figure A – without some kind of shininess this metal and the leather would appear extremely dull and flat.
Highlights on a surface give us an idea of how the surface feels – whether it is smooth or coarse (not in terms of the objects topography, which is generally defined by the bump map), whether it is hard or soft, dry or wet, old or new, greasy or slimy, and so on and so forth.
Another extremely important thing detail it relays to us is the objects everyday interaction with the world – by altering and breaking up the reflection of light on it's surface, we can get clues as to how the object is handled by people, or how it is used in the world. In other words, it shows us how the world and it's inhabitants have left their mark on it, so to speak. For instance, a wineglass is never really 100% squeaky clean – look closely at it, and you will see oily fingerprints, faint grime from general handling, smears from the last time it was washed, and an entire host of other greasy smudges, abrasions and dusty marks. These all affect the shininess of the object by lessening them. On the other hand, interactions can increase the shininess – for instance, an apple that has just been polished, will have brighter, shinier spots where it has been polished harder.
I think that we can all agree that the surface definitely does need some attribute to show the way in which these sort of things affect and wear an objects surface over time.
Finally, the most obvious need for this shininess is to show that the way in which local light-sources are affecting it. Of course, this is where the debate begins – does one use specularity, or reflection?
To add more substance to that question, here is a little refresher course on light:
As we all know, we are able to see things because of the way that light is reflected off things around us – the reflected rays shoot into our eyes, bounce around a complex setup of lenses and things inside our eyeballs, thus enabling us to see this wondrous world around us.
So, basically, when setting up textures in CG, we have to bear in mind that we are dealing with reflection of light, and therefore creating the "instructions" for how the light should be reflected off the objects surface by creating texture maps, right?
Every detail we see on a surface is there for us to see because light has bounced off it and into our eyes, showing us what the surface looks like.
To sum it all up – shininess is the reflection of light – the stronger the reflection, the shinier the object.
So, how do we set that up?
This brings us back to the question – do we set this up using specularity? Or reflection??
To fully illustrate both sides of this question, let's look a little more closely at these two options…
Specularity – The Big Fake
Okay, so what exactly is specularity?? In reality, the effect known as specularity in CG is actually called specular reflection. A dictionary definition would describe specular as a "mirror-like quality".
However, unlike it's real-life equivalent, the effect of specularity in it's 3D package incarnation, as we are familiar with, is actually quite different from the reflection option in any surface editor.
Specularity is basically a way of faking the reflection of light on the objects surface.
Let me explain.
Technically speaking, when you see a highlight on an objects surface, it is actually a reflection of all local light-sources. For instance, if you place a fairly shiny plastic cup onto a table in a room that is lit by a single lightbulb, you will notice highlights all along the surface of the cup (and the table too, obviously, but we are concentrating on the cup in this particular example). Now, if you look really, really, really closely at these highlights, you will discover that in actual fact they are reflections of the lightbulb itself.
Obviously lots of surfaces don't have very tight, defined hotspots which are as clear as they would be on a plastic cup, but all that has happened is that the reflection has become more spread-out, a property which is controlled by the gloss amount, which will discussed a little later on.
So, having said that, you may be wondering why I said that specularity is fake.
Specularity is fake because it doesn't actually reflect the light-source in the same way that the surface would in reality, instead it just gives the illusion that the surface is reflecting light.
In other words, it shows highlights simply because there is light shining on it. It isn't actually reflecting anything as such. You could, for instance, shine a spotlight onto the object, and when it renders, you will see a round hotspot on the surface, not an actual reflection of the spotlight itself.
Basically, specularity gives you round hotspots, that you can break up a bit using specular maps.
Figure B – Specularity creates round hotspots on your surfaces.
Reflection – The Real Deal
Fake not good enough for you? Well, reflection is pretty self-explanatory. Using reflection on the surface will obviously allow the object to reflect its surroundings and local light-sources correctly. No need for any in-depth explanations here, as we are all aware of what reflection is and what it looks like.
Figure C – Using reflection allows the surface to reflect its surroundings like a mirror.
The Big Showdown – Specularity VS Reflection
Right, now that we understand what specularity is and what reflection is, we can look at the argument as to whether to employ one or both in a surface.
Why use specularity if it is fake?
A fair question. I guess there are 2 immediate answers to that question:
Firstly, specularity renders faster than reflection. Accurate reflections require complex raytracing which takes a lot longer to render that specularity. In order to utilise reflection in most software, one has to activate a reflection option in the rendering settings, which adds time to the render in order to calculate the reflections. And we all hate waiting for renders.
Secondly, reflection almost always makes objects begin to appear mirror-like. To go back to our earlier example of a plastic cup, if I want to make a plastic cup that should be realistic, using reflection instead of specularity is more than likely going to make the cup look unnecessarily mirror-like.
Perhaps plastic isn't the best example here, as it usually is a bit reflective as well as shiny, so let me give another example – wood. Wood that has no varnish on it, and is fairly dull, and really doesn't appear reflective at all, will nevertheless have a hotspot (however faint and spread-out it might be) on it if you shine a light directly onto it. Giving the wooden surface a certain amount of specularity will allow this hotspot to show on the surface without it reflecting like a mirror, which is what would happen were you to use reflection instead.
The same goes for cloth. Look at the clothes you are wearing – light is creating highlights on your clothes – these highlights are especially noticeable on folds in the fabric, where it is catching the light. Fabric, however, is most certainly not reflective in the sense of reflecting objects around it. So using specularity instead of reflection in this case is more feasible too.
All this is rather mind boggling when you consider the fact that the reason that objects appear shiny in the first place is because they are, technically, reflecting light.
So even fabric is technically reflecting light. So is dull wood. It's just that using reflection is CG tends to makes these surfaces look too mirror-like.
On the other hand, if you are wanting to recreate reality perfectly, then it would make sense to use reflection, as this is the physically correct method.
So, which one do you use????
I guess this is the bit where I am going to tell you to use basically whatever you think looks good. This argument can go on and on, but in the end I always think that if it looks good, use it.
Yes, reflection IS the more realistic way of doing it, in terms of physics. That is easy enough to understand. It's just that, more often than not, the results of doing it like this tend to end up looking wrong.
What do I use? I tend to use a little bit of both. I have always used specularity, and I use reflection to enhance my specularity. However, I have seen some great work done without any specularity whatsoever. I guess it really comes down to individual methods of doing things.
Figure D – our trusty sphere with both specularity and reflection applied.
Having said all this, the cool thing is that making maps for specularity and reflection is exactly the same, as they are logically doing the same thing – defining the shiny areas.
So, how about some tips for working with this stuff?
Here are some useful tips and trivia for making specularity and reflection maps, and working with these attributes when texturing:
Variation! No surface in reality has a perfect, consistent shininess. Everything has been touched in some way by something – whether by people, animals, the weather, or anything else. These things will leave fingerprints, smudges, scratches and other artefacts that will lessen the shininess of the objects surface. It is important to include details like this, as even if they may be really small and almost indistinguishable, they are nevertheless essential details for realistic real-world surfaces.