Raymarching по растеризованной форме

Мне было интересно, как я могу объединить два метода рендеринга таким образом, чтобы растеризованная фигура на экране служила холстом для рендеринга на основе лучевого марша во фрагментном шейдере.

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

Это что-то выполнимое?

PS Я хорошо знаю растеризацию и преобразование матрицы / пространства, но у меня очень смутное представление о том, как работает ray-marching. Простите мое незнание.

1 ответ

Это определенно возможно.

Идея состоит в том, чтобы использовать одну и ту же камеру для трассировки лучей и для растеризации. Вы можете получить положение камеры из матрицы камеры в шейдере фрагментов, и вы можете получить направление камеры, вычтя положение фрагментов из положения камеры и нормализуя его.

Таким образом, лучи от камеры попадают только на видимые фрагменты.

Другие вопросы по тегам