Raymarching по растеризованной форме
Мне было интересно, как я могу объединить два метода рендеринга таким образом, чтобы растеризованная фигура на экране служила холстом для рендеринга на основе лучевого марша во фрагментном шейдере.
Возьмите эти прекрасные примеры: https://www.shadertoy.com/view/XsjXRm или https://www.shadertoy.com/view/MtXSzS. Их видимую часть можно грубо представить в виде сферы. Теперь я бы хотел поместить, скажем, две сферы в какое-нибудь место в мире и запустить обычный проход растеризации. Растеризация покажет, какие пиксели заняты моделями, и для этих пикселей я бы хотел запустить алгоритмы построения луча шейдерной игрушки, чтобы получить желаемый вид (мои две сферы выглядят как "сферы" игрушки шейдера в приведенных выше примерах).
Это что-то выполнимое?
PS Я хорошо знаю растеризацию и преобразование матрицы / пространства, но у меня очень смутное представление о том, как работает ray-marching. Простите мое незнание.
1 ответ
Это определенно возможно.
Идея состоит в том, чтобы использовать одну и ту же камеру для трассировки лучей и для растеризации. Вы можете получить положение камеры из матрицы камеры в шейдере фрагментов, и вы можете получить направление камеры, вычтя положение фрагментов из положения камеры и нормализуя его.
Таким образом, лучи от камеры попадают только на видимые фрагменты.