add comments, implement back culling