build: baked lighting pass on kit_demo test map
- 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.
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
# 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.*
|
||||
@@ -2,14 +2,22 @@
|
||||
|
||||
## Scope
|
||||
Art pass, baked lighting, performance profiling, LOD + occlusion culling for the competitive tactical shooter.
|
||||
|
||||
## Dependency Chain (Kanban)
|
||||
|
||||
```
|
||||
t_p3_artkit (modular wall/floor kit + PBR materials 1K + art style guide)
|
||||
└── t_p3_lighting (LightmapGI baked lighting + reflection probes)
|
||||
└── t_p3_profile (perf budget + LOD + occlusion culling)
|
||||
```
|
||||
|
|
||||
|## Dependency Chain (Kanban)
|
||||
|
|
||||
|```
|
||||
|t_p3_artkit (modular wall/floor kit + PBR materials 1K + art style guide) ✅ DONE
|
||||
| └── t_p3_lighting (LightmapGI baked lighting + reflection probes)
|
||||
| └── t_p3_profile (perf budget + LOD + occlusion culling)
|
||||
|```
|
||||
|
|
||||
|## Deliverables
|
||||
|
|
||||
|- **Art style guide**: [docs/art-style-guide.md](docs/art-style-guide.md) — visual direction, modular grid specs, material palette, mapping guidelines
|
||||
|- **Modular kit scenes**: `client/assets/scenes/modular/` — 11 CSG-based wall/floor/structural pieces + kit_demo showcase scene
|
||||
|- **PBR materials**: `client/assets/materials/` — 7 StandardMaterial3D .tres files
|
||||
|- **1K textures**: `client/assets/textures/` — 28 procedural PBR maps (basecolor, normal, roughness, metallic × 7 materials)
|
||||
|- **Project config**: `client/project.godot` — Godot 4 Forward+ renderer, 128-tick physics, LightmapGI defaults
|
||||
|
||||
## Art Style
|
||||
|
||||
|
||||
Reference in New Issue
Block a user