Smoke - Game Technology Demo - Retired

This demo has been retired as it was developed for earlier generation hardware.


The demo is still available for download if desired.


What If Home | Product Overview | Intel® TM ABI specification | Technical Requirements
FAQ | Primary Technology Contacts | Discussion Forum | Blog


Product Overview

Smoke is a tech demo that showcases a framework to support n-way threading of game technologies. By properly threading a game it can have more accurate physics, smarter AI, more particles, and/or a faster frame-rate. Smoke demonstrates one way to achieve better games.

All of the source code for Smoke is available for download.

The demo includes:

  • N-way threaded framework using Intel® Threading Building Blocks
  • Physics simulation using Havok Physics™
    • Download a free copy of Havok PC (5.5 or greater) from
  • Graphics and scene management using Ogre3D
    • Complex meshes/shaders
    • Skeletal animation
    • Particle systems
  • Procedurally generated fire that spreads dynamically and realistically
  • 3D audio using FMOD
  • Artificial Intelligence controlled animals
  • Input and interactivity using DirectInput
  • Performance profiling
What's new with Release 1.2
  • Smoke now has a simpler build and builds with Visual Studio 2008 SP1
  • Fixed occasional crash when subdividing objects, after physics collision
  • Fixed a number of memory leaks and uses of uninitialized memory
  • Ambient lighting now lights the shaded side of objects
  • Smoke runs faster, mostly due to speedups in fire object code


Product Info

Video:Smoke Overview Video & Tech Overview Video

Article: An Overview of Procedural Fire,  Designing a Parallel Game Engine, &

Optimizing Game Engines with the New Intel® Graphic Performance Analyzers 3.0 Platform View

Installation: You can download the installer for the demo.

You can download all the source code here. There are build instructions included in the source code zip file under smoke\docs

System Requirements

  • CPU: Intel® Core™ 2 Quad Processor or better (Intel® Core™> i7 recommend)
  • GFX: NVIDIA 8800 GTS or better (Smoke was developed using 8800 GTS cards)
  • OS: 32-bit Windows XP or Vista
  • MEM: 2 GB of RAM of better
  • Optional: Stereo speakers, Xbox 360 controller for Windows
  • Software: Latest version of DirectX and .NET


You can also watch the other video done to Take an in-depth look at Intel’s Smoke Demo

Frequently Asked Questions

Q: Where can I get the source?

A: All the source is available.

Q: How do I build the source code?

A: There are build instructions included in the source code zip file under Smoke\docs.

Q: How do I see the advantages of threading?

A: While the demo is running you can toggle the number of active threads.

  • Press Ctrl+1 for 1 thread
  • Press Ctrl+2 for 2 threads
  • Press Ctrl+4 for 4 threads
  • Press Ctrl+x for maximum threads (depends on the CPU)


Q: What is the license?

A: You can read the license here. The goal is to allow developers to use the Smoke code written by Intel for any purpose (including derivative works) with no limitations or obligations.


Primary Technical Contacts

Orion Granatir is a senior engineer in the Visual Computing Software Division. He is the Tech Lead on the Smoke project. Prior to joining Intel in 2007, Orion worked on several PlayStation 3 titles as a senior programmer with Insomniac Games. His most recent published titles are Resistance: Fall of Man and Ratchet and Clank Future: Tools of Destruction.


For more complete information about compiler optimizations, see our Optimization Notice.


anonymous's picture

Has anybody successfully built Smoke in debug mode with Intel Compiler XE 12.1? I encountered an error saying "controlling expression is constant" about an ASSERT statement.

anruin's picture

Hey, Orion!

Are you planning any new updates for Smoke?

Best regards,

rocky92's picture

Thank you for the reply orion. Adding AI objects didn't seem to add more computational complexity though procedural fire system objects like fireballs and meteors did, which makes sense.
Could you give me some info on how you calculated the positions of the objects? Editing the .cdf files manually seems like a pain ;), especially keeping track of coordinates between systems. Is there any editor to easily drag and drop objects and edit a scene?

Orion Granatir (Intel)'s picture

Hello rocky92,

Hmm. You Demo.cdf is the right file to edit (as long as you didn't change Smoke.gdf to point to a different .cdf file). Make sure you added Geometry (position information) and Graphics (visual information) for the new entries. If you run the demo in Debug mode, it'll output an error if anything is formatted incorrectly in the xml files. If you are still having problems, then please send me an example of a new entry you added.


rocky92's picture

Hello Orion,

I've been trying to increase the complexity of the demo. I added more AI objects and minifireballs, basically I increased the number of objects in the Demo.cdf file. But I still don't see any change in the demo..are there any other scene definition files I'm supposed to edit?


anonymous's picture

This demo looks very impressive. Any plans to port the demo to Linux ?

ahn2150's picture

Resizing the window crash(when running in windowed mode) -know issue- does not crash on only one thread.

Koichi Senada's picture

Paul, by the way I have also found yet another way to organize and categorize the Smoke related resources on this website based on the architecture that already exists.
This time it's all about the articles only, but how surprised I am having found that some articles are grouped!
What I mean is a collection of articles subsets:

Maybe the Smoke related resourced can fit in?

Koichi Senada's picture

Paul, applications that are running Smoke code are those that display 3D graphics with reflections and refractions:

Though most of the code is placed inside the rewritten SystemGraphics, becouse it's not as easy to separate multitouch related handling as you have done it with keyboard and mouse handling.
SystemInput is only slightly involved, as it serves for keyboard and mouse input as secondary and debugging input handling.
SystemAudio is also completely rewritten to use OpenAL instead of FMOD.
SystemPhysics is yet to be completely rewritten to use Nvidia PhysX.
SystemGeometry is to be extended to support hierarchy, though meanwhile it is supported by SystemGraphics only as an additional property named "parent".

I have searched trying to find an alternative way to receive multitouch data under Windows, but it appears that window messaging loop is the only one available.

Thus the most important question is still the same, how would you recommend to realize the multitouch handling and other window messaging related code?
Would it be a good idea to place it somewhere between the synchronization frames, so that very next frame every system has the most current data about the input?
Would it be a good idea to keep some part of input handling code there inside the SystemGraphics?

By the way, we keep talking to russian speaking representatives of Intel in Moscow, and they recommend to keep discussions about the Smoke here, in this part of your website, so we just do that.

Any advice and recommendation from your team is highly appreciated, as it speeds up and improves our development process.


Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.