Quick answer: Godot 4 shader with cull=front on a double-sided mesh showing z-fighting? Front face cull renders back; both passes overlap - use cull=disabled or split into two meshes.

Stylized stained glass: cull=front for outline. With two-sided mesh, outline z-fights with the front face.

Use cull=disabled

Render both faces; sort manually in shader if needed. Cleaner than cull=front for two-sided.

Or separate meshes

Outline as one mesh, inner as another. Per-mesh cull mode; no z-fight.

Z-offset

Offset the outline mesh slightly. Costs a precision concept; defeats z-fight in most cases.

“Cull mode and double-sided geometry interact. The interaction is rarely what you want.”

Choose one strategy per mesh: cull or two-sided. Mixing produces the bug class.

Related reading