cull on a model's material decides which side of its triangles is thrown away. 'back', the default, is a closed shape seen from outside: the first sheet keeps only its top and vanishes each time it turns over. 'none' draws both sides, each lit as the side it is and each casting its shadow: the second sheet, the flag and the top of the liquid. 'front' is a shape seen from inside, lit from inside: the sky round it all.
A shader tells the two sides apart with ctx.frontFacing (composerFrontFacing() in the composer): the flag is red on one side and white on the other, and the liquid is pale from above and deep from below, with no second sheet turned round. The flag waves by a vertex hook, and its shadow waves with it.
A glTF material marked doubleSided is drawn with 'none' without being told.