Искажения изображения в ray marching-е
Я пытался написать программу, занимающуюся ray marching-ом, но в определенный момент заметил, что в некоторых местах стали появляться непонятные искажения изображения. Код и результат его выполнения вы можете посмотреть здесь: https://www.shadertoy.com/view/wdBBzt (модель можно врящать мышью). Должен рисоваться куб, из которого вырезаны 7 меньших кубов (1 в центре и по 1-му на каждой грани), но в местах выреза изображение выглядит странно. Из-за чего могли образоваться искажения?
Ответы (1 шт):
Внутри функции map() Вы умножили положение, для которого ищете значение функции sdf, таким образом Вы исказили пространство в этом месте, т.е. нашли значение для другой точки
float d3 = sdcross(p * 3.0);
d = max(d, -d3);
Я бы рекомендовал не искажать пространство, а изменить функцию, которой вы вычитаете объем:
float sdbox2d(in vec2 p) {
vec2 d = abs(p) - .33; // вот тут я поменял 1 на 0.33
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
