| Q&A |
Frank
Kane Sundog
Software, SilverLining
September 2006 |
| |
 |
"For
the clouds themselves, we simulate how the direct and
indirect sunlight or moonlight scatters though the cloud.
We actually model the size of the droplets within the
cloud and their density as we do this.
We also throw in a few "little touches" like
simulating glare on bright stars and planets at night
that lead to a convincing scene."
<
SilverLining Realtime 3D clouds |
|
| |
|
| Q1 |
Please
give a brief description of Sundog Software. |
| A1 |
We're
a small software development company devoted to realistic real-time
rendering of natural scenes. Our flagship product is
SilverLining, a C++ class library for OpenGL and DirectX9 developers
that offers real-time rendering of 3D clouds and the sky, based
on a physical simulation of any given time and location. It
offers a nice touch of reality for flight simulator applications,
or any application that renders interactive outdoor scenes.
We're based in Seattle, Washington, in the United States. |
| |
|
| Q2 |
SilverLining
cloud simulator offers a very realistic rendering. How do you
get such a nice result? |
| A2 |
Thank
you! The quality is the result of years of dogged determination
more than anything; fine-tuning the results for performance
and visual quality was over half the project.
But, I think you're looking for more specific techniques. The
visual quality stems from modeling and simulating the illumination
of the sky and clouds all the way from the light outside of
Earth's atmosphere to the point where it hits the camera. We
start with an ephemeris model that computes the location of
the sun, moon, stars, and planets relative to the camera for
any given time and location. We then simulate how the light
from the sun and moon is scattered as it passes through the
atmosphere; this direct and indirect light is passed back to
the application to allow you to render the rest of your scene
consistently with the conditions being simulated, which is a
big part of the final effect. This light also has a relatively
sophisticated tone-mapping operator applied to it, which accounts
for the fact that a night lit by a full moon still appears pretty
bright to humans, even though it's orders of magnitude darker
than daytime.
Once we have the natural light sources figured out, we have
another simulation (implemented largely in a vertex shader on
systems that support them) that distributes the light throughout
the sky - this is what gives you the red sunsets and blue gradients
during the day in the sky in SilverLining. For the clouds themselves,
we simulate how the direct and indirect sunlight or moonlight
scatters though the cloud. We actually model the size of the
droplets within the cloud and their density as we do this.
We also throw in a few "little touches" like simulating
glare on bright stars and planets at night that lead to a convincing
scene.
So the short answer is attention to detail, not settling for
less than a real simulation of reality, and lots and lots of
iterating on different approaches until we found the ones that
looked best.
|
| |
|
| Q3 |
For
displaying those clouds smoothly, what kind of GPU do we need? |
| A3 |
Well,
of course the better your GPU the faster it will run, but we
don't require anything special at all. If your GPU supports
shader
model 3.0, that does help noticably in the DirectX9 version.
But everything in SilverLining has fallback code, so it'll run
on just
about anything. I have a Dell Latitude D610 laptop and I even
get 30-60 frames per second on it. We've tested SilverLining
on a wide variety of cards from ATI and NVidia with good results.
Just be aware that the less capable your GPU is, the more we
need to compute on the CPU instead.
It's interesting to note that although we have a few good computers
at Sundog Software, we intentionally did the bulk of the development
using an ancient surplus HP Vectra we got for $10 with a Celeron
processor and an older ATI card. This kept us focused on maintaining
high performance on low end systems. |
| |
|
| Q4 |
What
is the advantage of SilverLining clouds compared to those seen
in FlightSimulator? |
| A4 |
Microsoft
is my neighbor, and I have a lot of respect for what they accomplished
in Flight Simulator. The main difference between their approach
and ours is that we wanted to create a product that was suitable
not just for entertainment purposes but also for real visual
simulation applications. Flight Simulator's cloud models are
created offline by a team of artists; SilverLining's
cloud models are "grown" in real-time using a cellular
automata system and a simulation of cloud distribution.
So no two clouds look alike in SilverLining. Our lighting of
the clouds is also much more rigorous than what you see in Flight
Simulator. Also, Flight Simulator exploits some assumptions
about how their camera moves in their techniques for maintaining
high performance. Our solution is more general and maintains
good performance without visual anomalies from any camera angle.
Really, the main difference is that SilverLining's results come
from the laws of physics, not from a team of artists - so it's
more general-purpose. |
| |
|
| Q5 |
How
is it possible to integrate your clouds in a realtime 3d content?
Do you provide your own 3D engine, or is it possible to integrate
the clouds in an existing engine such as Ogre 3D, Delta3D... |
| A5 |
SilverLining
was designed to integrate easily into any 3D application using
any 3D engine. As long as you can tell SilverLining if your
3D engine is using DirectX or OpenGL under the hood, and you
can call us when your frame starts and when your frame ends,
we figure out the rest.
SilverLining determines on its own what your camera location
is, what your projection matrix is, and saves off and restores
any state your renderer may have had when it's called. So while
SilverLining does manage its own rendering once you call into
our API, it does so in a way that's compatible with any rendering
engine you may be using.
For customers who desire tighter integration nevertheless, we
do provide access to individual cloud objects, and licensees
receive the
full source code which enables pretty much anything. |
| |
|
| Q6 |
What
kind of level of details do you get in cloud simulation? |
| A6 |
Static
levels of detail (LOD's) are hard to do without "popping"
anomalies as they switch in and out, so we focused instead on
making every 3D cloud render really quickly so LOD's aren't
necessary in the first place. We use every trick in the book
- rendering an entire cloud as a single triangle strip, using
vertex buffer objects, etc. So the clouds don't lose any detail
with distance really.
The one trick we do employ that's similar to LOD is the use
of dynamically generated imposters. Basically, if a cloud gets
far enough away, we'll render it to an offscreen texture map
and display it as a billboard. The texture is redrawn whenever
the camera angle or lighting conditions change enough to be
noticable. |
| |
|
| Q7 |
Do
you manage to render also sky without clouds (sunset, night...)? |
| A7 |
Absolutely!
Decks of cumulus congestus, cumulus mediocris, cumulonimbus,
cirrus, and stratus clouds are all added individually to
the scene. It's certainly OK to not add any clouds at all to
the scene, in which case you'll still get our physical simulation
of
natural light sources and the sky. We simulate the sky for any
time of day at any location. Sunset, night, you name it. Our
attention to
detail to the night sky is pretty fanatical, really. We even
model things like galactic and planetary light, and light reflected
from the
Earth off the moon! |
| |
|
| Q8 |
What
are the typical users of SilverLining (entertainment, architecture,
GIS)? |
| A8 |
We've
been really amazed by the variety of companies that are integrating
SilverLining into their applications. We went into this
just thinking about entertainment applications, and commercial
and military flight simulators. But our customers do include
architecture
and urban simulation as well. Driving simulators and even CG
houses for movies have expressed interest. It seems every day
we have a new surprise! |
| |
|
| |
|
| |
|