โ† All examples

godot shaders

Retro console look: vertex snapping and affine textures

Recreate late-1990s console rendering: vertices snap to a coarse screen grid so geometry jitters, texture coordinates interpolate without perspective correction so textures warp, and colours drop to 15-bit with ordered dithering.

Recorded render of Retro console look: vertex snapping and affine textures

What this component contains

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • component.json
  • demo.tscn
  • inspect_shader.py
  • material.tres
  • preview.png
  • ps1_vertex_snap.gdshader
  • test_package.py
  • verification/native.json

How it works

Shader type
spatial
Parameters
albedo_texture (sampler2D), color_a (vec4 = 0.85, 0.75, 0.55, 1), color_b (vec4 = 0.45, 0.25, 0.2, 1), checker_cells (float = 6), snap_width (float = 160), snap_height (float = 120), affine_amount (float = 1), color_levels (float = 32) and 1 more
Use it on
Optional: a low-resolution texture for `albedo_texture`.
Result
A checkered floor and crate whose texture bends across large triangles and whose edges sit on a coarse grid, with dithered colour.
Renderers
compatibility: compiled and rendered, forward plus: not verified, mobile: not verified
Placement
res://baltor/godot_shaders/ps1_vertex_snap/

Recorded checks

godot 4.7.2.stable.official.ed1daf0bf

  • contract_static
  • engine_run
  • engine_log_clean
  • shader_in_scene
  • capture_written
  • render_not_uniform
  • shader_changes_pixels

Limits to consider

Affine warping depends on triangle size: finely subdivided meshes show little of it. Snapping happens in screen space, so the jitter is visible only with motion. Lighting is still Godot's per-pixel lighting, not per-vertex Gouraud.