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.
7.3 KiB
7.3 KiB
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/02andfloor_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
KitDemoscene 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_02for interior partitions,wall_concrete_01for exterior-facing walls. - Cover all floor areas with
floor_tile_01(interiors) orfloor_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 ownproject.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
- Add a generator function in
generate_textures.py - Run it to produce 1K PBR maps
- Add a
.tresentry ingenerate_materials.py - Run it to produce the material resource
- Optionally create a scene using the new material
This guide is a living document — update as the visual direction evolves.