Skip to content

Commit eadc36c

Browse files
committed
Refactor particle emitters and add lots of new customization options
1 parent acd7144 commit eadc36c

File tree

8 files changed

+827
-348
lines changed

8 files changed

+827
-348
lines changed

Source/Documentation/Manual/physics.rst

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2449,6 +2449,29 @@ the one shown below::
24492449
-1.0485 1.0 2.8
24502450
-1 0 0
24512451
0.1
2452+
2453+
Comment ( ORTS parameters come after MSTS data! )
2454+
ORTSPositionVariation ( 0m 0m 0m )
2455+
ORTSInitialVelocityVariation ( 0.1 0.1 0.1 )
2456+
ORTSEmissionSpeedLimit ( 150m/s )
2457+
ORTSFinalVelocity ( 0 1m/s 0 )
2458+
ORTSFinalVelocityVariation ( 0.75m/s 0.75m/s 0.75m/s )
2459+
2460+
ORTSLifespanMultiplier ( 1.0 )
2461+
ORTSLifespanVariation ( 0.5 )
2462+
ORTSMomentumMultiplier ( 1.0 )
2463+
ORTSMomentumVariation ( 0.1 )
2464+
2465+
ORTSInititalExpansion ( 1.0 )
2466+
ORTSExpansionSpeed ( 4.0 )
2467+
ORTSRotationVariation ( 0.25 )
2468+
ORTSWindMultiplier ( 1.0 )
2469+
2470+
ORTSPipeArea ( 0.03m^2 )
2471+
ORTSMaxParticles ( 2500 )
2472+
ORTSRateMultiplier ( 1.0 )
2473+
ORTSUseChaoticRandomization ( false )
2474+
ORTSShapeHierarchy ( "MAIN" )
24522475
)
24532476

24542477
The code block consists of the following elements:
@@ -2459,6 +2482,161 @@ The code block consists of the following elements:
24592482
- Effect direction of emission (given as a normal x, y and z)
24602483
- Effect nozzle width (in metres)
24612484

2485+
.. index::
2486+
single: ORTSPositionVariation
2487+
single: ORTSInitialVelocityVariation
2488+
single: ORTSEmissionSpeedLimit
2489+
single: ORTSFinalVelocity
2490+
single: ORTSFinalVelocityVariation
2491+
single: ORTSLifespanMultiplier
2492+
single: ORTSLifespanVariation
2493+
single: ORTSMomentumMultiplier
2494+
single: ORTSMomentumVariation
2495+
single: ORTSInititalExpansion
2496+
single: ORTSExpansionSpeed
2497+
single: ORTSRotationVariation
2498+
single: ORTSWindMultiplier
2499+
single: ORTSPipeArea
2500+
single: ORTSMaxParticles
2501+
single: ORTSRateMultiplier
2502+
single: ORTSUseChaoticRandomization
2503+
single: ORTSShapeHierarchy
2504+
2505+
After including these settings, additional *optional* parameters unique to OR can
2506+
be included to further customize effect emitters:
2507+
2508+
- ``ORTSPositionVariation ( x y z )`` -- Specifies the amplitude of random variation
2509+
in the right/left, up/down, and front/back emission location of a particle (default units
2510+
are meters). Useful for non-circular exhaust ports, as it allows one particle emitter
2511+
to be used to spawn particles from an area, rather than a single point. Note that
2512+
``ORTSPositionVariation ( 1m 0m 0m )`` would allow particles to emit 1 meter right and
2513+
1 meter left of the initial position, for a total variation of 2 meters. Similar is
2514+
true of all other parameters related to randomness, the total variation is double what's
2515+
specified. Feature is disabled by default.
2516+
- ``ORTSInitialVelocityVariation ( x y z )`` -- Defines the randomization of initial particle
2517+
velocity in the right/left, up/down, and front/back directions, as a function of the
2518+
particle's initial speed (values are unitless). The default value is ( 0.1 0.1 0.1 ),
2519+
meaning the speed in each direction can be increased or decreased by 10% of the initial
2520+
particle speed. Larger values make the particle exhaust seem less directed and more diffuse.
2521+
- ``ORTSEmissionSpeedLimit ( v )`` -- Some particle emitters are driven by the simulated flow
2522+
rate of exhaust, which has to make some assumptions about the pressure and volume of exhaust.
2523+
This can lead to unrealistically high speed particles being emitted, so a speed limit can be
2524+
set (default units are meters per second) to keep particle speed reasonable. This is not a hard
2525+
limit, it is gradually enforced as the simulation calculates higher and higher exhaust speed.
2526+
The limit is also applied before considering the emitter velocity factor, so actual exhaust speed
2527+
will vary depending on other settings.
2528+
By default, the limit is 150 meters per second, which will be suitable in most cases.
2529+
- ``ORTSFinalVelocity ( x y z )`` -- Determines the final right/left, up/down, and front/back
2530+
velocity of particles after they have settled (default units of meters per second). The default
2531+
is 1 m/s directly upward, and can be changed to fine tune the appearance of the particle trail
2532+
produced. Note that wind velocity is added to this value afterward.
2533+
- ``ORTSFinalVelocityVariation ( x y z )`` -- Unlike initial velocity variation, final velocity
2534+
variation determines the amplitude of random variation of final velocity in absolute terms
2535+
(default units of meters per second). The default setting is +/- 0.75 m/s in all directions, but
2536+
changing this can adjust the amount of and shape of particle trail spread. Larger variations
2537+
make for exhaust that seems more chaotic and diffuse.
2538+
- ``ORTSLifespanMultiplier ( x )`` -- Multiplies the lifetime of particles emitted from this
2539+
emitter by the given (unitless) value. Particle lifetime varies depending on simulation
2540+
data, but if particles seem to last too long a value less than 1 can be entered here, or a
2541+
value greater than 1 entered if particles don't seem to last long enough. The default value
2542+
is 1, producing particles that last as long as the simulation specifies.
2543+
- ``ORTSLifespanVariation ( x )`` -- Sets the random variation of the particle lifetime multiplier
2544+
(unitless). Values greater than 1 can cause particles to randomly generate with a lifetime of
2545+
0 seconds, which will prevent those particles from being rendered.
2546+
The default is +/- 0.5 times the lifespan.
2547+
- ``ORTSMomentumMultiplier ( x )`` -- Changes how long it takes for a particle to transition from
2548+
its initial velocity to its final velocity (unitless). Values above 1 make particles
2549+
have more momentum and move more smoothly, though also travel further from the emitter point before
2550+
being caught by the wind. Values below 1 give more sudden deceleration and prevent particles from
2551+
travelling very far before decelerating to their final speed.
2552+
The default setting is 1x.
2553+
- ``ORTSMomentumVariation ( x )`` -- Similar to ORTSLifespanVariation, gives the amplitude of
2554+
random variation in the momentum multiplier (unitless). Larger values increase the
2555+
final spread of particles, which works well in combination with ORTSFinalVelocityVariation.
2556+
The default setting is +/- 0.1x.
2557+
- ``ORTSInititalExpansion ( x )`` -- When particles are emitted at high speed, they expand
2558+
substantially as the exhaust pressure equalizes with the surrounding air. The (unitless)
2559+
value given here multiplies the amount of expansion that occurs in this initial phase.
2560+
Entering 0 disables this component of particle expansion, any value greater than 0 progressively
2561+
increases the amount particles expand by. The default setting is 1.
2562+
- ``ORTSExpansionSpeed ( x )`` -- Every particle expands in diameter at a constant rate the longer
2563+
since it was emitted, making exhaust seem more spread out as it mixes with the air. The
2564+
(unitless) value entered in this parameter specifies how much the size of a particle increases
2565+
every second, relative to the original particle size (ie: the nozzle width). The default value is 4.0,
2566+
meaning every particle will expand by 4x the original width for every second its in the air. Entering
2567+
0 would disable expansion over time, and negative values would cause particles to shrink over time
2568+
(particles are not allowed to have a negative size, instead they disappear).
2569+
- ``ORTSRotationVariation ( x )`` -- Particles rotate randomly to create some visual interest, this
2570+
parameter determines the max rotation speed (in radians per second) a particle is allowed to have,
2571+
either clockwise or counterclockwise. Higher speeds make for more chaotic looking effects. The
2572+
default setting allows for random rotation speeds between -0.25 and 0.25 radians per second.
2573+
- ``ORTSWindMultiplier ( x )`` -- Affects how strongly wind changes the final velocity of
2574+
these particles (unitless). Values greater than 1 increase wind strength, values less than 1
2575+
decrease wind strength, with 0 completely disabling the wind effect from changing final velocity.
2576+
A value of 1 is used by default, such that the wind speed used by the simulation is used directly.
2577+
This can be adjusted to prevent particles that shouldn't be influenced by the wind (eg: cylinder
2578+
cocks close to ground level) from flying off in whatever direction the wind is going.
2579+
- ``ORTSPipeArea ( a )`` -- Niche parameter to adjust the area of the exhaust pipe used by
2580+
the simulation (default units square feet). By default, the area is assumed to be a circle with
2581+
the same diameter as the exhaust particles. However, for non-circular exhausts this can be combined
2582+
with ORTSPositionVariation to give more believable results. Larger areas result in lower exhaust
2583+
speed without changing the number of particles emitted per second, which also allows this to
2584+
be used as a speed multiplier, though ORTSinitialVelocity is preferred for that purpose.
2585+
- ``ORTSMaxParticles ( n )`` -- Override for the maximum number of particles this emitter should
2586+
have in the world simultaneously (unitless integer). The default value is 2500 particles, which works
2587+
in many cases but may not be appropriate in some unusual circumstances. The limit can be reduced
2588+
on less extreme particle emitters to reduce memory use, or can be increased for more extreme emitters
2589+
to prevent particles disappearing and/or the reduction in particle emission rate caused by reaching
2590+
the particle limit. Do NOT increase the limit if particles are already overlapping; it is often
2591+
better to simply reduce the number of particles emitted using ORTSRateMultiplier and/or other
2592+
parameters listed here.
2593+
- ``ORTSRateMultiplier ( x )`` -- Multiplies the number of particles emitted per second by the given
2594+
value (unitless). Values less than 1 reduce the rate of particle emission, while values greater than
2595+
1 increase the rate of particle emission. The particle rate is determined by the simulation, but may
2596+
not produce aesthetically pleasing results in some cases due to particles overlapping (emitted too
2597+
quickly) or spreading out (emitted too slowly), so some fine-tuning can be done using this parameter.
2598+
This is set to 1 by default, producing the exact number of particles estimated by the simulation.
2599+
- ``ORTSUseChaoticRandomization ( 0/1 )`` -- Changes the randomization algorithm used for positions,
2600+
velocities, durations, and so on to be "chaotic" if given a true or 1 value. Default is false or 0,
2601+
giving "smooth" randomization. With the "chaotic" randomization algorithm, the random changes in
2602+
position/velocity/time are entirely random and do not depend on the random values generated for the
2603+
previous particle, resulting in sudden dramatic changes. In comparison, the default "smooth"
2604+
randomziation algorithm changes the random values by a small amount for each iteration. The "chaotic"
2605+
algorithm tends to make exhaust that is more spread out and discontinuous, which may be desireable in
2606+
some cases.
2607+
- ``ORTSShapeHierarchy ( MATRIXNAME )`` -- Selects the sub object of the engine/wagon
2608+
shape the emitter should be attached to using the name of the sub object matrix.
2609+
The x, y, z location given earlier will then be measured relative to the sub object,
2610+
and the emitter will move as the sub object moves in real time.
2611+
Matrix names can be determined using shape viewing programs. If the given name
2612+
cannot be found, a warning is produced in the log and the emitter will be attached
2613+
to the main shape object. Similarly, if ``ORTSShapeHierarchy`` isn't defined, the emitter
2614+
will be attached to the main object, similar to the MSTS behavior.
2615+
2616+
2617+
.. index::
2618+
single: ORTSPosition
2619+
single: ORTSInitialVelocity
2620+
single: ORTSParticleDiameter
2621+
2622+
Alternatively, the legacy MSTS data can be skipped entirely and replaced with
2623+
equivalent OR specific parameters. In this case, order of data entry does not
2624+
matter:
2625+
2626+
FXName (
2627+
ORTSPosition ( -1.0485m 1.0m 2.8m )
2628+
ORTSInitialVelocity ( -1 0 0 )
2629+
ORTSParticleDiameter ( 0.1m )
2630+
Comment ( Insert other ORTS parameters as desired, but skip MSTS data! )
2631+
)
2632+
2633+
- ``ORTSPosition ( x y z )`` -- defines the width, height, length location of the emitter (in meters by default)
2634+
- ``ORTSInitialVelocity ( x y z )`` -- defines the right, up, forward components of emission direction
2635+
(unitless, the particle speed is multiplied by this vector to determine the 3D velocity of particles.
2636+
Speed can be divided by inserting values less than 1, or multiplied by inserting values greater than 1.)
2637+
- And ``ORTSParticleDiameter ( d )`` -- gives the nozzle width (in meters by default), which sets the initial
2638+
size of each particle
2639+
24622640
Auxiliary Water Tenders
24632641
'''''''''''''''''''''''
24642642

0 commit comments

Comments
 (0)