After several people have asked me about using Particle Forge, I gave both of them an enormous annotated version of the wiki page for it.
I have decided to create a central thread for questions people might have and for this enormous post.
PARTICLE FORGE ANNOTATED GUIDE:
I shall start from the beginning, in the off chance that you are doing it wrong.
1, download particle forge from the downloads section on the Sins site. (If you fail this, I will shoot myself)
2, unzip it on to your desktop. DO NOT PUT IT INTO YOUR SINS DIRECTORY!
3, copy the following from your Sins directory into the Particle Forge 3 folder: Particle, textures, textureanimations, pipeline effects, and mesh.
4, go into the Entrenchment folder and copy and merge the contents of the appropriate(above) Entrenchment folders.
5, repeat with Diplomacy.
6, copy the 3d3fx.dll or something like that, (I am doing this from memory, so don't sue me) from the main sins directory into the PF 3 folder.
7, start particle forge.
I have copied the contents of the sins wiki in order to better remember the things contained therein. I shall annotate these things for better understandings.
You should see a black screen in the middle with two axes, green and red. Green is y, and red is x.
Drag the window to the right until you see the control window.
Zoom out a little with the scroll wheel(There is no other way to zoom in/out) and rotate the screen with the right mouse button. You should see the blue, red, and green axes. Green = y, red = x, and blue = z. Z aligns itself with the way the particle effect is facing, e.g., a muzzle will face along the Z axis.
Right click the thing that says emitter and add a new point-type emitter.
You should see this in the pane: (my notes will look like this in parenthesis)
It's a good idea to know what you want to make beforehand, and practice definitely makes perfect, so good luck.
- Design
- Enabled: Provides a quick way to disable an emitter without erasing it. (turns on and off the emitter)
- Name: Use this to rename the emitter for clarity. (Name your emitters. A good way to keep track of what your emitters are. Do not name them things like Point, point, ring, Ring, Sphere, sphere. You will get very peculiar errors if you do. (Bailknight did it, bad Bailknight))
- Type: Cannot be changed. Displays whether the emitter is a point, sphere, or ring. (Stupid, really, you shouldn't care about this.)
- Emitter
- EmitCount.IsInfinite: Allows the emitter to ignore EmitCount.Max & emit an unlimited number of particles. (True or false, do you want this emitter to emit an infinite number of particles as long as it is alive?)
- EmitCount.Max: Sets the maximum number of particles to emit. (If the above is false, then you can have a set number of particles.)
- ImitIntervals.HasInterval: Enables the following ImitIntervals values, allowing particle creation in periodic bursts. (This is very complicated, and does not seem as straightforward as it looks. True or false, do you want your emitter to release particles in spurts?)
- ImitIntervals.RunDuration: Number of seconds to emit particles. (If you want to use it, and the above is false, how long do you want each interval to emit particles for? This is dependent on the emitRate and the emitCount)
- ImitIntervals.WaitDuration: Number of seconds to wait before emitting particles again. (Just as it says, how long do you want it to wait in between spurts?)
- EmitRate: Number of particles emitted per second. (Exactly as it sounds. If you have an infinite emitcount, it will just release whatever number you put in here, e.g. 10 particles per sec, for the lifetime of the emitter. If you have a set emitcount, it will release the number of particles you have set for the amount of time you tell it. e.g. 10 particles per sec with 100 particles will last for 10 secs)
- Position: Position of the emitter's center in x,y,z coordinates. (in that order, x,y,z, the origin of the emitter is placed on the axes. Negative to move it negatively along those axes)
- Rotation.Cross: ? (These don't ever work the way I want them to, but they theoretically rotate around different rotational axes. Cross rotates the emitter around the Z? I think.)
- Rotation.Forward: ? (Rotates the emitter around the Y?)
- Rotation.Up: ? (Rotates the emitter around the X? Type in 180 in one of the above in order to flip your emitter around.)
- Texture.Primary: The texture file that gives the particle its appearance. (Get a .tga or .dds file and put it in. The emitter will emit particles of this texture.)
- Texture.Secondary: Secondary texture file, used only when the GsExhaust shader is selected. (As it says, with the pipeline effect gsExhaust, this secondary texture will be tiled over the previous texture.)
- TextureAnimation.FPS: If a texture animation is selected below, the number of frames per second the animation is played at. (Don't mess with this unless you want to use a Textureanim. Set this to 0 for static textureanimations)
- TextureAnimation.Name: A texture animation file. (The name of the .textureanimation file to use)
- TextureAnimation.SpawnType: If a texture animation is selected above, whether it plays sequentially from the first frame (FirstFrame), sequentially from a random start frame (SequentialFrames), or randomly from a random start frame (RandomFrames). ((Or is FirstFrame playing randomly from the first frame & SequentialFrames playing sequentially from the first frame??? Need clarification!)) (See, this is confusing, because the Wiki don't know what they are doing and they use parenthesis to declare it. The last statement was not mine. This just defines whether the texanim plays from the first frame, a random frame, or sequential frames. First frame plays the slides in order at the above speed. Random plays them without order at the above speed. Sequential frames plays them in order, but starts on sequential frames from previous particles. e.g. the first particle will start and play on frame 1, the second on frame 2, etc.)
- Time.Duration: Number of seconds the emitter lasts. (This will cut your emitter short)
- Time.IsInfinite: Allows the emitter to ignore Time.Duration and last forever. (Do you want it to be cut short? True or false)
- Time.Start: Number of seconds to delay the start of the emitter. (exactly as they said it. If you want an emitter to wait 5 seconds before beginning, put it here.)
- The following differ between emitter types.
-
Point
- Emitter:Point
- AngleVariance: How many degrees a particle's velocity can vary from the emitter's forward direction. (How the particle's direction is restricted. To lock a particle's direction, set this to 0. e.g. if you want a bullet or a stream of particles)
Sphere
- Emitter:Sphere
- RadiusX/Y/Z - Min/+ Max: The minimum and maximum radius in which particles will spawn. Using equal minimums and maximums forms a thin shell, while using minimums of 0 forms a full sphere. (Yep)
- SpawnAngle.Latitudinal/Longitudinal - Min/+ Max: Controls in what angles of the sphere particles will spawn. Values in degrees. This is where you would form, for example, a half-sphere by restricting one set to 0 through 180 degrees, while permitting the other set to be a full 0 through 360. (Yep)
- Speed.AzimuthalTangential/PolarTangential: Gives particles velocity away from the center of the sphere, on the equatorial (azimuthal) or polar planes. (I wish that these had more randomness. But they do what they say.)
Ring
- Emitter:Ring
- RadiusX/Y - Min/+ Max: The X & Y radii allow creation of rings that have a wider or longer radius -- ovals. The Min and Max specify the inner & outer rings that the particles will spawn between. (yep.)
- ScaleStartSpeedsByRadius: (Even I, the great Krdax, have no idea what the heck this does.)
- SpawnAngle - Min/+ Max: Degrees between which particles can spawn. (Kinda like the sphere spawn angle and the angle variance)
- SpawnControl.IsAngleRandom: (Sets the spawn angle to random or organized. If false, the particles will spawn around the ring in order along a number of points specified below.)
- SpawnControl.NonRandomLoopParticleCount: (Set this to define the level of detail that you want your controlled ring to have.)
- SpawnDirectionIsParallelToPlane: (Set this to the non-default if you want your particle directions to not follow an outward force from the ring origin.)
- SpawnHeight - Min/+ Max: Used to turn the ring into a cylinder of specified (Max minus Min) length. (yep)
- Speed.AlongNormal/Tangent: Gives particles velocity away from the center of the ring, either in the direction normal (perpendicular) or tangent (same) to the ring's plane. (yep.)
- Particle
- Billboard.Anchor: Controls how the 2D particles are anchored. (Wow, this is one of the most important things. No description? There are many different choices, but it anchors the particles by the selection, center is default, for example, if I set this to bottom right corner, it would emit and rotate the particles by that corner)
- Billboard.Facing: Controls the direction the 2D particles face. (Even more important, three choices, Parallel, Perpendicular and Camera. Parallel locks the texture onto the 3D plane, for example, puts the texture down flat. Perpendicular locks the 2D particle along one axis, but leaves it camera-facing for the rest. This is used for bullets, sparks, etc. that require a specific direction. The default, camera, locks the particle to always follow the camera.)
- Color: The color of the particle in RGB. This will also filter the colors of the primary texture. (filters the first texture by the mentioned color. Only the first, not the second. Pick the color that you want)
- IsAttachedToEmitter: Uncertain of the importance of this parameter. (Wow, this one is very important. It tells sins whether or not the particle is attached to the emitter. For example, smoke in bailknight's graphical mod, or a missile trail or something. If the emitter is moving in Sins space, will all of the particles move at the same relative speed?)
- Lifetime: Number of seconds each particle lasts. (Starts once emitted, each particle lasts for the specified time.)
- Mass: ? Probably only needed when using Force affectors. (Yep.)
- Rotation.Direction: Controls which direction(s) the particle can rotate. (Rotates the individual particle without regards to orientation or emitter rotation.)
- Rotation.Enabled: Enables or disables rotation. (Do you want rotation? true or false)
- Rotation.Speed - Min and Rotation.Speed + Max: Particles will rotate at a speed between the minimum and maximum. Values in degrees per second. (exactly)
- Rotation.Start - Min and Rotation.Start + Max: Particles will start out rotated at an angle between the minimum and maximum. Values in degrees. (This will define the starting rotation of the particle. Set the min to 0 and the max to 360 if you want randomly rotated particles. Don't touch this if your billboard is set to perpendicular as it will mess it up.)
- Shader: How the particle is rendered. In most cases, leave it at ParticleAdditive. To prevent particles from being influenced by the background light, use ParticleNotAdditive. When using non-additive rendering, make sure the texture uses transparency or you will end up with a rectangular particle. To achieve a higher-contrast "glowy" particle, you can use GsExhaust. Note that this shader requires a secondary texture and diminishes the filtering effect of the Color value above. (Exactly. ParticleAdditive is the default, and will not stack alpha values, but will ignore black and the darker the texture, the darker the particle. ParticleNotAdditive makes the particle display black and gray and things. It will display the entire texture, but it will not stack. The GSExhaust makes an additive particle with the secondary texture. If you want this emitter to emit meshes, set this to ParticleMeshOld)
- Size - Width and Size + Height: The dimensions of the 2D particle. (The size in sins units. I think...)
- Speed Linear - Min and Speed Linear + Max: Particles will spawn with a velocity between the minimum and maximum (relative to the emitter). (If you want random velocity, greatly vary your values.)
- ParticleMesh data: Used when a particle effect also consists of a mesh, such as in a missile travel effect.
- FileName: Name of the .mesh file. (If you set the Shader to particleMeshOld, you can select a mesh to emit.)
- RotationAxis: (Advanced setting, don't mess with this unless you really know what you are getting in to. It changes how the mesh rotates in relation to its individual axis.)
- RotationAxisType: (This changes its relative axis to something else, another advanced setting.)
And that is emitters. Once you have emitters, you can assign things to them called affectors. Affectors will apply forces or fade particles. You must attach an emitter to an affector in order for it to effect it. Right click on the affectors to attach emitters.
I shall explain.
The properties below are present in all affector types.
- Design
- Enabled: Provides a quick way to disable an affector without erasing it. (You can turn them on and off for debug purposes.)
- Name: Use this to rename the affector for clarity. (useless for affectors)
- Type: Cannot be changed. Displays which of the below types the affector is. (duh.)
- Affector
- Attached: (I believe this only effects certain affectors, but it refers to the above isAttached modifier.)
- OnlyAfter.Enabled: Enables or disables OnlyAfter.Time. (Do you want the particle effect to wait before applying this affector? true or false)
- OnlyAfter.Time: Start affecting particles after they are this many seconds old. (Exactly as it appears.)
- OnlyBefore.Enabled: Enables or disables OnlyBefore.Time. (Do you want the affector to be cut short? true or false)
- OnlyBefore.Time: Stop affecting particles after they are this many seconds old. (Yep)
- Time.Duration: How many seconds the affector lasts. (The duration of the affector. It's not redundant, see below.)
- Time.IsInfinite: Ignores Time.Duration if set to True. (Default true)
- Time.Start: Number of seconds to delay the start of the affector. (Delays the actual start of the affector. The difference between this and the onlyafter and the onlybefore modifiers is that the time.start is relative to the particle effect time, and the onlyafter and onlybefore are relative to the affected particle's lifetime.)
These are unique to each type of affector.
Color Oscillator (Changes the color and/or alpha of the particle relative to its spawn and lifetime, this overrules fade.)
- Affector:ColorOscillator
- Alpha.Begin/End: Opacity values to cycle between. Values can range from 1.00 to 0.00. (The transparency from start of the cycle to finish)
- Color.Begin/End: Colors to cycle between in RGB. (Color from start of the cycle to finish)
- TransitionPeriod: Seconds for one cycle. (The amount of seconds in one cycle.)
Drag (drags on particle movement relative to the particle effect.)
- Affector:Drag
- DragCoefficient: (How much to drag by. 1 is complete stop, 0.2 is a little drag)
Fade (One of the more important affectors, fades a particle in or out at its spawn and/or death)
- Affector:Fade
- FadeIn.Enabled: Enables or disables FadeIn.Time. (Do you want it to fade in?)
- FadeIn.Time: Seconds it takes the particle to fade in. This value can be larger than the Lifetime value. (yep)
- FadeOut.Enabled: Enables or disables FadeOut.Time. (Do you want it to fade out?)
- FadeOut.Time: Seconds it takes the particle to fade out. Uses the particle's end of lifetime as the end of the fade, NOT the start of the fade. This value can be larger than the Lifetime value. (Yep)
Jitter (Random noise generation on a particle's individual movement)
- Affector:Jitter
- Force: (How much jitter)
- UseCommonForceDirection: (Do you want all particles to jitter together(true)? Or separately?(false))
Kill Particles Near Point (Particles entering the threshold are instantly removed)
- Affector:KillParticlesNearPoint
- DistanceThreshold: (The distance from the origin that affected particles are removed)
- Point: (Where the origin of the threshold is.)
Linear Force In Direction (Forces particles in the direction specified.(Useful for particles that need to be moved in a strange direction that they are not facing.))
- Affector:LinearForceInDirection
- Direction: (The direction to apply the force)
- Force - Min/+ Max: (The force to apply. Apparently it is not random.)
Linear Force To Point (Pulls affected particles in to the point with the specified force)
- Affector:LinearForceToPoint
- Force - Min/+ Max: (The amount of force to apply. Can be negative to force particles away.)
- Point: (The origin of the pull or push.)
Linear Inflate (An affector that effects the size of particles at a constant rate.)
- Affector:LinearInflate
- InflateRate.Height/Width: Increase of the particle's dimensions in distance-units per second. To decrease size, use negative values. (Exactly as it appears.)
Linear Bounded Inflate (It doesn't work)
- Affector:LinearBoundedInflate
- Height/Width - Min/+ Max: ???
Rotate About Axis (Rotates attached particles around a specified ring)
- Affector:RotateAboutAxis
- Axis: (the axis that the ring is oriented to.)
- Origin: (the origin of the ring.)
- Radius: (The radius of the ring.)
- Speed: (The speed at which particles will gather/rotate around the ring. For some reason the speed is proportional to the size of the radius. Beware, 1000 speed could crash your computer if the radius is too small.)
Size Oscillator (Cycles the size of the particle between the values. Pulsating particles. This will override linearinflate affector)
- Affector:SizeOscillator
- SizeX/Y.Begin/End: Particle dimensions to cycle between. (Specify the start size and the end size of each cycle)
- TransitionPeriod: Seconds in one cycle. (yep)
Global Properties (These are accessed by selecting global properties on the side pane)
- HasInfiniteTime: If true, the particle lasts forever. If false, the particle effect dies after TotalLifeTime seconds. (exactly)
- Length: Only needed for long weapon travel effects. Used to kill the particle when it collides at the given length (rather than the center axis). If left '0' for long weapon projectile effects, the projectile will look like it is going through the target! Value needed is the distance from the center axis to the impact-end of the particle. (used for impact boxes)
- TotalLifeTime: Number of seconds the particle effect lasts. Ignored if HasInfiniteTime is true. (yep.)
As a special note, the key f5 will make your life easy. f5 restarts the particle effect.
This video will detail installation and usage of Particle Forge:
http://www.youtube.com/watch?v=MxWqJwyZuY4
This video is of my thought processes and explanations while I make an effect that looks like something Bailknight would make:
http://www.youtube.com/watch?v=GIU6j2W3oBk
I don't ever stream, but when I do, I do Particle Forge:
http://www.twitch.tv/xrekkegtavun
Post below with questions, and I will make an effort to update this post with clarifications and answer them.
Happy Forging.