我有一个可以渲染的体积数据集(这是家庭作业的一部分) 我已经使用前后组合实现了光线投射,并且希望集成phong阴影。为了计算梯度,我使用了前向差异法。
我知道我可以使用前向差分法估计体素纹理坐标的梯度。
我的问题是,由于phong阴影返回一种颜色,并且前后光线投射也返回一种颜色,因此何时将阴影应用于ray函数的颜色?在为特定的射线确定新的颜色后还是在从射线命中计算颜色之后? 也许这段代码有助于理解我的问题。我在我应该在什么地方实施phong阴影的地方添加了评论。
void main(){
if (raycast(t0,t1)) {
float t = t0;
for(float t =t0; t<t1;t+=stepsize){
vec3 p = ray_o + ray_d * t;
vec3 coord = worldToVolumeCoord(p, min_box, max_box);
float s = texture(tex_vol, coord).r;
vec4 color = texture(tex_tf, s);
if(color.a > 0){
// Front to back , when to apply shading?????
C = C + (1-A) * color.a * vec3(color);
A = A + (1-A) * color.a;
}
// vec3 Gradient = getGradient(tex_vol, coord, stepsize)
// But how to apply Phong Shading?
}
// Apply phong here?
}
}