Home Forums Games202-高质量实时渲染 关于shadow map精度导致的问题

  • This topic has 10 replies, 5 voices, and was last updated 3 years ago by JH.
Viewing 4 reply threads
  • Author
    Posts
    • #7938 Score: 0
      zhishao
      Participant
      2 pts

      关于课上讲shadow map的精度导致奇怪斑纹的问题时有一张示意图(见附件)。我想问一下图中所有红片上的点到光源的连线跟其他红片会有交点吗?也就是说在光方向观察,红片之间会有遮挡吗?

      按照我的理解应该是不会的,因为每个像素对应一根光线,而光线本身只在光源处相交,所以任意像素不会采样同一个点。

      想问一下我的理解是对的吗?

      Attachments:
      You must be logged in to view attached files.
    • #7955 Score: 0
      zacks
      Participant

      我的理解是红片上的点到光源的连线会被其他红线遮挡,这也是 Self Occlusion 的由来。你的理解中最大的问题在于,像素不是一个点,在光源视角下的 Shadow Map 中,每一个像素可以视作一个面向光源的面片,其深度等于面片中心点的深度,因此形成图中红色的面片。

      当从摄像机视角做深度检测时,可能会从别的角度看到一个红色面片背后的点(如附件所示),因此在不加 Bias 的情况下,被视作被遮挡,从而产生 Self Occlusion。

      • #7956 Score: 0
        zacks
        Participant

        Ah never mind, 我发现我看错问题了,红片上的点应该不会和别的红片遮挡……

        • #7957 Score: 0
          zhishao
          Participant
          2 pts

          我问这个的原因就是我上课听的感觉是红片之间相互遮挡了,但是下来又听了一次,感觉闫老师的意思是SM上像素上的点遮挡住了它自己本身在地面上的点。其实就是对自遮挡这个概念我还是没想清楚。但是我看了知乎上的一些回答都倾向与第二种意思,也就是说红片本身不会发生遮挡。但是我还是不是很确定。

          • #7965 Score: 0
            zacks
            Participant

            我觉得你第二种理解时没问题的

    • #7958 Score: 0
      JH
      Participant
      3 pts

      我的理解也是没有遮挡,因为红片本来就是在光源视角下将深度离散化后的假想结果,如果把深度想象成不连续的,光源视角下的每个pixel都可以看作面朝光源的面片的深度值(面朝光源是因为同一面片深度一致,相当于一个pixel只有一个深度值)。换句话说,如果想象所有的面片像光源方向平行,应该是可以完美地填满整个shadow map的。
      我还有一个问题,是不是可以认为更高分辨率的shadow map有利于改善self occlusion的问题?

      • This reply was modified 3 years ago by JH.
      • #7961 Score: 0
        zhishao
        Participant
        2 pts

        我觉最直接的影响就是分辨率越高,瘢痕黑色的部分越细。理论上精度足够高黑色部分就会消失。

    • #7960 Score: 0
      flyingSnow
      Participant
      5 pts

      我的理解是红片之间不会遮挡,因为是光源角度的深度图,肯定是不被遮挡的才能写进SM。
      而且这个遮挡不遮挡不重要,因为计算阴影时候实际上是考虑红片遮挡真实平面,而不是红片之间的关系。

    • #7962 Score: 0
      zyk
      Participant
      6 pts

      按我理解:
      1. 红片仅仅是用来示意从点光源角度看地面时的离散化深度
      2. 闫老师说的自遮挡是指光源角度生成的离散深度图在相机视角下计算阴影时离散的某些像素误判为在阴影中,也就是说地面自己遮挡自己这个说法是站在相机角度说的,跟相机角度看东西是否自遮挡毫无关系!光源角度给出的深度图是离散的这一特性给了相机角度进行shading时发生误判
      3. 提高ShadowMap的分辨力,应该能减少自遮挡的现象

      到这里其实我有另一个问题:

      既然是离散化导致的问题,那光源角度进行渲染时,片段着色器中对ShadowMap进行采样的时候使用双线形插值之类的算法来模拟连续深度图,是否也能改善自遮挡的现象?

      • #7963 Score: 0
        zyk
        Participant
        6 pts

        原文笔误:也就是说地面自己遮挡自己这个说法是站在相机角度说的,跟光源角度看东西是否自遮挡毫无关系!

        我的理解:光源角度看东西不存在自遮挡这种情况

      • #7967 Score: 0
        JH
        Participant
        3 pts

        我认为理论上说是会的,不过自遮挡的问题在离散化深度值的时候就已经产生了,双线性插值肯定比point sampler要好,但是改善的很有限。考虑一张分辨率较低的shadow map,可能某个深度连续变化的区域在shadow map上都是同一个值,而此时sample方式并不会改善自遮挡问题。
        其实PCF的思想就是用更多邻近的pixel去判断单一pixel的visibility,也可以看作一种区域插值,只不过不是对于shadow map插值的,而是对于比较结果插值的。

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