Deferred Rendering

See it on Github!

This example shows how to do deferred rendering with webgpu. Render geometry info to multiple targets in the gBuffers in the first pass. In this sample we have 3 gBuffers for positions, normals, and albedo. And then do the lighting in a second pass with per fragment data read from gBuffers so it's independent of scene complexity. We also update light position in a compute shader, where further operations like tile/cluster culling could happen.