deferred rendering, batching, light culling, shadow maps, forward rendering... i'm just a little banana trying to learn form a tutorial.
Light culling : determination of which lights affect which objects, or determining if the light is visible on screen
Batching : drawing multiple objects with a single draw call. D3D API has a big overhead for draw calls - for that reason drawing multiple objects with one draw call is a good option.
Shadow maps : typically a depth texture rendered from the point of the view of a light source (directional or spot) - when combined with lighting calculations, it is pretty efficient to find out which pixels shadowed. Can be used with forward or deferred renderer.
forward rendering : the lighting is accumulated when rendering primitives (as shown in the previous posts). Disadvantages : batching is difficult (but not impossible) since you'll need to know which lights affect which object at the moment when you draw the object.
deferred rendering : instead of calculating the lighting contribution for each pixel, you'll store the information required for the lighting calculations in textures. The information consists typically of pixel position, surface normal, albedo, specular factor, roughness.
After writing all the geometry data, you perform a lighting pass and read the data from the textures to calculate the lighting for each pixel. Since the lighting is processed in the screen space it is easy to find out which lights affect which pixels. This means that the lighting calculations are deferred -> performed later. Advantages : batching is easy since drawing objects and lighting are separated - no need to know about lights when drawing the objects. Disadvantages : memory/bandwidth consumption for the textures storing and reading the geometry data.
Forward and deferred rendering have their advantages and disadvantages (I didn't write all of them here) so it isn't this easy to make a choice between them.
Cheers!