1. Architectural Role & Engine Purpose
The BIT (Billboard Impostor Table) format manages distance-based billboard transitions and 2D sprite impostors for dense forests, utility poles, distant guard towers, and distant foliage in Project I.G.I. 1.
To maintain 60 FPS across kilometers of outdoor landscape, the engine transitions high-polygon 3D meshes
into single-quad billboard impostors at distances greater than 150 meters. Impostor records are stored as
compact 12-byte structs (bit_item_s).
2. Binary File Layout & Memory Map Diagram
A BIT registry file contains a descriptor header followed by an array of 12-byte billboard definitions:
3. LOD Transition & Spherical Billboard Pipeline Diagram
During the rendering pass, the LOD coordinator determines whether to submit full 3D geometry or a 2D impostor:
4. Architectural Mechanics & Engine Implementation Details
The BIT impostor system enabled IGI 1's signature outdoor vistas:
- Cylindrical vs Spherical: Trees rotate strictly around the vertical Y-axis (cylindrical billboarding) to stay anchored firmly in the ground, while clouds and debris particles rotate around all three axes (spherical billboarding).
- Massive Triangle Reductions: A 3D pine tree model consisting of 800 triangles is reduced to a single 2-triangle quad when viewed from distance, decreasing GPU triangle load by 99.7%.
5. C++ Struct Definitions
#pragma pack(push, 1)
struct BitHeader {
char magic[4]; // "BIT "
uint32_t version; // Format version
uint32_t count; // Total registered impostors
float switch_dist; // Distance threshold for transition (meters)
};
// IGI 1 12-Byte Billboard Descriptor
struct bit_item_s {
uint32_t sprite_id; // Index of 2D sprite in resource system
float world_width; // Physical width in world meters
float world_height; // Physical height in world meters
};
static_assert(sizeof(bit_item_s) == 12, "bit_item_s must be 12 bytes");
#pragma pack(pop)