繁体   English   中英

CUDA中渐进式光子映射的透明度

[英]Transparency in Progressive Photon Mapping in cuda

我正在做一个基于optix的项目。 我需要使用渐进式光子贴图,因此我尝试使用样本中的渐进式光子贴图,但是未实现透明材料。 我在Google上搜索了很多,还试图了解其他包含透明度材料的示例(例如Glass,Tutorial,whitted)。 最后,我得到了如下解决方案;

  1. 找到生命值(相交点)(下面的h)
  2. 从该点产生另一条射线
  3. 使用新生成的点的颜色

通过下面的操作,您还可以找到该部分的代码,因为我不明白为什么我会为新生成的射线(上面的第3部分)获得黑色(.0f,.0f,0.f)。

optix::Ray ray( h, t, rtpass_ray_type, scene_epsilon );
HitPRD refr_prd;
refr_prd.ray_depth = hit_prd.ray_depth+1;
refr_prd.importance = importance;

rtTrace( top_object, ray, refr_prd );

result += (1.0f - reflection) * refraction_color * refr_prd.attenuation;

任何想法将不胜感激。 请注意,在使用函数rtTrace()之后, refr_prd。衰减应包含一些颜色。 我已经提到了reflection和reflaction_color来帮助您更好地理解该过程。 您可以简单地忽略它们。

有很多方法可以诊断您的问题。

  1. 通过消除反射射线的任何作用来隔离折射射线的作用。
  2. 确保您有一个错过程序。 所有最接近的点击程序和您的未命中程序都需要写入HitPRD ::衰减。 如果您怀疑正在调用错过程序,请将您的错过颜色设置为明显不好的颜色([1,0,1]是我的最爱)。
  3. 将rtPrintf与rtContextSetPrintLaunchIndex或setPrintLaunchIndex结合使用以打印产品的各个值,以查看给定像素中哪个项为零。 如果不将输出限制为给定的启动索引,则会得到过多的输出。 您可能还希望打印出深度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM