Sujet de Master 2008-2009
A
journey
in a procedural volume
/ Voyage
dans un volume procédural
Responsible
Context
Procedural
textures - or "noise function"- introduced by Perlin are
universally used in
image synthesis: a simple continuous
pseudo random hierarchical function
can imitate the aspect of many materials (wood, marble,
water, clouds, rough surfaces ...) on the fly from a handful of
parameters. Beyond texture of
color and surface aspect (bump), they are
also used to sculpt shapes, and even movement (pseudo-turbulence). In
practice, even if one can use "pure" noise directly, it is often used
to enrich with details an existing explicit data (which can be color,
shape, movement).
After
its
success in special effects, its use is now spreading in
real-time applications (video games, simulators ...), thanks to the
programmability of the GPU. In particular, we use
it to create
on the fly the details of our volumes
(clouds, avalanches, biological exploration), our overall objective
being the high-quality real-time
exploration of very large and detailed volumetric scenes.
Alas,
even if the use of this family of functions is relatively intuitive,
its
properties are approximate, and the aspect of generated patterns is not
easily controlable (ie, finely predictable). In addition, they can
be expensive: evaluated blindly in all the voxels of a volume, its cost
gets prohibitive.
Some
recent studies
have focused on obtaining a better control of the generated texture
spectrum, and on controling the pattern orientation, but
overall there is very little work on the topic, and everyone still uses
the function
described in the 1985 founder article (see links in the text and
bibliography below).
Beyond
the "noise", we are interested
in anything that can enrich in detail and "tune" on the fly the
appearance of enriched data (voxels, color or movement): typically, a
low
resolution volume of voxels densities (ie,
gray levels) is enriched in details,
then "shaped" by a sigmoid-like function, then converted to colors
through transfer functions, then lit (which requires estimating its
local
gradient). The result is an object of very high apparent resolution, adjustable and
explorable dynamically. But many theoretical
problems -having serious practical consequences- have been totally
ignored
until
now (see below).
Description
The
aim of this work is to study the
properties then to adapt functions and algorithms of procedural noise,
to make
them more usable and compatible with real-time exploration of very
large and detailed procedural volumes, and to expand the possibilities
of
these noise functions. This includes the noise itself but also the
whole chain of transformations leading to the final image (ie
amplification, and a posteriori functions). Here are the main avenues
that we
intend to run. The whole exceeds the time of a Master
practice, which will only explore a part of them.
- One
of our main concerns is "levels of detail", i.e., simplifying the
pattern
with distance (ie filtering):
the native Perlin method simply adds fewer frequencies, but this
changes quantitatively and qualitatively the pattern and may even
introduce spatial and temporal discontinuities, which is not acceptable.
- A
hard problem also linked to filtering: the noise is rarely used on its
"pure" form and
is often composed with non-linear functions that "reshape" it (sigmoid
transparent / opaque) and then translate it into colors. The
usual method which for filtering simply applies the functions on the
filtered noise is false ... and this shows up. Moreover, this
changes the texture spectrum, thus complicating the result prediction
and the level
of detail to apply at a given distance.
- Another
concern is the minimalist evaluation: when it comes to
generate the shape in volume (eg, clouds), most areas of space will be
completely full or empty. Yet, blindly
evaluating
the function in these constant areas costs as much as in areas full of
details:
the most expensive case is paradoxically that of a ray traversing 100%
empty space, since all the voxels along the trajectory must be
evaluated! To
avoid this, one has to predict these situations, hierarchize the
evaluation of the function (lazy evaluation), and possibly
adapt the noise function
so that its properties are better suited to this
optimization.
- From
the point of view of expressiveness and features, the user
would like
to have more control over noise: for example, to follow an outline,
or to allow inclusions (knots of wood). Recent
work on noise constrained for fluids offers clues to be generalized.
- Similarly,
the extension of 2D noise to 3D is not always so easy for
the user: it is sometimes difficult to reproduce some patterns yet
natural in 2D: "spikes", "filaments network" (like trabecular)
yet common in nature and useful to designers. How to enrich in that
direction the noise and a posteriori functions ?
- Finally,
one can mimic a turbulent fluid movement by rotating the random vectors
(flownoise).
But what are really the properties of the apparent velocity field
obtained,
how to control it? How to spatially vary
the rotation rate? (naively
interpolating
rotation angles yields "knots").
As
shown above, directions for improvements are numerous, from evaluating
more
efficiently to better filtering and to extending functionalities!
Références
References