vec4 shadowCoord = shadowMatrix * vec4(eyePosition + eyeNormal * height * 0.3, 1.0);
Таким образом, мы создаем фейковую точку, расположенную выше реальной поверхности, и тень для нее будет рассчитываться как если бы поверхность была действительно рельефной. Эффект особенно заметен на краях тени, углах и скруглениях – там, где при обычном расчете теневых координат была бы сплошная тень, появляются освещенные участки:
Главный недостаток метода – расчет теневых координат происходит пофрагментно, а не повершинно, но на современном железе это не слишком большая жертва.
Не знаю, использовалась ли такая техника раньше, и как она называется – может быть, что-то вроде height-corrected shadow mapping?