World: r3wp
[View] discuss view related issues
older newer | first last |
Maxim 15-Sep-2010 [10283x16] | game engines use this simple system. -create very transparent images with a gaussian fall off. actually give the prefered shape to your image... so if you want a triangle-like flame, generate a smooth triangle with alpha/color falloff. -create a block which will store a list of pairs, each one holds the position of a single "particle" |
the idea is that points are inserted/removed in lifo order, with the order determining age. | |
decide on a number of particles, lets say count: 20 | |
decide on a particle life time... lets say life: 10 | |
then go over the list, picking up count amount of particles at at time with life number of interations. the life iteration is used to calculate age: life / life-counter | |
then based on age, move the particles according to some simple randomized algorithm. try to use something to ground their direction... sometimes refering to previous particles allows you to make movement constant... so lets say: new-position: current-particle + 0x5 + random either greater? last-particle/x current-particle/x [5][-5] | |
then move the particle to the appropriate position in the face. as they spread out, they will disapear. | |
all is left, is to add/remove new pairs to your list, basically, the last iteration knocks off old particles from the list and inserts new ones at your fire origin. | |
if you want smoke, just add the "dying" particles to a second list, using the same process, to animate them but with a bigger/softer image. the dying fire becomes the birth of the smoke. | |
for the particles, either pregenerate (and simply offset) small faces with an transparent image or build an AGG block at each refresh. | |
you can even blur aging particles by adding an effects block to them as they age. but that will probably kill the refreh | |
they only unknown is how many particles you can have before view really starts to slow down | |
also make sure to only call show on the region of your graphics which will really contain particles... there no point in blitting the whole house if only the window is on fire. | |
the plasma effect you saw used repetitive blur to an image, with new particles added and some offset added to the previous image. the problem with this is that you cannot change the color and the fact that the whole image gets faded. it could work if R2's effect system also managed the alpha channel but it doesn't AFAIK. | |
Hope this helps! | |
for more control, you can also store two sets of pairs for your particles... one being the position and the second being current velocity... this has the advantage of guaranteeing particle movement direction. in your loop, all you do is add a bit of variation to the velocity and then add the velocity to the position. | |
amacleod 15-Sep-2010 [10299] | Very cool, Maxim...thanks. is this done as an interactive process? Not sure what you are asking but stage 1 would be to allow these fire "objects" to be placed on top of an image via drag and drop and allow for some editing such as sizing. (Later versions would allow adjusting those other variables you mentioned above). Stage 2 would allow for some transitions from one set of settings to another so for example the fire can become more intense over time or when clicked on or a button is pressed. I just had a week of training on a flash based system...its cute and does teh job for what we are going to use these "simulations" for but I thought it was a little too complicated for your average fireman to use if he wanted to create his own sims for drill purposes. The flash extensions used all those variables you mentioned above to allow for a great degree of controll of the effects. |
Maxim 15-Sep-2010 [10300] | by interactive I mean will this be rendered or running live? with a rendered system you can crank up the particle count and just pregenerate the whole data set as a series of images. then when you need to see it, just cycle the image of a face. usually, people use a few particles for preview... then generate "flipbooks" which are just rendered images and include thousands of particles with their alpha channel density reduced to practically nothing (like 2% visibility) this generates very pretty effects, but at a cost of rendering time. |
amacleod 15-Sep-2010 [10301] | interactive? depends on the quality of real time...it does not need to be super realistic....I'll play with it...thanks |
Maxim 15-Sep-2010 [10302] | If you can get the basic system setup, I'll help you improve it. just give me a link to download :-) |
Oldes 16-Sep-2010 [10303x4] | funny... I'm just working on smokes, but in my dialect..: http://box.lebeda.ws/~hmm/rswf/temp/smoke.html http://box.lebeda.ws/~hmm/rswf/temp/smoke.rswf |
this version is using only one bitmap so far with 100 precomputed particle paths | |
I would like to optimize it now to have the fading+scaled bitmap prerendered as this version is still quite slow on Wii where I need it. The problem is, that I must have is as small as possible so I cannot prerender too much | |
(it's not slow as stand alone, but with game where I need it it's noticable) | |
Steeve 16-Sep-2010 [10307] | nice |
Maxim 16-Sep-2010 [10308x4] | you could render it as a single plane mask and use it only as transparency (alpha) for another image. |
this even allows you to have different colors and scales of smoke re-using the same data | |
doesn't the wii actually have particles? | |
I mean a particle system built-in the engine... | |
Steeve 16-Sep-2010 [10312x2] | If my I'm not doing a wrong guess, your WITH function bind its block each time it's called. That may be quite slow. |
But maybe, it's just a dialect, not something evaluated by Rebol in real time... | |
Henrik 16-Sep-2010 [10314] | the wii is too slow for that? interesting |
Steeve 16-Sep-2010 [10315x2] | Oldes, how many particules do you process in real time ? |
instead you could process a cluster of particules with the same path (tough, the look an feel may be less impressive) | |
Maxim 16-Sep-2010 [10317] | better off having an image which simulates the cluster to begin with. |
Steeve 16-Sep-2010 [10318] | yep |
Oldes 16-Sep-2010 [10319x2] | The problem is, that we have only 40MB for complete game so I cannot prerender the smoke effect into sequence of images and I cannot do it even during init time as the engine has some problems with premultiplied semitransparent images. But I want to do some improvements.. also it's possible to make (pregenerate) a classic animation for each particle so no AS would be used to traverse the block with positions which also slows down a little bit... and no, the engine is not slow for that, but you must have the game itself running as well under the smoke effect:) |
I just wanted to show amacleod how it's possible to do that. This was first attempt imho. In the PC version we used just some morphing blured shapes. But the engine on Wii has no blur support. | |
amacleod 17-Sep-2010 [10321] | Thanks Oldes. But I did not want to use flash...wanted a pure rebol solution. |
Anton 17-Sep-2010 [10322x3] | http://anton.wildit.net.au/rebol/demo/rebol-on-fire.r |
and solar-refractor.r | |
and blood-light.r | |
amacleod 17-Sep-2010 [10325] | Thanks Anton. I'll look over the code of those |
Oldes 17-Sep-2010 [10326x2] | Or you can prerender the smoke and do something like that: do http://box.lebeda.ws/~hmm/rebol/vid-anim.r |
(huh.. it was years ago I did something like that in REBOL - I even had to google to refresh my memories) | |
Maxim 17-Sep-2010 [10328x4] | I'm working on a little particle generator... I coudn't resists. |
its strating to actually produce interesting results :-) | |
I'm managing 1000 particles via Draw at about 50% of one core. not bad :-) | |
the particle engine is done, I'm now building a view interface to control the various properties like wind/turbulence. you can even ignite your own fires & smoke with a click of the mouse. won't be long, I'll put it on rebol.org. | |
amacleod 17-Sep-2010 [10332] | you are the man Maxim....I hate to distract you from your other distractions but thanks |
older newer | first last |