Tuesday, December 23, 2008

A Gamebryo Tower Defense Game: Defense Grid The Awakening

Happy holidays! I have a gift to give away, one free copy of Defense Grid: The Awakening. It is a Tower Defense game built with Gamebryo, just released on Steam. [Update: Deokhee Lee takes it!]

Here's a youtube video-interview that previews the gameplay nicely:

HD Video

If you're keen on the free copy, drop me an email at vincent.scheib at the emergent.net. [Update: Deokhee Lee takes it!] If you miss out, you can pick it up for $20. If you're feeling grinchy, there's always the free flash Desktop Tower Defense... but... lacking the richness.

Thursday, December 18, 2008

Coder Tip: Loading symbols in Visual Studio 2008 the easy way.

Bo Wilson keyed me in to this Visual Studio 2008 (VC90) Tip:
  • Debugging through some code touching Microsoft libraries (e.g. DirectX)?
  • Wish you had symbols, but too lazy to set them up again, cache them, wait for them all to download, blah?
  • Visual Studio 2008 makes it easy:
  • Just open the Modules window (Debug, Windows, Modules)
  • Right click a DLL, and load symbols from the Microsoft Symbol Servers.

Thursday, December 11, 2008

Link dump: Genetic Polygons, Scored Gameplay, ActiveX alternative, Gamebryo Training, Visualizing Files, Opening Files

Genetic algorithm placing 50 polygons to represent the Mona Lisa
I'm a fan of genetic algorithms... I'd have loved to see this one with triangles instead of n-polygons, though.

This image is early in the evolution, the final image is a good approximation. ;)
A fun, short, game. Cool novelty: the gameplay is synchronized with the music. Friend Adrienne Walker pointed out that this could be a great game jam theme.
Google Native Client
A plugin recently revealed by Google.
Cross browser, runs sand boxed native code.
Could be a good alternative to ActiveX.
Gamebryo 101
A university created webpage packed full of training videos, tutorials, and resources related to the product I work on.

I recently gave up on SpaceMonger -- it was having issues with lots of files. This survey convinced me to move over to WinDirStat, which works very well.

Mr EditGotoFindCombo
Nice tip for Visual Studio programmers:
Quickly open files with sub-string prefix matching:
CTRL-D, type:">of ", then start your file name.
More tips on the linked page.

Thursday, December 4, 2008

Jeff Russell Depth Of Field example

Depth of field came up on the gdalgorithms list. Jeff Russell caught the thread and replied with some screen shots from his brute force O(n^2*m^2) blur, with nice circles of confusion. I'm posting it here to make a few comments:

Sure, there are the typical DOF artifacts (halos, alpha object discontinuities, ...), but:
  • Top Left: Check out the trees, they look "right". The small highlights on leaves, or of sky through leaves, has that distinctive look that Gaussian blurs don't capture.
  • Center Left: Most of the scene is mush, but the enemies show distinctive disk highlights on points and lines.

Sunday, November 23, 2008

Motivating Depth of Field using bokeh in games

I've posted before on Higher Fidelity depth of Field effects in games. I believe that current depth of field effects in games fall short of delivering the same cinematic emotion as movies and TV. The reason distills down to the commonplace use of compute-efficient separable Gaussian blur. More expensive methods can reproduce bokeh with crisp circle of confusion shapes.

I've realized in casual conversation, many people can't easily recall how the technique is commonly used in television and movies. And, they often overlook how common it is.

So, in this post I've collected a bunch of examples from movies, and whipped up some mock images from game screen shots.

This is all just motivation. ;) Ideas for fixing the problem in a practical way is for another post.

Cinema Examples

A few simple shots, showcasing bright point lights, and specular highlights:

Similar to the above, but with some edge highlights blurred as well. Look at the horizontal edges blurred in the background on the right of the image:

The Dark Knight made extensive use of the effect for the entire film. The circles of confusion often had an oval shape due to the Panavision anamorphic lens used (compressing the image on film to an aspect ratio different than that of the screen). Also, note the specular highlights from the henchman's head and waist:

These circles are larger than in many of the others, and also show the non-uniform characteristics of the disks:

Finally, a subtle image. The amount of blur is minimal, but still distinctive on the lights in the background. Even though slight, delivering this effect will be yet another one of those required level of polish for AAA games in the future:

Mock Images
I've doctored up some game screen shots to show what is missing. They're quick and dirty, made in Photoshop with "lens blur". In a high dynamic range rendering pipeline, results would be much better, since the distinctive shapes we're looking for are results of very high contrast between highlights and the rest of the background scene.

First, a Mass Effect scene that would have worked well. I quickly added several points of bright light to trigger the effect since the background didn't include small point lights:



And here marketing screen shot for Unreal Tournament. I only generated a mask and applied the blurs, since the image had good contrast to begin with:


Lens blur:

Gaussian Blur (common in games today, poorer result):

And, a zoomed section contrasting Gaussian to Lens Blur:

Keep your eyes open as you watch TV, or movies, and you'll notice more and more how common this effect is.

Pay attention in games, and you'll notice that we're currently delivering the concept of "out of focus". That's sufficient to draw attention to near, middle, or background. But, games today are not capturing the artistic & emotional feeling that comes with a strong use of the effect.

I have a few prototyping ideas for delivering a higher quality depth of field, which I hope to have time to try out soon, but may likely take a while. As new hardware brings more FLOPS, it's also possible that the O(n^2 * m^2) naive approach may just be used soon enough (as was already done in Lost Planet on DirectX10).

(Next post, Jeff Russell Depth of Field example comments)

Update: Nice technique writeup in 3DMark11

Sunday, November 2, 2008

Beautiful Pixels Game API; Connexus ships to IGF

Before the blog "Beautiful Pixels", I used the name for a Game/Visualization API.

Beautiful Pixels the API was a concept for a game jam:
  • Everyone decides to write either a game, or a visualizer.
  • Games write out to a low resolution, palletized, frame buffer.
  • Visualizers render the low-rez games in high-rez, in some novel way.
Games are typically Atari 2600 or Intellivision style, or lower rez. Think Tetris clones. Visualizers could render out the games in HDR with bloom, or as colored smiley faces, or a field of flowers, ... The coolness comes from the odd mash-up of games and visualizers, that were not planned to go together.

Well, the last Game Jam we had, we picked another theme, Game Mad Libs. The Beautiful Pixels API only had a few small games we made for it in pre-jam planning days.

Below are screen shots of games using the Beautiful Pixels API:
Game: Platformer, by Adrienne Walker
Visualizer: Mario World, by Mike Daly

Game: Connexus, by Mike Daly
Visualizer: Smiley, by Mike Daly

Game: Box Pusher, by Mike and Jody
Visualizer: Power Blur, by Mike Daly

But, one game did make it well beyond Beautiful Pixels! Connexus (by Mike Daly) just shipped to the Independent Game Festival. Check out the Connexus website for screen shots. To the right is a screen shot of Connexus as it shipped to IGF, re-implemented outside of Beautiful Pixels API.

Tuesday, October 28, 2008

Fallout 3 and Game Engine Overview

Fallout 3 has shipped, with 90+ review scores on xbox 360, ps3, and PC respectively. Major kudos to Bethesda. (Fallout uses Gamebryo)

Also, Gamasutra has an excellent feature article with overviews of 12 Game Engines, including:
  • Bigworld: Bigworld
  • CryTek: CryEngine 2
  • Emergent: Gamebryo
  • Epic: Unreal 3
  • GarageGames: Torque
  • id: iDTech 5
  • Qubesoft: Q2
  • Simutronics: Hero Engine
  • Trinigy: Vision Engine
  • Valve: Source
  • Vicious Cycle: Vicious Engine

Thursday, October 16, 2008

Link dump: 3D Sketching, 4k intros with Distance Fields, Level of Detail, and Input Director

It's been a while since I've dumped some links. If you haven't already noticed these, take a look:

I love sketch
Check the video, scroll to 5 minutes to see curve sketching in 3D, that just makes it look too easy.

ILoveSketch from Seok-Hyung Bae on Vimeo.

Rendering with Displacement Surfaces
Iñigo Quilez is a great demo-maker. He's recently been making some interesting images in 4kb executables. Shown here is "organix".

At nVision this year he gave a nice presentation discussing graphics in tiny executables, and displacement surface raymarching.

Level of Detail: Blog you should read
If you're not subscribed to Level of Detail, let me call it out for you. Jeremy Shopf has some great posts, such as
Keepin it low res
Non-interleaved deferred shading of interleaved sample patterns

Input Director: Software KVM
This year I started regularly running multiple machines on my desktop, including my laptop. While doing some CUDA development I had was using another machine across the room, with an HDTV I could see it from 10 ft. I needed something to simplify input.

I used synergy for a while, but it was a bit buggy. Tim Preston suggested Input Director, a great solution if you're running only Windows. Some key features:
  • Works before you log in, so you can log into a machine from another.
  • Has an alias for CTRL-ALT-DEL, so you can lock other machines from your master.
  • Easier config than synergy
  • Less bugs with being in "stuck" keyboard modifier states

Thursday, October 2, 2008

Is Gamebryo Good Middleware?

Kyle Wilson writes nicely thought out articles on game development. He just wrote a piece, Defining Good Middleware, on Gamasutra (also on his site, Game Architect).

I’ve been asked how Gamebryo stacks up to his definition of good middleware. So, I’ll discuss that, plus throw in some additional thoughts. Read his article first.

How does Gamebryo stack up?

Good middleware lets you hook your own memory allocator.

Certainly. We ship an optimized pooled allocator for small objects, and a memory debugging/tracking/analysis system as well. Snapping on your own allocator is easy.

Getting this implemented in a code base is much easier to do early on! Major Kudos go to Shawn Kime who was the muscle man implementing this feature onto a game engine that had already shipped across a console generation and contained nearly 10,000 files.

Good middleware lets you hook your own I/O functions.
Yes, you can register your own functions for loading engine content. There are a few edge cases, e.g. on some platforms we use platform specific APIs sometimes to load certain file types.

Good middleware has extensible functionality.
We design for customer extensions. But, this is a significant task! Every feature must be considered for extensibility, and the right amount of flexibility selected. Some extensibility comes with a performance or memory cost. Most flexibility adds complexity to code.

Solid C++ design can be used in many areas, allowing customers to register custom derived objects with a factory system. The cost is polymorphism, and adding conditionals to code to handle unforeseen cases customers may introduce. Other areas can use template programming with policies, functors, visitors, etc.

Gamebryo 2.5 shipped with a massive overhaul of the geometry system, allowing customers to arbitrarily specify data formats, semantics, interleaving, and sharing. This offers significant benefits, but with a cost. Several fast paths must exist for code based on different formats of data. Some modules restrict the data layout to a known subset. Template programming is used to offer "perfect inner loops" at compile time, but increase the complexity of the code. And the exporting pipeline complexity is increased as client data format requests are normalized against known constraints of the runtime.

Extensibility can not be taken lightly, it is a significant design concern for every feature added to middleware.

Good middleware avoids symbol conflicts.
Gamebryo code has used the "Ni" prefix for a decade... legacy from the product name, "NetImmerse". Once you pick a method to encapsulate your symbols, you’ll find it time consuming to refactor, and a burden to customers to change as well. Big new features are coming for Gamebryo, though, and we are moving to using name spaces for those.

Good middleware is explicit about its thread safety.
Gamebryo has focused on concurrency for some time. Background loading is one of the most basic forms. We also demonstrate how to multithread other areas of the codebase, e.g. concurrent scene graph updates. And, we ship an extremely powerful stream processing solution, Floodgate, built to make high-performance cross-platform multithreading easy for our customers.

Good middleware fits into your data pipeline.
Generic and platform optimized assets are definitely supported. A data pipeline for a game is a complicated system however, and there’s more to it than just intermediate files and packaged level files. There is the need to format data precisely as needed for your game, and we offer rich configuration for data formatting. There’s also the need to manipulate, optimize, and augment data. For that, we offer a configurable plug-in based processing pipeline.

Good middleware is stable.
Gamebryo has a mature code base tended by a large team of engineers for a decade. It’s been battle tested in 200+ games. We ship only a couple of times per year, with a rigorous end cycle of automated and manual testing. And yet, it’s a massive code base, evolving to offer better performance and features, and exposing significant customer extensibility. There are still issues that come back to us, but that is why we have a support team.

The reality of the market is that customers prefer advanced features and performance over high stability. You want it all, but at the end of the day you have to choose where to put your time and effort. What does it take to have a 100% stable codebase? How much effort goes into flight control software stability? How much testing is the right amount for a game engine when there are opportunity costs?

Good middleware gives you source.
Absolutely. If you’re building a AAA game on a middleware engine there is no question, this is essential. That said, casual or low budget games can do amazing things with a binary only version.

This statement gathered quite a few comments on the original posts, a few quotes here:

"... you could equally argue that good middleware should be free (of course not), or that game developers should give the source of their game to game players so that they may fix bugs (of course not).
By providing source to their software, middleware manufacturers essentially give up their IP."
- Anonymous-1-Gamasutra
"... there are cases where it makes sense for a middleware company to release the source code. However, in those cases, the value of the middleware company is not in the source code."
- Anonymous-2-Gamasutra
As a consumer, I’d require source. Large games are too complicated and developed in too short a time to not be able to get into source. Additionally, final optimizations of games need to be able to optimize globally, across all source code.

As a middleware developer, giving away source and being exposed to thieves is difficult. People steal the source directly, indirectly, in whole, in part, in many ways. But, they do often face legal repercussions, and the rest is a cost of doing business and selling what people need. And, as pointed out in the comments, the real value of middleware is being able to use it, and that comes from the relationship with the company that supports it. Customers of Gamebryo get an excellent companion staff of engineers working with them to make their games succeed.

All that said, many have done great things with binary only copies of Gamebryo, for example check out this Coldwood Tech Demo.

There are other questions to ask about any piece of middleware: How much memory does it use? How much CPU time does it require? What’s the upgrade path for your current code and data? How does it interact with your other middleware? How good is the vendor’s support? How much does it cost?
Memory and CPU? Mostly that has to do with assets, and how customers configure them.

Upgrade path? Re-export your models, animations, particle systems from Max/Maya/XSI using the Gamebryo exporter. Some clean up will be required, and proprietary formats will take custom code to convert.

Interacting with other middleware is important! We specifically design for it in many sub-systems. E.g. Floodgate and how it shares resources on Playstation3. We also have a team of engineers assisting with and maintaining integrations with partner middleware companies.

Our support is widely acclaimed best in the business. I didn’t believe that statement until I heard it from current and previous customers over and over, studios that have used 2 or 3 of the major engines. I’ve never heard of a studio that used Gamebryo and anyone else who didn’t believe Gamebryo’s support was superior.

Gamebryo’s cost... ;) well... what are you developing? We have a portfolio of options. Talk to sales.

Motivation for Middleware

Kyle makes two strong points:

  1. Middleware provides you with more code than you could write yourself for a fraction of what it would cost you to try. No matter how clever you are, that’s how the economics of the situation work. ...

  2. Middleware offers structure. Middleware draws a line between the things that you have to worry about and the things you don’t. ... As games grow ever-larger and more complex it’s become incredibly valuable to be able to draw a line and say, The stuff on the other side of that line isn’t my responsibility, and I don’t have to worry about it.

I’m not going to rant (in this post) about why middleware makes sense. But, I am going to invite developers to do what they already do, better.

After shipping several console games, it became clear to me that the industry needed higher quality engine code, and that Middleware made sense. We’re hiring at Emergent, ramping up for a new wave of awesomeness, a new line of console hardware, and a better way to make games. If you’ve shipped games, drop me an email. Even if you just what to chat about what it is like to work on Middleware.

(Chrome engine picture used by flickr user lars hammar, Coldwood tech screen shot by Coldwood/Emergent)

Friday, September 19, 2008

Testing Build Times with RAID 0 on a Dell Precision

Machines from Dell can easily be configured with a RAID controller these days. I was curious to see: Would using RAID-0 (striping) improve build times? The short answer: no.

On one hand, I'm not surprised. On the other, I really wanted to give it a true scientific test, with real parts and a real workload. It's so easy to purchase machines configured this way, we might as well be buying machines in an optimal config.

I've been wanting to run this test scientifically for a while now. So I jumped on a new Dell Precision T5400 that had been ordered, and had it configured with a second hard drive (320GB SATA 3.0Gb/s, 7200RPM HardDrive with 8MB DataBurst Cache).

I installed Vista, Developer Studio 2008, DirectX August 2008, and Gamebryo 2.5. I built the Debug configuration of the first sizable solution (CoreLibs) which contains 11 fairly small libraries. Then I did it all again with a RAID0, 128kb block size. Build times were equivalent at 1 minute 15 seconds.

Now, I'm a graphics guy, not a hardware guy -- so maybe I overlooked something. If so... ;) let me know. I'll hold off a few days before I build up this machine for production use. At the moment, I'm planning on not using a RAID configuration.

Saturday, August 23, 2008

Multi-Platform Multi-Core Architecture Comparison (PC, Wii, Xbox 360, PS3, CUDA, Larrabee)

I just gave a presentation at the Game Connection Developers Conference in Leipzig. It dealt with Multi-Platform support for Multi-Core development... which we've solved at Emergent with Floodgate.

I've presented on this before, but what I added this time was a series of architecture block diagrams to illustrate the wide range of systems out there. They specifically focus on the memory topology relevant for code.

Some quick notes:
  • Sizes and distances between boxes don't have meaning in these diagrams, just the topology.
  • There are simplifications (e.g. I haven't added EDRAM on the 360). However, the high level structure of the systems is valuable to contrast, and I've focused on what general processing typically accesses. If I've goofed something, let me know, but also perhaps I omitted it to keep things simpler.
  • R stands for Registers, L1 and L2 for caches, Mem for Memory, GMem for graphics memory

PC, Multi-Core PCWe start with simple PCs and Multi-Core PCs. Memory is cached, but even with multi-core systems the programmer doesn't have to worry about consistency. As long as synchronization primitives are used to avoid race conditions, the systems take care of getting the right data when you fetch it. (This takes some work, since invalid data could be in an L1 cache that should be replaced by data currently in a write queue from another CPU.)

WiiGetting into consoles, we start with the Wii. There are two types of memory, both accessible by CPU and GPU. However, what's really interesting is the ability to lock a portion of the L1 cache and explicitly manage it with DMA transfers. In one test case, we saw 2.5 times performance improvement by explicitly managing Floodgate transfers with the locked cache!

Xbox 360The Xbox 360 looks quite a bit like a multi-core PC, with multiple hardware threads per core. The main thing to note is the single memory used for "system" and graphical resources. Also, the GPU happens to be the memory controller, and has access to L2, but programmers needed concern themselves with this and only a few developers take advantage of GPU L2 access.

PS3The PlayStation 3 (CELL processor) is the earliest architecture that really rocked the boat. A series of co-processors named SPUs have dedicated memory for instructions and data called Local Stores. These must be managed explicitly by DMA transfers. PlayStation 3 is why we built Floodgate, but as you'll see, it's not the only system that can benefit.

CUDAnVidia's CUDA is certainly an interesting architecture. It differs significantly from other systems, being a large collection of fairly small microprocessors. Each microprocessor block has a shared register file, and a large number of threads that are very efficiently switched by a hardware implemented scheduler. Each block also has a shared memory cache that must be explicitly managed by code.

The left side of the diagram is the CPU of the system, I left it as a dual-core just for an example.

LarrabeeIntel's Larrabee looks like a many core system in many ways. Again, I left a generic dual-core CPU on the left side. The architecture feature to note is that the L2 cache has been broken up and a portion dedicated to each core of 4 hardware threads. However, there is a high speed ring bus that provides access to any L2 from any core. The caches maintain coherency so programmers need only worry about race conditions, but not data barriers, write queues, and caches. However, high performance code will take advantage of the faster access of "local L2 cache".

Some things to summarize:
  • There a wide variety of machine types currently on the market, or about to be here.
  • Some architectures have non-uniform memory, and many require explicit memory management.
  • Systems that don't require explicit memory management still benefit from it. e.g.:
    • Wii with Locked Cache
    • CUDA with Shared Memory
    • 360 with prefetching
    • Larrabee with "right sized" "local L2 cache" data
  • Large numbers of computing elements are coming. CUDA already exposes a very high count, but so does Larrabee. These systems will require efficient blends of both functional decomposition and data decomposition
Ed Holzwarth and I designed Floodgate in 2005/2006 to deal with many of these issues on PS3 & Xbox 360. I'm pleased to find our approach has positioned us well for upcoming hardware architectures we didn't know about then (CUDA, Larrabee). If you'd like more info on Floodgate, for now I'll just send you to some marketing material and a white paper. Also, much credit to those who actually implemented and maintain the system: David Asbell, Stephen Chenney, Michael Noland, Dan Amerson, & Joel Bartley (sorry if I missed someone).

Thursday, August 14, 2008

Siggraph 2008: Top Picks to Follow Along

Siggraph is still underway, and it’s a great year to be a game developer at Siggraph.

I’ve already got my pick for the three best items for a game developer to look at, and you can do so now:If you weren’t able to make it to a presentation, I highly recommend you check out Siggraph Encore, where you can purchase videos of the presentations.

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

Wednesday, June 25, 2008

Virtual Training, games aren't just for fun

The ESA is reporting that 70% of major businesses are using game technology. Their survey (150 major companies polled) doesn't convince me that gaming tech is used in the working masses yet, but clearly it has it's place in large corporations such as Hilton, IBM, Canon, &c...
“Businesses across the spectrum, from automobile manufacturers to financial service providers, are utilizing entertainment software to help educate their employees to better serve their customers and improve their bottom lines,” said Michael D. Gallagher, CEO of the ESA, the U.S. association representing computer and video game publishers. “Interactive technology is a valuable tool in workforce development and this study underscores the fact that video games have become a mass medium helping Americans live, work and of course play.”
The survey indicated benefits of:
  • a reduction in costs;
  • more efficient and faster training;
  • the ability to apply consistent training across all parts of an organization;
  • the ease of measuring employee participation; and,
  • better information retention.
Well, Gamebryo is game tech, how widely is it being used? Vis/Sim customers include:
  • BAE Systems
  • Breakaway Games
  • Chi Systems
  • Cubic Defense Systems
  • Electronic Warfare Associates
  • Engineering & Computer Simulation
  • General Dynamics
  • Honeywell
  • Muzzylane
  • Navteq / Mobility
  • RTI International
  • STS International
  • Syandus
  • Techrizon
  • Total Immersion
  • USC Institute for Creative Technologies (ICT)
  • Washington Hospital Center
So... how long until McDonalds employees learn their job tasks by training in Virtual McDonalds Camp?

P.S. Thanks Phaedra for pointing this out.
P.S.S. baxissimo, nice to see you're finally reading RSS... now... of the countless people I've given that advice... who lives in Tokyo... hmm....

Tuesday, June 24, 2008

Links, New blogs, Random stuff

Time for a few links.

First, a few colleagues started blogging:
Game wise, I'd been searching for some numbers recently...
And finally, check out this real world media animation!

MUTO a wall-painted animation by BLU from blu on Vimeo.

Monday, June 9, 2008

Er, Careful with the NERF Guns: LCD Casualty (updated 1)

For the Gamebryo 2.5 release, we bought NERF guns for the entire office.

There's been an LCD casualty.

;) Tricky to shoot around the office and avoid hitting any monitors.

Update: baxissimo wanted to know what type of gun. It was a Nerf Reactor. Those green balls have a decent amount of mass to them.... and a particularly strong shot at ~8 feet did the trick.