Можно задавать два критерия глубины поиска: максимальное кол-во делений на луче и дельту расстояния до поверхности от текущей позиции поиска. В 3D-случае можно дополнительно запоминать предыдущие текстурные координаты сэмпла и сравнивать их с новыми, если они лежат в пределах одного пикселя - дальше делить нет смысла. Для более точных и быстрых результатов желательно, чтобы исходный диапазон поиска был как можно меньшим. Для простоты я брал луч длиной чуть больше диаметра линзы. Скриншоты:
Глубина поиска - 5 шагов:

Видно, что найденные точки "пляшут" вокруг поверхности. При движении линзы неточности поиска видны ещё более явно.
7 шагов:

12 шагов:

Как бы то ни было, основная задача - попиксельная точность пересечения луча с backfaced геометрией. Вообще, как я считаю, в задаче real-time refraction главным является предельная точность и аккуратная обработка результатов, внимание к мелочам, что поможет создать правдоподобную иллюзию объёма и искажения, а не очередную поделку "на шейдерах".
Комментариев нет:
Отправить комментарий