d631ff784a
- Restructured kit_demo.tscn from linear demo to enclosed 5.12x5.12 room with walls, floor tiles, pillar, beam, doorway, window - Added WorldEnvironment with ProceduralSky for ambient lighting - Added DirectionalLight3D (sun key light, 45° angle, shadows enabled) - Added OmniLight3D (warm interior fill light) - Added ReflectionProbe for interior specular reflections (box projection, room-sized extents) - Added LightmapGI with balanced quality settings (bounces=3, texel_scale=1.0, max_texture_size=2048, denoiser=true) - Added tool script (kit_demo.gd) that prints bake status in editor - Added bake_lighting.gd CLI bake script (requires GPU-enabled instance) - Updated project.godot with reflection atlas and shadow map quality settings Headless baking note: Godot's standard editor build requires a GPU/display for LightmapGI.bake(). Open the scene in the Godot editor and click 'Bake Lightmap' on the LightmapGI node to generate the baked lightmap data.
171 lines
7.3 KiB
Markdown
171 lines
7.3 KiB
Markdown
# 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/<material_name>/`.
|
||
- 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.*
|