# Tactical Shooter — Art Style Guide > **Phase 3 deliverable · Modular wall/floor kit, PBR materials at 1K** > Valorant-direction competitive FPS art direction · Godot 4 Forward+ renderer --- ## 1. Visual Direction ### Target: Valorant-Tier, Not AAA - **Clean silhouettes** — geometry reads instantly at combat ranges. Avoid noisy trim/paneling. - **Team-color zones** — CT (blue) and T (red/orange) territories are visually distinct at a glance. Color is used for gameplay read, not decorative variety. - **Low-fi surface detail** — we suggest roughness and normal variation rather than carving it into geometry. 1K textures carry the detail budget. - **No photorealism** — stylised realism with clear material categories: concrete, metal, tile, painted surfaces. Each category is immediately identifiable by its roughness/specular signature. ### What This Game Looks Like | Aspect | Choice | Rationale | |--------|--------|-----------| | Lighting | Baked lightmaps + reflection probes | No real-time GI cost | | Shadows | Baked for static, single cascade for dynamic | 60fps target on GTX 1050 | | Reflections | Reflection probes at junctions | No SSR/SSAO cost | | Post-processing | Tonemap only (ACES), no bloom, no DoF | Competitive clarity | | Fog | Minimal distance fog | Don't hide silhouette readability | | Textures | 1K PBR (1024 max), no 2K+ | VRAM budget: 2GB texture pool | --- ## 2. Modular Grid & Dimensions The kit is built on a **2.56m (256cm) base grid** — close to 8ft imperial, powers-of-two friendly for texture tiling. ### Standard Dimensions (meters) | Piece | Width | Height | Depth | Notes | |-------|-------|--------|-------|-------| | Wall straight | 2.56 | 2.56 | 0.16 | Full wall panel | | Wall corner (L) | 2.56 × 2 leg | 2.56 | 0.16 | 90° outside corner | | Wall doorway | 2.56 | 2.56 | 0.16 | 0.80m × 2.00m door cutout | | Wall window | 2.56 | 2.56 | 0.16 | 1.20m × 0.80m window cutout | | Wall endcap | 0.32 | 2.56 | 0.16 | Edge trim / termination | | Floor slab | 2.56 | 0.08 | 2.56 | Thin slab | | Pillar (square) | 0.64 | 2.56 | 0.64 | Structural column | | Ceiling beam | 3.84 | 0.32 | 0.32 | Metal beam, 1.5U length | | Accent panel | 1.28 | 0.64 | 0.08 | Team-color wall accent | ### Grid Alignment - All pieces snap to a 1.28m (half-unit) grid in the map editor. - Wall thickness is always 0.16m. Floors are 0.08m. - Doorway bottom is flush with floor level. Window center is 1.58m from floor (eye level). - Pillars occupy 0.64m × 0.64m on the floor grid (¼ of a full tile). --- ## 3. Material Library ### Material Standards Every material is a **StandardMaterial3D** with PBR textures at **1024×1024 (1K)**: | Texture Map | Format | Notes | |-------------|--------|-------| | Base Color | sRGB PNG | Diffuse/albedo with subtle colour variation | | Normal | Linear PNG | From height map via Sobel, strength scaled per material | | Roughness | Linear PNG (grayscale) | White = rough (255), Black = smooth (0) | | Metallic | Linear PNG (grayscale) | White = metal (255), Black = dielectric (0) | Texture filter: **Linear** (no mipmaps for modular kit; mipmap cost is unnecessary at 1K on a 2.56m tile with the camera ≤40m from most surfaces). ### Material Palette (7 materials) | # | Name | Roughness | Metallic | Normal Scale | UV Tiling | Use Case | |---|------|-----------|----------|--------------|-----------|----------| | 1 | `wall_concrete_01` | 0.85 | 0.0 | 0.5 | 1.0 | Primary wall — light grey concrete | | 2 | `wall_concrete_02` | 0.75 | 0.0 | 0.4 | 1.0 | Accent wall — darker grey | | 3 | `floor_tile_01` | 0.60 | 0.0 | 1.0 | 2.0 | Interior — ceramic checkered tile | | 4 | `floor_concrete_01` | 0.90 | 0.0 | 0.8 | 2.0 | Industrial — dark warehouse floor | | 5 | `metal_structural_01` | 0.30 | 1.0 | 0.3 | 1.0 | Beams, vents, supports | | 6 | `accent_team_blue` | 0.35 | 0.5 | 0.3 | 1.0 | CT territory — blue painted panels | | 7 | `accent_team_red` | 0.35 | 0.5 | 0.3 | 1.0 | T territory — red/orange painted panels | ### Team Color Usage - **CT (Blue)**: RGB ~(40, 80, 200) — deep blue, low saturation. Applied to accent panels, not primary walls. - **T (Red/Orange)**: RGB ~(200, 60, 30) — burnt red-orange. Applied to accent panels, not primary walls. - Neutral zones (uncontested) use `wall_concrete_01/02` and `floor_concrete_01`. - Spike plant zones / bomb sites get team-colour floor accents. --- ## 4. Technical Specifications ### Texture Budget | Category | Count | Resolution | VRAM (approx) | |----------|-------|------------|---------------| | Wall materials (2) | 8 maps | 1K | ~21 MB | | Floor materials (2) | 8 maps | 1K | ~21 MB | | Metal (1) | 4 maps | 1K | ~10 MB | | Team accents (2) | 8 maps | 1K | ~21 MB | | **Total (7 materials)** | **28 maps** | **1K** | **~75 MB** | VRAM headroom for lighting data, shadow maps, and models: ~1.9 GB of the 2 GB budget. ### Performance Targets (per the visuals architecture) | Metric | Target | |--------|--------| | Frame time | 16ms (60fps) | | GPU budget | 8ms | | CPU budget | 6ms (6ms headroom for gameplay) | | Draw calls | 1500–2000/frame | | LOD0 tris/wall | 500–2000 | ### LOD Strategy (for future mesh pass) When modular CSG pieces are replaced with custom meshes: | LOD | Distance | Triangle Budget | Notes | |-----|----------|-----------------|-------| | LOD0 | 0–15m | 100% | Full detail | | LOD1 | 15–40m | 50% | Remove panel gaps, merge edges | | LOD2 | 40–80m | 25% | Planar collapse, decimate | | LOD3 | 80m+ | Cull | Not visible at competitive sightlines | --- ## 5. Lighting Guidelines (for t_p3_lighting) - **LightmapGI** on all static geometry. Texel density: 4–8 per unit on walls, 8–16 on focal surfaces. - **Reflection probes** at corridor junctions, open plaza areas, chokepoints. Probe box size: 4U (10.24m) for corridors, 8U+ for open areas. - **No SDFGI**, no real-time GI. 1-2 dynamic directional lights maximum (sun + maybe a single fill). - Lightmap UV2: all modular CSG pieces export lightmap UVs automatically. --- ## 6. Mapping Guidelines (for map makers) - **Start every map** by placing a `KitDemo` scene to see the palette. - Snap walls to the 1.28m half-grid. Full grid is 2.56m. - Doorway walls are exactly 2.56m wide × 2.56m tall — stack a wall piece on top if headroom is needed. - Use `wall_concrete_02` for interior partitions, `wall_concrete_01` for exterior-facing walls. - Cover all floor areas with `floor_tile_01` (interiors) or `floor_concrete_01` (exteriors/warehouses). - Team accent panels are decorative only — they do not affect gameplay collision or hitbox. --- ## 7. Export & Build Pipeline - Client project lives in `client/` with its own `project.godot`. - Modular kit scenes are under `client/assets/scenes/modular/`. - Materials under `client/assets/materials/`. - Textures under `client/assets/textures//`. - Textures are generated by `client/assets/textures/generate_textures.py`. - Materials are generated by `client/assets/materials/generate_materials.py`. - Scenes are generated by `client/assets/scenes/modular/generate_scenes.py`. ### Adding a New Material 1. Add a generator function in `generate_textures.py` 2. Run it to produce 1K PBR maps 3. Add a `.tres` entry in `generate_materials.py` 4. Run it to produce the material resource 5. Optionally create a scene using the new material --- *This guide is a living document — update as the visual direction evolves.*