This page is incomplete! You can contribute information using GitHub issues or pull requests.
Water shaders are characterized by their use of layered animated ripple maps, tint colours, and reflectance.
They need not exclusively be used for water -- the coolant pools of Keyes (d20) also use water shaders, and the Halo CE Refined project uses them for some glass to better emulate Xbox glass shaders. They are also not exclusively used within the BSP, with skies like Damnation's also using this shader type.
Flowing water with rapids, like waterfalls and rivers, can instead use shader_
Base maps
Water shaders do not tile their base maps. Instead, the edges of the texture continue infinitely ("clamp" texture address mode). This can be useful for concentrating texel density near the level without dedicating texture space to surroundings which stretch to the horizon.
Known issues
Ripple maps are not rendered correctly in H1PC and H1CE compared to classic Xbox. The highest level of detail mipmap is used for the most distant areas, but water closer to the camera uses the lowest detail mipmap. This is the opposite of how it should be, and results in distant water suffering from major aliasing. The water shader was fixed in H1A.
Related HaloScript
Function/global | Type | |
---|---|---|
Toggles the rendering of shader_ | Global |
Structure and fields
Field | Type | Comments | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
water flags | bitfield | ||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
base map | TagDependency : bitmap | ||||||||||||||||||||||||||||||||||
view perpendicular brightness | float | ||||||||||||||||||||||||||||||||||
view perpendicular tint color | ColorRGB | ||||||||||||||||||||||||||||||||||
view parallel brightness | float | ||||||||||||||||||||||||||||||||||
view parallel tint color | ColorRGB | ||||||||||||||||||||||||||||||||||
reflection map | TagDependency : bitmap | ||||||||||||||||||||||||||||||||||
ripple animation angle | float | ||||||||||||||||||||||||||||||||||
ripple animation velocity | float | ||||||||||||||||||||||||||||||||||
ripple scale | float | ||||||||||||||||||||||||||||||||||
ripple maps | TagDependency : bitmap | ||||||||||||||||||||||||||||||||||
ripple mipmap levels | uint16 | ||||||||||||||||||||||||||||||||||
ripple mipmap fade factor | float | ||||||||||||||||||||||||||||||||||
ripple mipmap detail bias | float | ||||||||||||||||||||||||||||||||||
ripples | Block | ||||||||||||||||||||||||||||||||||
|
Acknowledgements
Thanks to the following individuals for their research or contributions to this topic:
- gbMichelle (Discovering that base maps do not tile)
- Kavawuvi (Invader tag definitions)
- MosesOfEgypt (Tag structure research)