Friday, August 8, 2008

Heading to Siggraph 2008

Siggraph 2008 is here! I'm not ready!

Monday, I'll be presenting. If you missed my Gamefest presentation on Parallel Rendering with DirectX 9, now's your chance. ;)
I'll be focusing a lot on the future of game systems.... Larrabee is making waves there, but so are others. Here are some events I'm prioritizing:
  • Parallelism Papers
    - Larrabee paper is there
    - Tuesday, 10:30 am - 12:15 pm
  • Beyond Programmable Shading class: Fundamentals & In Action
    - Excellent topics relevant for future systems such as Larrabee ... (and other unannounced systems)
    - Thursday, 8:30 am - 12:15 pm, 1:45 - 5:30 pm
I wanted to review plenty of papers before going, but I just didn't get time. So, of course I'll hit
What are your must see sessions?

Terminology Rant

Siggraph is coming up, and it’s a great intro to this post! Siggraph is pronounced “sig-raph”, not “see-graph”. (The “si” is pronounced the same as in “sigma”).

Yes, that’s right, this is a terminology rant!

Some mis-used terms just get to me… but posting on just BiNormal and Zoom wasn’t enough, so I invited some friends to add to the pile. ;) I got more responses than I anticipated. Several overlapped from multiple people, so here’s the list:

BiTangent vs BiNormal
A BiNormal is defined in calculus as the cross product between a curve's Normal and Tangent. BiNormal is frequently misused in graphics when people need a basis to use on a 2D manifold surface. In that case, there is only one normal, but an infinite set of tangents. Normal mapping typically uses the tangents oriented by the u or v parameterization on the surface. NBTs are really “Normal, BiTangent, Tangent” sets.

Zoom vs Dolly
Misused when people actually mean dolly in-out. They’re confused that “making something bigger on screen” means “zooming”. Zoom a change in the field of view of a camera (by changing the focal length). This is definitely different than dolly… and we’d have no Alfred Hitchcock’s Vertigo without them both!

Hardware vs. Software (Eric Haines)
I hear this all the time, and it does bug me: "we should run that on the hardware, using a pixel shader". So the GPU is "hardware"? What's the CPU, then? Corrupting the term is kind of pointless, so let's call it the GPU or the graphics accelerator or the graphics card or whatever, but save "hardware" to mean CPU or GPU (or all those other random electronic bits inside the box). The flip side is calling the CPU "software", as in, "well, we can't run it on a pixel shader, so we'll need to run it in software". The CPU and GPU are both controlled by software.

Clipping (Kevin Cristensen)
The most annoying one for me. Reviewers like to use it and so does production or upper management. What they really mean is geometry penetrations between characters and other characters or characters and world geometry/objects. It doesn't affect gameplay at all but Indy got docked major points for it by IGN and other reviewers.

Maybe they are referring to the graphic engine clipping the character by the geometry? Not sure, they never really explain it. They usually say the character clips into the world or something lame.

Orthonormal Matrix (Eric Haines)
In the "don't taunt the mathematicians" category, "orthonormal matrix" is not a term most mathematicians use. A matrix composed from mutually perpendicular vectors, with all vectors normalized, in mathematics is normally called an "orthogonal matrix" - there is no term "orthonormal matrix". Well, there are a few rebellious mathematicians and their engineer lackeys who will daringly use "orthonormal matrix", especially after having a little too much sugar in their tea, but this is not a generally accepted term. It's illogical to me that such a matrix is "orthogonal" and not "orthonormal", since "orthonormal axes" and "orthonormal basis" is perfectly fine usage, but that's how it is in mathematics.

Frustum vs Frustrum (Eric Haines & Kevin Cristensen)
It’s Frustum… not Frustrum

Bezier segments and B-spline
(Bill Baxter)
[Some] seem to refer to a sequence of Bezier segments as a "B-spline". You can convert one to the other, but that doesn't mean they're the same thing!

Phong shading (Eric Haines)
Phong shading: this term means two very different things. One usage is synonymous with "Phong interpolation", or per-pixel lighting. This used to be the main meaning of "Phong shading", vs. "Gouraud shading" (vertex interpolation). The other usage really means "Phong lighting" or "Phong illumination", and this is generally what is meant by "Phong shading" nowadays, as in "Blinn-Phong shading model". "Shading model" has come to mean "lighting model", vs. its ancient meaning of "type of interpolation". We still cope by using context: "Phong shading" usually means the specular-highlight cosine-lobe lighting model, but if we see the word "Gouraud" nearby we know it means interpolation instead. Must confuse newcomers, however, so it's probably better to say "Phong interpolation" if you have to say it at all, and best is probably "per-pixel lighting" and let Phong's association with interpolation die out.

Dot3 Bump Mapping
(Dan Amerson)
It's not bump mapping, it's normal mapping.

Texture vs Texture Map
(Eric Haines)
[People will say,] "Let's apply a texture map of a brick wall here", when what really should be said is simply "texture" instead of "texture map". The "map" part of "texture map" refers to the function used to transform a surface location in space to a location on the texture.

Overload vs. override (Dan Amerson)
People generally mean override when referring to virtual functions in a subclass, but I routinely hear people use overload for that situation.

Thanks to contributors:
Dan Amerson
Bill Baxter
Kevin Christensen
Eric Haines (perhaps because he's an author of a book, he had a lot to offer. ;) more than I could use)

If you have your own favorites… comment away. ;) I’d love to hear them.

Monday, July 28, 2008

Podcasts, and Sharks with frickin' laser beams!


Sharks have invaded the office... There is a battle between product management and engineering over who can build the best shark with frickin' laser beams. (Spoiler: engineering wins, with real lasers.) The latest challenge includes irritating the turtles in the fountain with a self propelled shark... we'll see if joat can pull it off!

And, podcasts!.. Adam has kicked off an official-un-official Emergent podcast. ;) He and Dan Amerson ramble away about Gamebryo 2.5.

Tuesday, July 22, 2008

Parallel Rendering with DirectX Command Buffers

I'm at Microsoft XNA Gamefest 2008 presenting Practical Parallel Rendering with DirectX 9 and 10. You can find the slides and open source code. Bo Wilson helped out on the design and prototype.

The short form of the presentation is:
  • We made a command buffer (or "display list") format for DirectX 9.
  • Multiple CPUs can record command buffers simultaneously.
  • One main thread that owns the device can playback command buffers.
  • For many games, this provides an effective way to improve performance with minimal changes to existing render code architecture, they can "simply" swap in one of our special recording devices.
  • The code is open source.

Monday, July 14, 2008

E3 2008 - Xbox 360

E3... blah blah, some things that jumped out for me from the Microsoft news:
  • Netflix on 360 - This has been speculated on for some time, but it's great to get the official word. It seems clear to me that the future of entertainment delivery will be along the lines of IP cable, streaming movies, etc. The next few years we'ss see the battle between the console providers, cable companies, probably phone companies as well.
  • Install to HD - A great feature, since the 360 is so loud while spinning a disk. Most games are doing this to some extent under the hood anyway, so why not just copy the whole thing? Sadly, you still need the disk in to boot... I'm looking forward to the disk just being a high bandwidth way to download, and then tossing it.

Wednesday, July 9, 2008

Google's Lively


Google has launched Lively, a virtual space for chatting... and... hanging out.

Several blogs mention that Lively uses Gamebryo: e.g. Gamasutra & Virtual Worlds News

I've put up a room here, and embeded it here:

Thursday, July 3, 2008

Johan Andersson's keynote at Graphics Hardware

Johan Andersson's slides were recently posted for his keynote The Intersection of Game Engines and GPUs - Current & Future at Graphics Hardware (other presentations there too...). I've looked over several of Johan's presentations in recent years, and am a big fan. This presentation covers many interesting topics, though is light on details:
  • Most screen shots and examples are from Bad Company
  • Shader node editor
  • Rendering jobs, task decomposition for concurrency
  • Command buffers used on 360, PS3, but DX10 is a problem
  • - He also mentions an approach I'll be presenting on ind detail at Gamefest 2008 - software command buffers - with the con of "Difficult to update dynamic resources efficiently in parallel due to API", quite true
  • Software rasterization for occlusion testing
  • - low rez floating point buffer, renders 100 meters of low-poly occluder meshes, limited to a max of 10,000 verts. Use on all platforms
  • Prefer bumpmaps to normal maps - better compression - sample to normals in shader
  • Virtual textures
  • Raytracing - cites Mirrors Edge - urban environments with reflections
  • DOF implemented in CUDA