   Shadow mapping in modern game engines
  I am  going to be looking at shadow mapping very soon, I have some questions running through my head as to howI could implement them. So I have a couple of questions.1: If I am frustum culling objects that the player cannot see. If a vase is behind me but it is still supposed to cast a shadow in front of me.How is that implemented? Or does the shadowmap pass just draw the entire scene without culling it?2: Tessellation + shadow mapping. How can I make my shadows take into consideration the tessellation factors of a brick wall.I dont want my shadow map to have a straight edge as if the wall is not bumped. Would I have to tessellate my scene for the shadow map pass as well?Thanks   
  1) When rendering your shadow pass, you should frustum cull using the light's frustum, not the player-camera's frustum.2) If you want the shadows to use a certain level of detail, you have to use that level of detail in the shadow pass, yes. The easiest solution is to use the same LODs for both passes.   ;  For 1, in addition to what Hodgman said, you can extrude the shadow caster's bounding volume in the light direction, and check whether this extruded volume intersects your actual camera frustum. This is easiest for directional lights, as you can do the whole calculation in the light's view space; just transform your camera frustum to that space. For perspective lights you also have to take perspective into account (ie. shadows grow larger the further they're away from the shadow caster and the light.) Note that it's by no means necessary to be exact, but rather err on the side of false positives (ie. drawing unnecessary shadow casters) than false negatives (missing shadow casters)   ;  Thanks for great replies everyone.Its a sad thing that there is no way to avoid hardware tessellatingthe same mesh two times.   ;Thanks for great replies everyone.Its a sad thing that there is no way to avoid hardware tessellatingthe same mesh two times.You could stream out the post-tessellation data in a geometry shader, but doing this could potentially consume quite a bit of memory and bandwidth.   