Tagged: 

Viewing 1 reply thread
  • Author
    Posts
    • #4071 Score: 0
      Keneyr
      Participant
      7 pts

      不是很清楚代码里这句怎么理解:
      point = point + kn * n * h(uv)
      我写成了这样:
      point = point + kn * n.cwiseProduct(payload.texture->getColor(u,v));
      是不是写错了?

      另外我也不是很理解,为什么kn * n.cwiseProduct(payload.texture->getColor(u,v)) 就是顶点移动的高度了?? 为何这样规定?

      我的高光程序其他测试都是正确的,为什么在displacement测例中没有呢?

      Attachments:
      You must be logged in to view attached files.
    • #4089 Score: 0
      maajor
      Participant
      3 pts

      你好,我的理解是
      point = point + kn * n * h(uv)
      这个代码中,h(uv)是一个标量,表示的表面沿法线位移的距离。

      point = point + kn * n.cwiseProduct(payload.texture->getColor(u,v));
      这里面,贴图采样的是一个Vector3f,当然如果贴图的rgb通道都是表示高度的灰度且一样的话,是没问题的等同于标量。但是作业框架里给的那张hmap.jpg,看上去像是个法线图,它三个分量不一样。

      其实这里我对作业框架有点存疑的,我觉得hmap应该是一张灰度高度图才对,我试了一下把hmap当法线图转出来一张高度图(附件hmap_normal2height.png),然后光栅化出来是附件disp_n2h_question.
      当然如果直接把hmap当成法线贴图,shader里也直接用法线图的方法,见附件disp_n_question,我觉得好像效果更好。

      Attachments:
      You must be logged in to view attached files.
      • #4120 Score: 0
        Keneyr
        Participant
        7 pts

        大佬,为什么你按照法线图的方式来写,得到的disp_n_question.png跟文档也不一样?

        如果h(uv)是一个标量,表示的表面沿法线位移的距离,为什么要乘以n,也就是乘以normal呢,不应该加吗?

        我觉得hmap.jpg像是一个法线空间下的法线纹理图,因为它大部分都是蓝色。高度纹理确实应该是灰度图,但是作业也把这一步省了。?

        不光displacement,在bump map的时候,不是应该有一个normal = pixel * 2 -1 的公式吗?我也没看到····

      • #4122 Score: 0
        助教
        Keymaster
        14 pts

        正规的凹凸纹理应该是只有一维参量的灰度图,而本课程为了框架使用的简便性而使用了一张 RGB 图作为凹凸纹理的贴图,因此需要指定一种规则将彩色投影到灰度,而我只是「恰好」选择了 norm 而已。为了确保你们的结果与我一致,我才要求你们都使用 norm 作为计算方法。

Viewing 1 reply thread
  • You must be logged in to reply to this topic.