Qinja / RayTracingForCuda

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RayTracingForCuda

学习了RayTracing in one weekend之后,尝试用OpenMP去优化多线程,但是毕竟CPU运算,效果并不特别明显。

看了一下Cuda编程,感觉还是可以改动的,不用费很大的事情。Cuda的编程实例参考: Github:muzichao

这个工程会以RayTracing为参照,完成这个之后再往Next 做。RayTracing实例参考: Github:petershirley

  1. 图一,输出颜色

    给cuda添加一个char[]内存区,指定每一个Grid有W/16,H/16个块,每个块有16,16个线程。 并行计算时获取当前点的屏幕坐标,随便输出个颜色。如下图。

    得到颜色之后,把图片从GPU中拷贝出来,至于要保存到图片,还是要显示到glfw都行。 glfw在这个工程中用的不多。我就是随便试一下。

图1

  1. 图二,随便画个天空

    建立若干个需要用到的类vec3,ray。 在Cuda核心函数里面先试一下,写个__device__ vec3 getcolor(const& ray)随便输出一下天空。

图2

  1. 图三,画个球

    在Cuda核心函数里面随便试一下与球相交为红色。

图3

  1. 图四,给球加法线

    改进相交使得输出法线信息。

图4

  1. 图五,添加hitableList实现多物体

    添加hitable类,添加sphere和hitable_list。 具有抽象继承的类数组要在设备端做,不能在CPU做。 所以这里是一个比较大的坑。不好调试也不好理解。 参考资料:CSDN:Pxy

图5

  1. 图六,实现超采样,分离摄像机

    添加camera。 超采样抗锯齿。超采样串行。

图6

  1. 图七,实现diffuse材质

    实现diffuse材质,用递归来使颜色下降。

图7

About


Languages

Language:C 94.1%Language:C++ 3.0%Language:Cuda 2.9%