Jump to content

View more

Image of the Day

#ld38 #screenshotsaturday Mimosa Fizz action gif #2 https://t.co/TUzdppvfUL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Demorize digital signage particle system

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 Kjell Andersson   Members   


Posted 02 December 2012 - 09:28 AM

In our latest version of our digital signage software, we introduced particle systems. We wanted to allow our users to produce dynamic information screens that look more vibrant than Power Point or other digital signage software allows. The combination of particle systems and post rendering effects like blooming and blurs can make really nice effects. We wanted to remove the need for pre-rendered video that was previously needed if you wanted to create nice looking screens.

In this IOTD we are using two particle systems, one for the twinkling stars in the front and one for the space travel stars in the background.

Our particle system consists of emitters and affectors that can be combined into a system. Emitters produce particles and affectors modify the particles’ properties over time, like for example gravity. Particles’ properties can also be manually animated by the timeline system that our software offers for animation. During the lifetime of a particle it may spawn new emitters which allows for more complex behavior.

On the technical rendering side, DirectX 9 is used for the rendering.
The particle system uses two stream sources and the stream source frequency functionality to instantiate the particle geometry in the vertex shader. The CPU only manages a list of particle positions and properties.
In DirectX 9 this is done like:

pDevice->GetD3DDevice()->SetStreamSource(0, m_pCornerDataVB, 0, sizeof(M_CORNERVERTEX) );

pDevice->GetD3DDevice()->SetStreamSourceFreq(0, D3DSTREAMSOURCE_INDEXEDDATA | m_particleCount);

pDevice->GetD3DDevice()->SetStreamSource(1, m_pParticleDataVB, 0, sizeof(M_PARTICLEDATA) );

pDevice->GetD3DDevice()->SetStreamSourceFreq(1, D3DSTREAMSOURCE_INSTANCEDATA | 1);


pDevice->GetD3DDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);

The first stream, pCornerDataVB, contains the definition of a single particle which is basically just the texture coordinates of a quad. The second stream, pParticleDataVB, contains the particles’ positions and properties.

Another functionality that also greatly increased the particle rendering speed was the use of texture packing. Particles in our system may use different textures, but we did not want to separate the rendering into multiple passes for different textures. The solution was to pack all individual textures into a new single texture at particle system initialization. The particle data passed to the vertex shader then contain texture offset and size information that is used to select the correct sub-texture.

If you want to play with the particle system yourself you can download the software at:


If you manage to create some really cool looking particle system, please send me a message with a screenshot or link to a youtube video. It would be really nice to see what can be done with it.

Click here to view the iotd

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.