Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 [作业7] 只考虑直接光照的结果

Viewing 5 reply threads
  • Author
    Posts
    • #5604 Score: 0
      欠你一枝花
      Participant
      4 pts

      hello各位老师同学,我想先通过实现直接光照来查看效果,

      在这里,对使用Scene::sampleLight(p, pdf_light);这块还是没太能理解,请各位大佬帮忙看下,非常感谢!

      我的实现是这样的:

      1. 找到p点, 即要渲染的点。
      2. 如果p点存在, 则根据p的入射方向和法线方向, 用samplepdf函数得到出射方向的pdf_light这个float型的值(这是概率密度)?
      3. 根据第2步的pdf_light,调用Scene::sampleLight(p, pdf_light), 因为其背后对应的各个Object的Sample成员函数对传入的p进行了修改, 我将其理解为经过Scene::sampleLight后, p点就是在光源上采样的点了.
      4. 根据作业说明, 我将x, NN等属性从p中直接获取,然后再判断新的光线p2x相交等,进行光照计算.

      代码和结果在附件中,不知道有没有什么问题~

      另外,在Renderer.cpp中,不清楚下面这个写法有没有问题:

      for (int k = 0; k < spp; k++){
      framebuffer[m] += scene.castRay(Ray(eye_pos, dir), 0) / spp;
      // fixme: 是不是我这样写才对?
      // framebuffer[m] += scene.castRay(Ray(eye_pos, dir), 0);
      }
      // framebuffer[m] = framebuffer[m] / spp;

      Attachments:
      You must be logged in to view attached files.
    • #5613 Score: 0
      Zhixiong Ren
      Participant

      那个 background 需要自己换成黑色

      我计算光强时是用 Emit 除以距离的平方再乘上的,好像才能得到和例子相似的颜色, 否则颜色会过亮(只有黑色和白色),当成 Intensity 量来用。

      Emission 的单位好像是 RLU,不能和物理量直接相互转换。

      • #5614 Score: 0
        欠你一枝花
        Participant
        4 pts

        谢谢大佬,距离的平方是啥意思? 是p2x的距离的平方?

        • #5616 Score: 0
          Zhixiong Ren
          Participant

          就是我用 (Emit / (x – wo).square()) 乘上了后面的,后面的公式和你一样。

          你可以先只算一个直接光照的,看下效果,对了的话左右两侧的红绿墙应该会出来的。

          • #5619 Score: 1
            助教
            Keymaster
            14 pts

            公式里不是本就有一个距离平方吗?你是需要再除一个距离平方?

            This post has received 1 vote up.
            • #5638 Score: 0
              Zhixiong Ren
              Participant

              是的,我除了公式里的距离平方,又多除了一个距离的平方

              谢谢助教,我查看一下哪里算错了

            • #5639 Score: 0
              Zhixiong Ren
              Participant

              我是在光第一次反射的时候,多除了一次距离的平方,然后得到的如下的效果

              请问 Intersection 中的 emit 是什么单位?

              Attachments:
              You must be logged in to view attached files.
            • #5663 Score: 0
              Zhixiong Ren
              Participant

              我在公示 Li 的位置多除了 d2 才能显示出相似的颜色,不除的 d2 颜色会过亮,只有黑白

              还是没看出来哪一步错了

              Attachments:
              You must be logged in to view attached files.
            • #5666 Score: 0
              Zhixiong Ren
              Participant

              我找到原因了,是因为 ws 计算后没有 normalize,所以正好多出了距离的平方倍

          • #5624 Score: 0
            欠你一枝花
            Participant
            4 pts

            我的结果不是的, 还是一片蓝天白云…
            童鞋能帮忙看看我附件的代码吗? 万分感谢…

            • #5667 Score: 0
              Zhixiong Ren
              Participant

              castRay 里面如果没有光返回

              我的第一步算直接光照的,是上面那样判断的
              obj 对象在 intersect 的时候加了赋值,默认没有赋值,其他同学好像是用范围判断的

              我修改的是 ws 赋值是单位方向
              Vector3f ws = normalize(lightIsect.coords – isect.coords);

    • #5627 Score: 1
      禹鹏(助教)
      Keymaster
      9 pts

      你的代码里面错误太多了。
      比如wo这个入射方向不就是ray.direction么?
      关于你的2,课堂已经讲过了,如果是直接光照的话,不要从p点采样出射光线的方向,而是看哪些光源能照到这里。
      具体做法就是:sampleLight实在光源上采样一个发光点,然后你从p点到发光点判断有没有遮挡。

      This post has received 1 vote up.
      • #5642 Score: 0
        欠你一枝花
        Participant
        4 pts

        谢谢大佬啦~, 您的意思是不是:

        1. 着色点p的入射方向wo = p.coords换成wo = ray.direction, 但是p.coords就是origin+t*dir, 也就是说, p.coordsray.direction不是一样的吗?

        2. 通过调用sampleLight(p, pdf_light), 其中p是变为光源上的1个采样点, 把它的坐标叫做x, 即光源上的采样点x = p.coords, 那么就通过2个点来构建1个ray_p2x的Ray实例来判断其与场景是否相交, 不太清楚这块是哪里错了.

        麻烦大佬帮我点播一下, 真的太谢谢了!

        • #5649 Score: 0
          Zhixiong Ren
          Participant

          wo = -ray.direction
          pdf(wi, wo, rayIsect.normal)

          • #5653 Score: 0
            禹鹏(助教)
            Keymaster
            9 pts

            1. 位置和向量的概念不一样的。方向这个问题注意正负号。
            2. sampleLight你看一下定义,第一个参数是个Intersection,是这个函数算出来的。也就是光源上采样点的信息。

        • #5652 Score: -1
          Zhixiong Ren
          Participant

          我的
          ws = lightIsect.coords – rayIsect.coords
          rayIsect 是传进来射线打到的非光源物体,lightIsect 是利用 sampleLight 的光源采样点

          This post has received 1 vote down.
          • #5695 Score: 0
            欠你一枝花
            Participant
            4 pts

            老兄, 我这个代码直接光照出来的结果没有物体的阴影, 其它都正常

            哪里跟你不一样能帮忙看下么?

            太感谢了…

            Attachments:
            You must be logged in to view attached files.
          • #5709 Score: 0
            欠你一枝花
            Participant
            4 pts

            直接光照的结果(物体的阴影没显示出来。。。)

            Attachments:
            You must be logged in to view attached files.
            • #5713 Score: 0
              Zhixiong Ren
              Participant

              wo = -ray.direction 有个负号,是从照射点朝向眼睛的方向

              • #5720 Score: 0
                欠你一枝花
                Participant
                4 pts

                改了之后效果一模一样…

                开/关OpenMP的效果也是一样的…

                实在是犯蒙…

    • #5715 Score: 1
      欠你一枝花
      Participant
      4 pts

      改了之后效果一模一样…
      开/关OpenMP的效果也是一样的…

      同学能加个qq吗? 我的: 314913739

      This post has received 1 vote up.
    • #5722 Score: 0
      xuyonglai
      Participant
      3 pts

      我觉得你的错应该是判断是否能直接打到光源那里有问题

      • #5756 Score: 0
        欠你一枝花
        Participant
        4 pts

        我的天… 是Bounds3::IntersectP的问题, 我原来的判断条件是t_enter <= t_exit && t_enter >= 0, 应该改为t_enter <= t_exit && t_exit >= 0

        • #5823 Score: 0
          樱井小暮
          Participant

          请问没有阴影还有可能是什么原因呢?我intersectp里判断条件没有问题。

    • #5758 Score: 0
      Songsong
      Participant
      4 pts

      楼主,想请问一下关于happened这个属性,究竟是和什么碰撞,在最初的条件中应该是属于和场景边缘还是?之后又用测试光的这个属性判断是否与物体相交,有点不理解具体含义了

      • #5937 Score: 0
        欠你一枝花
        Participant
        4 pts

        在这里例子里其实没啥用,因为助教大佬们把光源也当成1个物体了,那你碰撞到其它物体还是”光源”, 本质上没啥区别.

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