Unreal II and XMP
David's Maps:
XMP-DG_Alaska
Level Design:
Meshes
Textures
|
The Team
David R. Green
- mapper, mesher, audio/music,
- scripter, texturizer
Jason 'FRaK' Dudley - tester
See the map Readme for other testers
|
Contact
You can email us at
dgunreal@lilchips.com
|
|
Unreal Tournament 2004 Level Design -
xWeatherEffect Actor
Actor Classes - Actor - *xWeatherEffect
The xWeatherEffect actor provides your map with a fast rendering rain and snow particle
effect. The xWeatherEffect is basically an emitter that generates particles in a
cube area that follows around the player regardless of his map location.
Adding the Actor
Select the *xWeatherEffect actor in the Actor Classes browser, go to your map [T]op view
and right-click at the map center or origin, and choose "Add xWeatherEffect
here" from the popup menu.
The inserted actor looks like a dragon head:

Make sure that the editor's grid settings are at least 16 or smaller, otherwise the actor
may not place in the map or it may place in an odd location.
I recommend setting the actor's Advanced.bEdShouldSnap property to True so that if you
change its location it snaps to the grid, and set the Advanced.bLockLocation property to
True after it has been inserted so that it cannot be accidentally moved around the editor.
I normally place either the main world ZoneInfo or TerrainInfo at origin location 0:0:0,
so I normally move the xWeatherEffect and other global actors slightly offset such as
Location 64:64:0. This can be set precisely in the actor's Movement.Location.X/Y/Z
properties.
Notes
The xWeatherEffect and any anti-weather Volumes, if you are using them, should normally be
inserted as the final objects in a map. While you can insert them at any time during
map development, the xWeatherEffect and especially the anti-weather Volumes may stop
working after adding a large amount of additional CSG brushes and Actor objects and
performing multiple Builds and Build Alls.
If the xWeatherEffect itself stops working, the best recourse is to delete the actor, do a
Rebuild All, save the map, exit the editor, re-run the editor, open the map, and re-insert
the xWeatherEffect actor and re-set up its properties.
The xWeatherEffect actor will also usually appear as an icon in the center of your
UnrealEd Dynamic Light viewport, that rotates as you move the camera around.
Sometimes the actor will not show up in the Dynamic Light viewport, but can be found in
the [Top], [F]ront and [S]ide Viewports.
The xWeatherEffect emitter effect can be previewed in the Dynamic Light viewport using
Realtime Preview (P) on the Dynamic Light viewport toolbar.

Anti-weather Volumes: Preventing Weather Indoors
To prevent the weather from occuring indoors, place a standard Volume as required within
buildings or rooms and set the xWeatherEffect.Events.Tag and relevant Volume.Events.Tag to
the same value. The text for the Tags can be anything such as "NoRain",
"NoRainHere", "NoSnow", BlockWeather", "AntiWeather" or
whatever you prefer so long as the text is unique.

To place a Volume, move the red Builder Brush to the location in question, set its shape
to a Cube or Cylinder that totally encompasses the building or room where the
xWeatherEffect is to be blocked, then right-click on the Volume Tool and choose the Volume
item on the popup menu.

Note that the xWeatherEffect anti-weather function is a bit flakey. Sometimes simply
rebuilding the map will cause this to stop working, and the xWeather will again appear
when the player is within the Volume area.
Fixing it may require re-entering the Tag texts as different text values, doing a
cut/paste of the xWeatherEffect actor, changing the Volume order to Last (right-click,
Order, To Last), resizing the Volume slightly larger or smaller using Vertex-Editing, or
simply deleting and re-creating the Volume.
Note that if you delete and re-insert the xWeatherEffect actor, or delete and re-create
any anti-weather Volumes, you should always do it in this order: delete actor or Volume,
Rebuild All, save the map, exit UnrealEd, restart UnrealEd, open the map, re-insert the
actor or re-create the Volume.
Also note that in many instances if you change the xWeatherEffect.spawnVelX/Y to anything
other than the default values of 0, you may cause the weather to occur within your
anti-weather Volumes (indoors).
Snow and Dust guidelines
Snow and Dust typically have a longer lifespan than Rain because they fall at a slower
speed. This has the typical side-effect of the player starting to out-run any
"new" visible falling particles in front of him. As each particle falls,
no new particle is spawned in front of the player until the previous ones reach the end of
their Life value.
The only ways to compensate are:
- Increase Speed and decrease Life, to decrease the individual particle lifespan and allow
for new particles to be available for rendering in front of the player.
- Increase the emitter Position values (emitter cube area) to somewhere between ±4096 and
±8192. This will normally require an increase in numParticles to prevent thinning
of the effect, and a change to the maxPclEyeDist property.
- Increase the total particles to 2048 or higher. Watch for framerate hits with
this.
- Keep the maxPclEyeDist at about 60% of the total cube diameter (eg: XY Min/Max of ±8192
= 16384 cube diameter, so 60% = ~9216).
If you are trying to get a blizzard, watch out for framerate impact.
If you set the map Distance Fog really thick, that will help lend to the visual effect of
thick Snow or Dust, requiring less from the xWeatherEffect particles. End values
between 8192 and 10240 are fine, such as DistanceFogStart=1 and DistanceFogEnd=9500.
See VCTF-DG-Arctika (snow), CTF-DG-PineRidge (rain), ONS-DG-FalloutIsland (dust) and
ONS-ArcticStronghold (snow).
Properties
| Display |
| Skins.[0] |
Displayed particle
texture.
Default = None
This should be a DXT3 or DXT5 Alpha Texture.
The UT2004 EmitterTextures package has good textures to use such as RainFB. |
| xWeatherEffect |
| deviation |
Particle motion deviation
(range is 0.0 to 1.0).
Default = 0.4.
0.0 is no particle rotation, 1.0 is maximum particle rotation.
Most effective for adjusting WT_Snow falling style (default is 0.4, try 0.2 through 0.8
for variation). |
| EyeSizeClamp |
unknown...
Default: Max=0.0 Min=0.0. |
| Life |
How long each particle
will live in seconds.
Default: Max=4.0 Min=3.0.
If too short, the particles won't hit the ground. If too long, processing is wasted
as particles fall below the world, and the weather effect may look "thinner" as
it will take more time before particles are recycled in front of the player.
The best way to adjust this value is in UnrealEd by looking below the terrain and seeing
how far the particles are falling below you, if they are falling for a long time below the
terrain, that portion of life is wasted and will thin out the effect. |
| maxPclEyeDist |
I haven't looked at the
scripts/code, but I believe this has to do with distance from player camera/controller
that the particles appear (particle rendering fade distance?).
Default = 590.0.
Values below the default 590 will pull the particles up to your face, values above the 590
will cause the particles to bias towards the player camera frustum depending on the cube
size.
Normally this is set to about 60% of the cube diameter specified in the
xWeatherEffect.Position property. |
| numCols and .numRows |
Number of columns/rows in
the source texture.
Default: Max=4.0 Min=4.0. |
| numParticles |
Number of emitted
particles.
Default = 1024.
When particles reach the Life value they are recycled.
A typical game computer can render up to between 1024 and 4096 particles with only a few
frames-per-second hit. |
| Position |
Size of the cube in Unreal
Units that surrounds the player where emitted particles occur.
Default: XMax=300.0 XMin=-300.0, YMax=300.0 YMin=-300.0, ZMax=300.0 ZMin=-100.0.
X and Y are the cube length and width, Z is the cube height.
The X and Y values are normally identical, eg: X.Min = -2048, X.Max = 2048, Y.Min = -2048,
Y.Max = 2048.
Z.Max can be the same as X/Y.Max but usually is fine around 384 to 512. Z.Min should
only be around -100 to -256 as there is no reason to spawn particles far below the player.
Typical XY values will be about ±512 through ±768 for most weather. Dust and Snow
may require XY values up to ±4096 or more. |
| Size |
Size of the particles.
Default: Max=5.0 Min=4.0.
In other words this determines how large the particles are, such as small or large snow
flakes. |
| spawnVel |
Velocity/direction that
the particles are spawned at.
Default: X=0.0 Y=0.0 Z=-1.0.
XY are normally 0:0, but you can put positive or negative values here to angle the
particle falling direction as desired. Note that non-0 XY values can sometimes
result in the weather entering into non-weather Volumes.
Z should be a negative value so that the particles fall downwards. |
| Speed |
Speed the particles move
at.
Default: Max=200.0 Min=100.0.
If this is too fast the particles will not be visible. |
| WeatherType |
Simulates the weather
type, Rain, Snow, or Dust.
This determines the behaviour of how the particles fall (spin, rotation, etc.). |
Example preset for Rain
| Display.Skins.[0] |
FinalBlend'EmitterTextures.MultiFrame.RainFB' |
| xWeatherEffect.deviation |
default (0.4) |
| xWeatherEffect.EyeSizeClamp |
default (Max = 0.0)
default (Min = 0.0) |
| xWeatherEffect.Life |
default (Max = 4.0)
default (Min = 3.0) |
| xWeatherEffect.maxPclEyeDist |
default (590.0) |
| xWeatherEffect.numCols |
2.0 |
| xWeatherEffect.numParticles |
default (1024) |
| xWeatherEffect.numRows |
2.0 |
| xWeatherEffect.Position |
X Max = 1024.0
X Min = -1024.0
Y Max = 1024.0
Y Min = -1024.0
Z Max = default (300.0)
Z Min = default (-100.0) |
| xWeatherEffect.Size |
default (5.0)
default (4.0) |
| xWeatherEffect.spawnVel |
X = default (0.0)
Y = default (0.0)
Z = default (-1.0) |
| xWeatherEffect.Speed |
Max = 3000.0
Min = 2000.0 |
| xWeatherEffect.WeatherType |
WT_Rain |
Example preset for Snow
| Display.Skins.[0] |
FinalBlend'EmitterTextures.MultiFrame.SnowFB' |
| xWeatherEffect.deviation |
default (0.4) |
| xWeatherEffect.EyeSizeClamp |
default (Max = 0.0)
default (Min = 0.0) |
| xWeatherEffect.Life |
default (Max = 4.0)
default (Min = 3.0) |
| xWeatherEffect.maxPclEyeDist |
default (590.0) |
| xWeatherEffect.numCols |
default (4.0) |
| xWeatherEffect.numParticles |
default (1024) |
| xWeatherEffect.numRows |
default (4.0) |
| xWeatherEffect.Position |
X Max = 2048.0
X Min = -2048.0
Y Max = 2048.0
Y Min = -2048.0
Z Max = default (300.0)
Z Min = default (-100.0) |
| xWeatherEffect.Size |
Max = 3.0
Min = 2.0 |
| xWeatherEffect.spawnVel |
X = default (0.0)
Y = default (0.0)
Z = default (-1.0) |
| xWeatherEffect.Speed |
Max = default (200.0)
Min = default (100.0) |
| xWeatherEffect.WeatherType |
WT_Snow |
Example preset for Dust
Create a FinalBlend for the dust particles with the following properties:
- Package = myLevel
- Group = Particles
- Name = RockFB
- FrameBufferBlending = FB_Translucent
- ZWrite = False
- ZTest = True
- AlphaTest = False
- TwoSided = False
- AlphaRef = 0
- Material = Texture'EmitterTextures.MultiFrame.rockchunks02'
- FallbackMaterial = Texture'EmitterTextures.MultiFrame.rockchunks02'
- SurfaceType = EST_Dirt
| Display.Skins.[0] |
FinalBlend'myLevel.Particles.RockFB' |
| xWeatherEffect.deviation |
default (0.4) |
| xWeatherEffect.EyeSizeClamp |
default (Max = 0.0)
default (Min = 0.0) |
| xWeatherEffect.Life |
default (Max = 4.0)
default (Min = 3.0) |
| xWeatherEffect.maxPclEyeDist |
default (590.0) |
| xWeatherEffect.numCols |
default (4.0) |
| xWeatherEffect.numParticles |
512 |
| xWeatherEffect.numRows |
default (4.0) |
| xWeatherEffect.Position |
X Max = 2048.0
X Min = -2048.0
Y Max = 2048.0
Y Min = -2048.0
Z Max = default (300.0)
Z Min = default (-100.0) |
| xWeatherEffect.Size |
Max = 6.0
Min = 3.0 |
| xWeatherEffect.spawnVel |
X = default (0.0)
Y = default (0.0)
Z = default (-1.0) |
| xWeatherEffect.Speed |
Max = 100.0
Min = 50.0 |
| xWeatherEffect.WeatherType |
WT_Dust |
|
|