Readable silhouettes. Large shapes. Minimal polygons. Atmosphere over detail.
When to Use
- Retro aesthetic games (PS1/PS2 era)
- Lethal Company / Mouthwashing style projects
- Mobile/low-spec targets
- Horror with efficient geometry (the full PS1 horror look: psx-horror-style)
- Stylized simplicity
Core Rules
- Readable silhouettes — Shape reads at distance without detail
- Minimal polygons — Every face must earn its place
- Large shapes — Primary forms dominate; micro-detail forbidden
- Simple materials — Flat or lightly textured; 512px default
- Limited texture sizes — 256–512px most assets; 1024 hero only
- Strong atmosphere — Lighting and fog carry visual weight
Polygon Guidelines
| Asset | Triangle Target |
|---|---|
| Character | 500–3,000 |
| Prop | 50–500 |
| Environment module | 100–800 |
| Tree | 200–800 |
| Vehicle | 2,000–8,000 |
See blender-mcp-workflow skill → references/polycount-budgets.md — apply 50–90% reduction.
Modeling Approach
- No subdivision surface
- No micro-bevels (0 bevel or single segment max)
- Flat shading OR Smooth by Angle at 60°+
- Merge coplanar faces where possible
- Texture carries detail, not geometry
PS1 Authenticity (Optional)
| Effect | Technique |
|---|---|
| Affine texture warp | Engine-side; note in export docs |
| Vertex jitter | Slight snap to low grid |
| Low resolution | 320×240 render target reference |
| No filtering | Nearest neighbor textures |
| Z-fighting aesthetic | Intentional minimal offset (use carefully) |
PS2 Era
- Slightly higher poly budgets
- Basic normal maps allowed
- Single directional light + ambient
- 512–1024 textures
Material Approach
- Vertex colors for variation (preferred)
- Single texture atlas per scene/kit
- Minimal roughness variation
- Emissive for screens/lights
- No PBR micro-detail
Silhouette Test
Before approving any asset:
- Solid flat color material
- View at gameplay distance
- Silhouette must communicate identity
- If unreadable → simplify geometry, not add detail
Lethal Company Influence
- Industrial sci-fi interiors
- High contrast lighting
- Chunky readable props
- Fog-heavy environments
- Multiplayer-readable shapes (clear at distance)
Mouthwashing Influence
- Soft pastel palette option
- Surreal but simple geometry
- Strong color blocking
- Uncanny but low-detail characters
MCP Integration
- Create low-poly blockouts via MCP
- Enforce face count limits via MCP queries
- Assign flat materials via MCP
- Validate triangle budgets continuously
- Skip subdiv/bevel modifiers entirely
Constraints
MUST DO
- Enforce strict poly budgets
- Prioritize silhouette over surface detail
- Use vertex colors and atlases
- Test at gameplay camera distance
- Coordinate atmosphere with lighting skill
MUST NOT DO
- Write code or snippets for Blender versions before 5.2, or add version fallbacks: this plugin targets 5.2+, and legacy branches teach users APIs that no longer exist
- Subdivision surfaces
- High-resolution textures on background assets
- Micro-bevels or weighted normal stacks
- Sculpting detail (bake workflow unnecessary)
- Exceed triangle budgets "just a little"
Scripts
Tested on Blender 5.2 LTS via the official Blender MCP. Run with execute_blender_code (or headless,
see the blender-mcp-workflow skill); read the script header for every argument.
When the user will paste code into Blender themselves, give them the short runpy call with the absolute
path of this installed script and their ARGS. Don't inline or rewrite the script: the tested file is the point.
| Script | What it does |
|---|---|
scripts/ps1_look.py |
Apply a PS1/PSX-era look: low internal resolution, nearest-neighbour texture filtering, vertex snapping (geometry nodes, per object), flat or Gouraud shading, compositor distance fog from the mist pass, 32px posterized textures for untextured meshes, and Standard view transform. |
import runpy
result = runpy.run_path("<skill_dir>/scripts/ps1_look.py", init_globals={"ARGS": {...}})["result"]
ARGS: objects, snap, resolution, flat, fog (bool or RGB fog colour), texture. For a whole scene pass
every mesh: {"objects": [all mesh names], "flat": true}; untextured meshes get a PS1 texture.
Reference Guide
| Topic | Reference | Load When |
|---|---|---|
| PS1 techniques | references/ps1-aesthetic.md |
Retro authentic look |
| Asset budgets | blender-mcp-workflow skill → references/polycount-budgets.md |
Budget setting |