Я пытаюсь реализовать простой рендеринг объема изображения в WebGL.объем рендеринга raycasting артефакты
Это своего рода работа, но есть некоторые артефакты, когда вы вращаете объем вокруг (то есть голова выглядит деформированной).
Живая демонстрация: 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;
}
Я не понимаю, что могло бы объяснить эти артефакты.
Может быть, потому что я не использую градиенты для модуляции непрозрачности/цвета?
Любой намек был бы очень желанным.