像素着色器

时间:2018-06-03 03:01:14

标签: glsl shader pixel

我有这个shartoy在:                           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;
}    

1 个答案:

答案 0 :(得分:0)

正确的射线行进功能就是这个:

float ray( vec3 ro, vec3 rd, out float den )
{

    float t = 0.0, maxD = 0.0; den = 0.0;

    for( int i = 0; i < STEPS; ++i )
    {

        vec3 p = ro + rd * t;

        den = map( p );
        maxD = maxD < den ? den : maxD;

        if( maxD > 0.99 || t > FAR ) break;

        t += 0.05;

    }

    den = maxD;

    return t;

}