Smoke

Blitz3D Forums/Blitz3D Programming/Smoke

elseano(Posted 2004) [#1]
Ok, i wrote this particle effect code and it's basicaly meant to look like smoke. It just ends up looking like a lot of grey blobs that don't look anything like smoke...
I'm using a grey blurry sprite as the main_particle. Does anyone have any ideas anout how I could make this a bit more realistic.

Here's the code:
Function createparticle(player)

	p.particle=New particle
	p\entity=CopyEntity(main_particle)
	p\x=EntityX(player)
	p\y=EntityY(player)-1
	p\z=EntityZ(player)-1
	p\time=Rand(1400,2200)
	p\timer=MilliSecs()
	PositionEntity p\entity,p\x,p\y,p\z
	p\speed=-3
	p\alpha=1
	
End Function 

Function updateparticles()
         
        Local random=Rnd(-0.5,0.5)
	For p.particle= Each particle
	p\alpha=p\alpha-0.1
	EntityAlpha p\entity,p\alpha
        MoveEntity p\ent,random,random,random
	If MilliSecs()>p\time+p\timer Then
	FreeEntity p\entity
	Delete p.particle
	EndIf
    Next

End Function 



jfk EO-11110(Posted 2004) [#2]
If you played my latest demo (secret of manes) there is some smoke with the impact of the bullets when you fire the gun against a wall. If you like that - I released it some time ago, check blitzcoder.com for a particle system by norc.

basicly it works in a way that a number of sprites are fading in and out cascadicly, partially overlapping (in time) while their size is increasing. Tey are all using the same sprite, the nebula sprite at a max of about .2 alpha transparency. It's not single surface, but it's very simple to use and flexible. you can have any number of textures simultanously with that system. In the Demo I use it for Fire and Smoke in the same time. however. -
http://www.blitzcoder.com/cgi-bin/showcase/showcase_showentry.pl?id=norc02062003164813&comments=no


elseano(Posted 2004) [#3]
Wow, nice demo.
Thanks, is it Ok if i change the source etc, and use my own textures?
If so, i will be using this in my next project.
Once again, v nice effects... ;]


jfk EO-11110(Posted 2004) [#4]
yes, of course!


elseano(Posted 2004) [#5]
Thanks.


LostCargo(Posted 2004) [#6]
i have cinema 3d and have been playing around with the pyro plugin. I was wathcing the smoke. To get more realistic smoke they use a sprite system that animates the sprites. So its not just a fade from 1 sprite to nothing. So if you have a fire. the sprite is bright yellow and a full fireball, but at the end it is a small wisp. they also transition the alpha of course.

The effect is quite realistic. Great for explosions or raging fires.


Ross C(Posted 2004) [#7]
my fire system uses this. An animated texture. It looks cool, but since i drew it myself, can't expect too much :)


Clyde(Posted 2004) [#8]
How cool is that hey!
Welldone Guys! :)


LostCargo(Posted 2004) [#9]
Ross do you have a demo u could show us? How are the frame rates on animated sprites? i have only implemented basic smoke particles for fear that the frame rates might get chewed up quickly.


elseano(Posted 2004) [#10]
@Baudspeed: Good idea, thanks for the info. Just been doing some pixel art...maybe I'll try some explosion/smoke/fire sprite animations....at the moment I'm just doing RPG-style people, but I could try this.

I'll post them when they're finished...


Ross C(Posted 2004) [#11]
@baudspeed, it's a single surface system using a texture with frames that i set. And it's fire :S But same idea, the fire animation increments. The frames change a bit. If i were better at drawing, i could do better :)

http://www.rosscrooks.pwp.blueyonder.co.uk/Blitz/test.exe

packed with molebox, so don't open it from the downloadbox thingy :)

If you want, i can give you the demo with just the particles? No matter howmany particles there are, it doesn't really affect the pseed. What kills the above demo is the poly count nd large texture i think :) And the fill rate of course :)

Zoom in and out with the mouse button.


wedoe(Posted 2004) [#12]
Simple smoke:

The image:


AppTitle "Smoke"
; Einar Wedoe, January 2002

Graphics3D 640,480,32,2
Global timer=CreateTimer(60)

Global dx#,dy#,dz#
Global number=50

Dim trail(number)
Dim x#(number)
Dim y#(number)
Dim z#(number)

AmbientLight 80,80,80							
Global camera=CreateCamera()								
CameraViewport camera,0,0,640,480					
PositionEntity camera,0,0,-150						
AntiAlias False

Global Smoke = LoadSprite("smoke.jpg")
SpriteViewMode(Smoke , 1)
PositionEntity(Smoke , 0 , -1000 , 0)
EntityBlend(Smoke,3)
EntityAlpha(Smoke,1)
EntityColor(Smoke,150,150,150)

For a#=1 To number
	trail(a)=CopyEntity(Smoke)
	x(a)=-1000
Next
;--------------------------------
Repeat
Smoke
UpdateWorld()
RenderWorld()
WaitTimer timer
If KeyDown(28) Then SaveBuffer(FrontBuffer(),"smoke.bmp") ; Screenshot on Return
Flip
Until KeyDown (1)
End
;--------------------------------
Function Smoke()
dx=dx+5
 If dx > 360 Then dx=dx-360
dy=dy+5
 If dy > 360 Then dy=dy-360
dz=dz-2
 If dz < 0 Then dz=dz+360
  tmpx#=Sin(dx)*100
  tmpy#=Cos(dy)*100
  tmpz#=Cos(dz)*100+100
b#=number/2+5
 For a#=1 To number-1
	x(a)=x(a+1)
	y(a)=y(a+1)
	z(a)=z(a+1)
     PositionEntity (trail(a),x(a),y(a),z(a))
	 EntityAlpha(trail(a),a/number)
	 b=b-.5
	 ScaleSprite(trail(a),b,b)
 Next
x(number)=tmpx+Rnd(-2,2)
y(number)=tmpy+Rnd(-2,2)
z(number)=tmpz+Rnd(-2,2)
End Function
;---------------------------------


Looks like this:



elseano(Posted 2004) [#13]
Pretty kewl...nice coding