Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业七的结果没有示例中的亮度高

Viewing 4 reply threads
  • Author
    Posts
    • #5896 Score: -1
      clarence
      Participant
      -2 pt

      效果图和代码如下,感觉是间接光照不够,但对照了论坛上其他老哥代码和作业给到的伪代码,似乎没发现有什么问题。

      PS:有没有用std::future实现多线程的老哥啊,感觉效果不太理想T.T。784,32SPP用了差不多两小时,具体就是每次调用Scene::castRay开一条线程

      This post has received 1 vote down.
      Attachments:
      You must be logged in to view attached files.
    • #5899 Score: 0
      L-Sun
      Participant

      future.get会阻塞当前的线程,而且你图中castRay的每次递归都会重新创建一个线程,创建线程会有时间开销。
      你应该在spp循环里进行多线程调用castRay来更新framebuffer,而且线程应该要复用,不然每次创建一个线程都会有时间开销。你可以查查C++11怎么实现一个简单的线程池。正确实现的话784*784 32spp大概耗时1分钟多一点(i58400 6线程 Release编译)。

    • #5902 Score: 1
      nightwatch
      Participant
      3 pts

      你可以把图片切成几个小块,然后分给不同的线程,渲染完了以后合并到framebuffer里面去。我的i7 4820H, 512×512 128spp,开O3以后应该在40秒左右渲染完

      亮度不够可能是因为光线弹射到了物体的表面里面(浮点误差,然后这条光线就没了,所以你在检测光线与物体相交的时候要注意避免和物体自相交。

      This post has received 1 vote up.
    • #5907 Score: 0
      6君
      Participant
      1 pt

      为什么深度+1?

      • #5920 Score: 0
        clarence
        Participant
        -2 pt

        我的思路是只有eyeray与光源相交才返回光源的亮度来解决光源黑的问题,不一定对

    • #5919 Score: 0
      clarence
      Participant
      -2 pt

      感谢上面两位同学的提点,现在运行时间快多了!

Viewing 4 reply threads
  • You must be logged in to reply to this topic.