У меня есть этот шейдертой по адресу: https://www.shadertoy.com/view/4sVfz1 Кажется, я получаю большинство процедур объемного марширования лучей, но мне не хватает чего-то в моей функции марширования лучей, которая вычисляет прозрачность в соответствии с накопленной плотностью в точке.Вот моя лучевая функция:
float ray( vec3 ro, vec3 rd, out float d, out float den )
{
float t = 0.0; d = EPS; den = 0.0;
for( int i = 0; i < STEPS; ++i )
{
vec3 p = ro + rd * t;
d = 0.3 * map( p, den ).x;
if( d < EPS || den > 1.0 || t > FAR ) break;
t += d;
den = fbm( p + TWA );
den += clamp( den, -1.0, 0.0 ) * t * t;
}
return t;
}