Я пытаюсь использовать шейдер постобработки для создания водоемов. Уровень воды будет равен y = 0, и все, что ниже этой границы, будет затронуто шейдером. Я буду отбрасывать лучи из положения камеры в шейдере и получать расстояние от земли каждого луча. Затем я использую эту информацию, чтобы рассчитать, сколько воды вы видите, чтобы вычислить цвет поверхности. Проблема в том, что я понятия не имею, как обнаружить и вычислить расстояние, пройденное лучом до пересечения с y = 0. Есть ли способ для меня добиться этого эффекта.
Неверный код
float rayGroundIntersect(float3 rayOrigin, float3 rayDir) {
if (rayDir.y <= 0) {
return maxFloat;
}
float a = rayOrigin.y / rayDir.y;
float l = length(rayDir.xz * a);
return l;
}
Аналогичный успешный проект, но на сфере.