web-compatibility-look is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Make a browser game look high-end in the Compatibility renderer (WebGL 2): what works, recipes, speed.
When your agent uses it
- The game plays in the browser or is exported for the web and must look finished
- The look is flat, grey or default in the web preview, or a Forward+ feature does nothing there
- Choosing lighting, fog, glow, shaders or post effects for a web or Compatibility project
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
Browser play and web exports run only the Compatibility renderer (OpenGL 3 / WebGL 2). Forward+ and Mobile are not available on the web, so a project that plays in the browser must keep:forward_plus or mobile for a web game. Features that only exist in Forward+ are ignored or break in Compatibility, so a scene can look fine in a desktop preview and flat or broken in the browser. Design for Compatibility from the start; it can still look premium.
What to rely on, and what to avoid
Glow and some environment adjustments depend on the engine version. If you use them, take a screenshot in the web preview and check that they really show. Never assume a setting worked because the property exists.
2D: a finished look
- Palette first. Pick 5 to 7 colours (a dark, a mid, a light, one accent, one danger) and use only those. The player is the brightest, most saturated thing on screen.
- Background with depth. A GradientTexture2D sky behind two or three Parallax2D layers of simple shapes, each layer lighter and less saturated the further away it is. Nothing is ever a flat default grey.
- Shapes that read. Polygon2D or
_draw()per object, with a darker outline (2 to 4 px) and two-tone shading (a lighter top half). Characters get eyes or a face. - Light and mood. CanvasModulate tints the world (dusk, night, cave), and PointLight2D with a soft gradient texture makes lamps, pickups and the player glow.
- Post effect, optional. One full-screen ColorRect on a top CanvasLayer with a canvas_item shader that reads the screen texture: a soft vignette and a slight colour grade. Keep it under a few texture reads.
- Hit flash and juice. A tiny canvas_item shader (
uniform float flash; COLOR.rgb = mix(COLOR.rgb, vec3(1.0), flash);) tweened on hits, plus particles and a small camera shake.
3D: a finished look
- Flat-shaded or stylised materials. StandardMaterial3D with palette albedo, roughness 1, no metallic. For a toon look use
diffuse_mode = DIFFUSE_TOONandspecular_mode = SPECULAR_TOON, or a small spatial shader with banded lighting. - One sun, real shadows. One DirectionalLight3D (shadows on, a warm colour) plus an ambient light from the WorldEnvironment in the cool palette colour, so shadows are tinted, not black.
- Depth fog in a palette colour. Fog that matches the sky colour hides the far edge and gives scale.
- Bake what you can. Static props can carry vertex-colour ambient occlusion or a hand-painted gradient, which costs nothing at runtime.
- Emission for accents. Pickups, eyes, lamps and the goal get emissive materials in the accent colour.
- Readable silhouettes. Keep the camera far enough back, use a slightly saturated rim colour on the player (a fresnel term in a spatial shader), and avoid noisy textures.
Performance on the web
- Aim for 60 fps on a mid laptop browser: fewer than about 200 visible meshes, shadows on one light only, CPU particles under about 300 alive.
- Reuse nodes (pools) instead of instancing every frame, and never allocate in
_process. - Keep textures small (1024 px or less) and power-of-two where you can.
Verify
Run the game, take one screenshot in the web preview, and compare it to the palette and the look. A grey, blank or default-looking capture means the look is not there yet, or a Forward+-only feature was used: fix it before moving on.From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
3d-lighting: Light a 3D scene: sun, omni and spot lights, WorldEnvironment, sky, shadows and ambient.art-direction: Define the game’s visual style (palette, mood, lighting, post) as an art bible in .summer/art-bible.md.tune-performance: Profile a slow game, find rendering, physics or script hotspots, and propose fixes with expected gains.ui-basics: Build UI: HUDs, menus, health bars, dialogue boxes, Control trees, anchors, containers and themes.compatibility-renderer-traps: Make a Forward+ game look right on the Compatibility renderer: instance uniforms, MultiMesh, vertex colors.
Source:
library/skills/web-compatibility-look/SKILL.md, rendered from summer-engine@4.3.0 on npm.
