|
![](/i/fill.gif) |
There are several drawbacks I see in POV-Ray's highlights syntax:
- Phong and Specular are basically redundant; you only need one of the
two in any material.
- Although they basically do the same, the parameterization of Phong and
Specular is different.
- Neither Phong nor Specular highlights are implemented in an "energy
conserving" fashion; that is, changing the parameter not only changes
the size of the highlight, but also changes the total amount of light
reflected in this manner, making it difficult to find realistic
settings, let alone keeping them in "sync" with reflection.
(This difficulty to find realistic settings also appears to be the
reason why highlights are not taken into account for radiosity sample
rays; theoretically they should be, while a comment claims that this
"causes problems with colors being far too bright" - which is actually
an indication that energy conservation is violated somewhere.)
I therefore propose to phase out the existing syntax in favor of a
different one - including different interpretation of the parameters - ,
along the lines of:
highlights {
specular // or "phong", choosing the model
0.3 // brightness of the highlight
roughness 0.01 // value controlling the "spread" of the highlight
}
where...
- a brightness parameter of 1.0 would /not/ be interpreted as "/peak/
highlight brightness = incoming light brightness", but rather "/total/
highlight output = incoming light input" (that is, changing the "spread"
of the highlight would cause the peak brightness to diminish
accordingly), so it can more easily be matched to diffuse and reflection
parameters [*]
- roughness would be interpreted as currently in specular highlights;
for phong highlights, a correction factor would be applied to make the
highlight size roughly equivalent regardless of choice of highlight model.
[* this would allow for the rules of thumb "diffuse + highlights < 1.0"
and "highlights = reflection" to get somewhat realistic results]
The new syntax, as proposed above, would allow for the old one to be
retained for a while (old syntax would continue to use the old
parameterization schemes of course, i.e. the main parameter indicating
peak brightness) and just cause a deprecation warning. (To begin with,
phong and specular could still live side-by-side when using the old
syntax, in case anyone happens to use them simultaneously.)
Comments?
Post a reply to this message
|
![](/i/fill.gif) |