1. A method for generating an image, comprising the computer implemented steps of: analyzing a two dimensional (2D) image for determining several properties thereof; detecting edges in the 2D image based on the properties of the 2D image; finding objects in the 2D image based at least in part on the properties of the 2D image; adding a three dimensional (3D) object to the 2D image; performing a depth analysis for estimating which objects in the 2D image are positioned in front of the 3D object, or which objects in the 2D image are positioned behind the 3D object, wherein the depth analysis includes analyzing vertical positions of at least portions of the 2D and 3D objects relative to each other and estimating which objects in the 2D image are positioned in front of or behind the 3D object based on the vertical positions of the at least portions of the 2D and 3D objects; and rendering at least one of the following effects: a reflection of one of the objects in the 2D image on an outer surface of the 3D object, a representation of one of the objects in the 2D image viewable through a transparent or semi-transparent portion of the 3D object, and an effect of refraction on one of the objects in the 2D image viewable through a transparent or semi-transparent portion of the 3D object; and rendering a shadow cast by one of the objects in the 2D image on an outer surface of the 3D object.