The A3D
protocol is much more geared directly to the card than the EAX approach.
It's almost direct to the metal kind of stuff, which means it's
tougher to pick up initially, but you do get a better feel for what's
going on, and the controls you have over it.
The Miles sound system
is a bit of a misnomer. Its more a layer of API that sits on top
of whatever kind of card you have already. The idea being that it
can support A3D, EAX, DirectSound, you name it. You just say, "I
want this sound at this location, with 3D sound, this kind of environment,
this kind of echo, off you go" and the system does it. It does
all the initialization it needs to, figures out what kind of sound
card you have, and basically does everything for you, plus more.
There's .mp3 decompression built in, as well as other very sexy
stuff. Its very handy, and pretty cheap considering the amount it
does for you as a programmer. The downside is that it's fairly expensive
CPU wise. Not terribly, but there is a cost. I understand that Daikatana
uses Miles to good effect though.
Regarding obstruction
and occlusion, it's important to actually distinguish between the
two. Obstruction is where you can hear a sound, but there is something
in the way, like a pillar. You can hear the sound reflected off
walls or other objects, but not directly. Occlusion is where the
sound has a wall between you and it. Thus it would either be muffled,
or not heard at all dependant on the composition of the wall and
your proximity to it.
These are two different
problems to solve algorithmically. For the second problem, you need
access to some world geometry to know where the walls are. In order
to figure out if a wall is between you and the sound, you need to
do some kind of trace function from you to the sound source, looking
to see what's in the way. These traces are not free, and can be
expensive if you are traveling the length of the map. They need
to be done every frame, to update the volume for the sound, which
means a fair bit of processing per frame. This is where you start
getting CPU time being spent, and where people start getting worried
about sound CPU demands. It's interesting to realize that this is
all done in software, before the sound card gets involved at all.
While both Aureal and Creative mention that A3D 2.0 and EAX 2.0
have obstruction and occlusion built in, they mean that they will
write the code for your game that does the obstruction and occlusion,
not that its handled in hardware. There's really nothing to stop
you doing this yourself in your own engine, with just a basic DirectX
sound system.
Something else worth
mentioning regarding occlusion is that most games out there don't
have it right now. If you support a system that has it, as well
as a system that doesn't, then you can get yourself into a bit of
a mess. To clarify, with Heretic II we had the basic Quake II sound
system, which was just that. Basic. Then we added A3D 2.0 (with
occlusion and obstruction) support into the patch. Now the system
automatically selected which to use, depending on what card you
had. The drawback here is that if you were playing deathmatch using
the default sound system, as long as you had proximity to other
players, you could hear their footsteps, no matter if there was
a wall in the way. With A3D 2.0, due to occlusion, you couldn't.
Those playing default sound had aural clues as to your whereabouts
that you didn't have for them. You could always switch to default
sound, but that would have rather defeated the point of having A3D
in the first place. Of course the solution would have been to put
in the occlusion for all the sound systems, but hindsight is always
20/20 isn't it?