|
|
"fidos" <fid### [at] wanadoofr> wrote:
> I replaced the refract function with a new one that sample the hemisphere after
> a shift of 0.001 below the surface.
> I used an interior attenuation (interior { ior 1.0001 fade_distance 0.5
> fade_power 1 }) in order to control the depth of the sss effect.
Nice one.
Why an ior of only 1.0001 instead of the more realistic 1.5 or something?
Note that the approach has a few drawbacks (or, rather, it doesn't go far
enough) regarding realism:
* In reality, attenuation will follow a much more complex term; see the 2001
Siggraph paper "A Practical Model for Subsurface Light Transport" by Jensen et
al (which also formed the basis of the Tariq & Ibarria patch) for the formula.
(The material parameters of the formula, although based on physical properties,
do not really lend themselves to toying around; an approach to compute them
from a more intuitive set of parameters is presented in chapter 4 of the 200?
follow-up Siggraph paper "A Rapid Hierarchical Rendering Technique for
Translucent Materials" by Jensen & Buhler, which also contains a re-phrased
version of the formula.)
Note that there are actually two main formulae: One modelling multiple
scattering only ("diffusion approximation"), and another one modelling
single-scattering, while "zero-scattering" (i.e. straightforward transparency)
was seemingly forgotten about in the paper. The latter two are probably quite
easy to model in MCPov: Just trace another light ray a random distance from the
exit point into the medium (using an exponential distributon, with the mean at
1/sigma'[s]; see the Jensen paper) to give you a point where the ray may have
last been scattered; if you find the point to be outside the object, it's a
"zero-scattering" ray, and you just need to attenuate it according to sigma[a]
(again, see the Jensen paper) and distance traveled; otherwise, trace another
ray from the scattering point to the object's surface; attenuate the ray
according to sigma'[s] and the distance traveled in this scattered ray, and
according to sigma[a] and the distance traveled through the object as a whole.
Attenuation will also differ by wavelength.
* In reality, diffuse reflection is just a special case of SSS as well, so for a
realistic approach the classic diffuse term should be disabled, and incident
light from "this side" be sampled as well; otherwise you will not be able to
model, for instance, light "bleeding" into shadows cast on a marble slab.
You may like to hear, however, that your sampling pattern can easily be adapted
to this one as well for good effect; as a matter of fact, POV's upcoming
subsurface light transport code will use a full-sphere sampling pattern from a
point slightly below the surface (though not at a fixed distance, but based on
material parameters instead).
Post a reply to this message
|
|