more accurate normal mapping