Lens flares are a visual effect used to emulate glowing light sources, glare, and camera lens flares. They can be used in 3 ways:
- By a light tag which may be attached to an object or effect. Lens flares belonging to attached lights on objects can be scaled by a function.
- By a sky light, used for the cinematic looking camera lens flares on the sun.
- By shaders which generate BSP lens flares into a level for static light sources.
Lens flares usually contain one or multiple reflections, which are indices of a bitmap rendered along a flare axis which passes through the flare and the center of the screen.
Ray of Buddha
The "Ray of Buddha" effect is a glowing disk of light that simulates light beams when obstructed by the BSP and objects within it (even by alpha-tested transparent textures like foliage). This effect will appear if either the sun flag is set or occlusion radius is set to 50
.
Halo supports multiple Rays of Buddha drawing simultaneously, seemingly for as many lens flares can render. However, it does not support distance-based fading and will simply pop in or out at the tag's far fade distance if set.
The appearance of Ray of Buddha is partially hard-coded. You can change its radius using occlusion radius. The shape and fade of the flare are controlled by the globals glow bitmap. Its yellowish tint is hard-coded in the sun_glow_draw.psh
FX shader.
Related HaloScript
Function/global | Type | |
---|---|---|
Toggles rendering of all lens flares. | Global | |
Toggles lens flare occlusion. If set to | Global | |
Displays red squares over lens flares in the environment. How much the square is occluded by other geometry or the view frustrum is how much the lens flare fades out. The size of the square relates to the occlusion radius. | Global | |
Toggles the lens flare "god rays" effect, present on sky lights or lens flares explicitly set to sun. | Global |
Structure and fields
Field | Type | Comments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
falloff angle | float | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cutoff angle | float | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cos falloff angle | float | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cos cutoff angle | float | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
occlusion radius | float | Primarily controls the size of the camera-facing occlusion square. The more this square is covered, the more the lens flare fades out. A larger radius covers more screen space and gradually fades in/out while passing behind objects in the foreground, while a small radius will cause the lens flare to quickly appear or disappear. The square can be visualized with This also controls how far the test square is moved depending on the occlusion offset direction. This field also interacts with the Ray of Buddha effect, controlling its radius when the sun flag is set. However if this radius is set to exactly | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
occlusion offset direction | enum | Controls which direction the lens flare is offset. Ignored by the Ray of Buddha effect if this tag's sun flag is set, which always uses a marker forward offset. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
near fade distance | float | The distance where the lens flare begins to fade out. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
far fade distance | float | The distance where the lens flare becomes invisible. Distance-based fading is disabled when set to | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bitmap | TagDependency : bitmap | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flags | bitfield | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rotation function | enum | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rotation function scale | float | Yes, the default is indeed 360 radians. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
horizontal scale | float | Scales the lens flare's first reflection horizontally by this factor. Ignored and assumed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vertical scale | float | Scales the lens flare's first reflection vertically by this factor. Ignored and assumed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reflections | Block | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Acknowledgements
Thanks to the following individuals for their research or contributions to this topic:
- Conscars (Tag field testing)
- Kavawuvi (Invader tag definitions)
- MosesOfEgypt (Tag structure research)