Since the background is a fixed thing and not being actively updated, you can put the initialization in DynamicModule[]
; thus, you can do something like
DynamicModule[{p, q, b, n, θ, pl, col = RGBColor["#cdffeb"],
bg = RadialGradientImage[RGBColor /@ {"#009f9d", "#07456f", "#0f0a3c"},
{540, 540}]},
Manipulate[(* stuff *)
Overlay[{bg, Graphics[{EdgeForm[Directive[Thickness[.025],
JoinForm["Round"], col]],
FaceForm[], Polygon[pl]},
ImageSize -> 540, PlotRange -> 4]}], {t, 0, 4}]]
Yet another alternative that avoids Overlay[]
would be to use a textured polygon as background. To do that, you can replace the last line inside the Manipulate[]
with
Graphics[(* stuff *), ImageSize -> 540, PlotRange -> 4,
Prolog -> {Texture[bg],
Polygon[{Scaled[{0, 0}], Scaled[{1, 0}],
Scaled[{1, 1}], Scaled[{0, 1}]},
VertexTextureCoordinates ->
{{0, 0}, {1, 0}, {1, 1}, {0, 1}}]}]