BioShock Tech tid bits

AlNom

Moderator
Moderator
Legend
Thanks to kipper for linking it in the PC Games forum.. Just thought I'd put things into one place here. If mods have other funny ideas :)!:) on where to put it, by all means...

Quotes are from around the TTLG Forums:

Chris Kline, Lead Programmer for Bioshock:

ckline 10 Oct 2006 regarding multi-threads said:
We currently run
- simulation update (1 thread)
- UI update (1 thread)
- rendering (1 thread)
- physics (3 threads on Xenon, 1 to TBD on PC)
- audio state update (1 thread)
- audio processing (1 thread)
- texture streaming (1 thread)
- file streaming (1 thread)

ckline 12 Oct 2006 regarding "Simulation Update" said:
AI, game internals, setting up batched data to kick off to the renderer and other threads, calculating digits of PI, etc.

ckline 12 Oct 2006 regarding multi-threads said:
Basically we just chop up tasks as coarse-grained as possible so that threads don't need to share any data or do much synchronization. To do this we do a lot of double-buffering of state. Then we kick off the threads and wait until they all come back and sychronize.

It's really simple (in theory, not practice) stuff, but games don't lend themselves well to fine-grained multithreading because you'd get killed with all the synchronization overhead, not to mention the bugs from not doing it right.

We've looked into Software Transactional Memory, which would allow you to simulate thousands of entities independently in a sane way, but no one's figured out a good (meaning "nice API" + "fast") way to implement it yet.

ckline 16 July 2007 regarding 360 framerate said:
On the XBox 360 it is locked at 30 or 60 fps, depending on the situation. There is also an option to disable locking so you can play with the fastest possible framerate (though this may result in occasional "tearing").

ckline 3 April 2007 regarding ragdoll & standing up again said:
Pyrian said:
Getting up from ragdoll (GUFR?) isn't too bad as long as they're lying on a flat surface... If you don't assume that, then it's a real pain in the neck.

Ours work on any surface (stairs, physics objects, uneven surfaces, dead bodies, etc) by blending ragdoll with animation and inverse kinematics, all in realtime.

And yes, it was a real pain in the neck to make that work. But John Abercrombie and Darren Lafreniere are the Wonder Twins of AI and Animation, and they totally rocked the house with this bit of tech.

ckline 26 Dec 2006 regarding compression/streaming said:
bjossi said:
The game is going to use around 512 MBs of video memory when texture compression is 8x.
That isn't quite correct. It *would* use that much if you loaded all the textures at once. However, our streaming system will stream a much smaller working set of textures in/out on the fly, so you won't need that much VRAM.

ckline 25 Dec 2006 regarding memory/streaming said:
We use approximately 6-8x as much texture memory on models in Bioshock as we did on SWAT 4, for example.

Bioshock probably uses around 500-600MB of compressed textures (at 8:1 compression!) for an entire level, and that doesn't include Audio data, Mesh data, and lots of other memory that's needed to run the game.
(To that end, they'll be streaming instead of loading things into memory all at once of course. ;))

So, like I was going "huh?" to in the other thread... Three threads for physics :?:
 
Originally Posted by ckline 16 July 2007 regarding 360 framerate
On the XBox 360 it is locked at 30 or 60 fps, depending on the situation. There is also an option to disable locking so you can play with the fastest possible framerate (though this may result in occasional "tearing").

finally!!! someone giving us the option on a console. :cool:


thanks for the info Al, good stuff
 
finally!!! someone giving us the option on a console. :cool:

That is a golden option, much like the xbox version or Riddick which also had a framerate limiter (30fps) that could be switched off. :smile:
 
Kipper opened the floodgates. :) That's all I could find from Chris on those forums, but I'm still searching around for things from other devs, though it's a bit more difficult since I don't know their user names. :LOL: Ken Levine (Kevin Line? ah dyslexia... ;))

Does that mean v-sync 60Hz with no triple buffer hence "30 or 60", basically a guarantee that the game won't drop below 30? If so it'd be nice to have a framerate limiter set to 30 in addition, kinda like setting com_maxfps in id Tech 3 games just to keep the framerate from hopping around.

So from what I understand, their are five free threads on the 360 for developers to use in parallel after one is reserved for the OS? I'm only guessing from here on, but that could mean:

0 - simulation/game
1 - render thread (ala Gemini in UE3.0)
2 - physics
3 - Audio
4 - Streaming (texture/file)
5 - X360 OS

with some sort of context switching for the multiple physics/audio/streaming threads listed above?

edit: maybe context switching isn't the best description... I mean, with three physics threads, two threads for audio stuff, and texture and file streaming... there's some sort of switching going on :?:
 
It's certainly not one whole thread reserved for OS in the same way that a SPE is reserved on PS3, AFAIK. So yes Alstrong, that'll be several software threads switched across the 6 hardware threads. You could have, for example, one hardware thread dedicated to one task, and the other threads spread around, or share them all equally. Presumably the choice of three threads for physics points to parallel processing, with all three cores running that to completion as a job lot. Although it could be three different aspects to physics dealt with separately. Perhaps collisions, animation, and...um...particle physics?
 
Back
Top