problem with particle effect orthogonal to camera

Hi,

When I create a particle effect that is orthgonal to the camera it looks like there’s only 1 bit transparency (top). When I move around the camera the effect immediately disappears (bottom).

self.reset()
self.setPos(0.000, 0.000, 0.000)
self.setHpr(0.000, 0.000, 0.000)
self.setScale(1.000, 1.000, 1.000)
p0 = Particles.Particles('particles-1')
# Particles parameters
p0.setFactory("PointParticleFactory")
p0.setRenderer("SpriteParticleRenderer")
p0.setEmitter("LineEmitter")
p0.setPoolSize(1000)
p0.setBirthRate(3.0000)
p0.setLitterSize(200)
p0.setLitterSpread(0)
p0.setSystemLifespan(0.0000)
p0.setLocalVelocityFlag(1)
p0.setSystemGrowsOlderFlag(0)
# Factory parameters
p0.factory.setLifespanBase(2.0000)
p0.factory.setLifespanSpread(0.0000)
p0.factory.setMassBase(1.0000)
p0.factory.setMassSpread(0.0000)
p0.factory.setTerminalVelocityBase(400.0000)
p0.factory.setTerminalVelocitySpread(0.0000)
# Point factory parameters
# Renderer parameters
p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
p0.renderer.setUserAlpha(1.00)
# Sprite parameters
p0.renderer.addTextureFromFile('sparkle.png')
p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00))
p0.renderer.setXScaleFlag(0)
p0.renderer.setYScaleFlag(0)
p0.renderer.setAnimAngleFlag(0)
p0.renderer.setInitialXScale(0.1000)
p0.renderer.setFinalXScale(1.0000)
p0.renderer.setInitialYScale(0.1000)
p0.renderer.setFinalYScale(1.0000)
p0.renderer.setNonanimatedTheta(0.0000)
p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR)
p0.renderer.setAlphaDisable(0)
# Emitter parameters
p0.emitter.setEmissionType(BaseParticleEmitter.ETEXPLICIT)
p0.emitter.setAmplitude(1.0000)
p0.emitter.setAmplitudeSpread(0.0000)
p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000))
p0.emitter.setExplicitLaunchVector(Vec3(0.0000, 0.0000, 0.0000))
p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
# Line parameters
p0.emitter.setEndpoint1(Point3(10.0000, 0.0000, 0.0000))
p0.emitter.setEndpoint2(Point3(0.0000, 0.0000, 0.0000))
self.addParticles(p0)

When I modify the following line the effect disappears (or moving the camera, or setHpr(1, 0, 0) of the effect).

p0.emitter.setEndpoint1(Point3(10.0000, 0.1000, 0.0000))

Tested on an ATI and a NVIDIA graphiccard.

Azraiyl

Proper “blend” mode transparency requires drawing the transparent objects in order from farthest away to nearest. When all the objects are the same distance away, this is a little problematic. :slight_smile:

There are several solutions, none of which is perfect in every situation. See Transparency and Blending in the manual for a little bit more.

In this case, try something like:
p0.renderer.setDepthWrite(0)

David

Thanks,

I was not able to set this property on p0.renderer, but it works if I use setDepthWrite on the appropriate NodePath.

Azraiyl