2015-09-11 3 views
0

Я пытаюсь реализовать простой рендеринг объема изображения в WebGL.объем рендеринга raycasting артефакты

Это своего рода работа, но есть некоторые артефакты, когда вы вращаете объем вокруг (то есть голова выглядит деформированной).

enter image description here

Живая демонстрация: http://fnndsc.github.io/vjs/#shaders_raycasting_adibrain

GLSL Код, используемый для отладки: https://github.com/FNNDSC/vjs/blob/master/src/shaders/shaders.raycasting.secondPass.frag

Упрощенная версия кода:

for(int rayStep = 0; rayStep < maxSteps; rayStep++){ 

    // map world coordinates to data coordinates 
    vec4 dataCoordinatesRaw = uWorldToData * currentPosition; 
    ivec3 dataCoordinates = ivec3(int(floor(dataCoordinatesRaw.x)), int(floor(dataCoordinatesRaw.y)), int(floor(dataCoordinatesRaw.z))); 

    float intensity = getIntensity(dataCoordinates); 

    // we have the intensity now 
    vec3 colorSample = vec3(intensity); 
    float alphaSample = intensity; 

    accumulatedColor += (1.0 - accumulatedAlpha) * colorSample * alphaSample; 
    accumulatedAlpha += alphaSample; 

    //Advance the ray. 
    currentPosition += deltaDirection; 
    accumulatedLength += deltaDirectionLength; 

    if(accumulatedLength >= rayLength || accumulatedAlpha >= 1.0) break; 
} 

Я не понимаю, что могло бы объяснить эти артефакты.

Может быть, потому что я не использую градиенты для модуляции непрозрачности/цвета?

Любой намек был бы очень желанным.

ответ

0

Координаты задней поверхности не были правильно рассчитаны во время первого прохода raycasting. Диапазон «нормализованных» кудинатов не был [0, 1]. Это было [-.5, 1.5], поэтому создавалось артефакты визуализации, поскольку все значения вне диапазона [0, 1] были зажаты.

Смежные вопросы