Home Forums Games202-高质量实时渲染 作业1深度精度

Tagged: 

Viewing 3 reply threads
  • Author
    Posts
    • #16447 Score: 0
      竹名茂
      Participant
      
      float unpack(vec4 rgbaDepth) {
          const vec4 bitShift = vec4(1.0, 1.0/256.0, 1.0/(256.0*256.0), 1.0/(256.0*256.0*256.0));
          return dot(rgbaDepth, bitShift);
      }
      
      vec4 pack (float depth) {
          // 使用rgba 4字节共32位来存储z值,1个字节精度为1/256
          const vec4 bitShift = vec4(1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0);
          const vec4 bitMask = vec4(1.0/256.0, 1.0/256.0, 1.0/256.0, 0.0);
          // gl_FragCoord:片元的坐标,fract():返回数值的小数部分
          vec4 rgbaDepth = fract(depth * bitShift); //计算每个点的z值
          rgbaDepth -= rgbaDepth.gbaa * bitMask; // Cut off the value which do not fit in 8 bits
          return rgbaDepth;
      }
      

      请问下大家怎么理解的?

    • #16450 Score: 0
      竹名茂
      Participant

      结果正常吗?

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

      Yo también me preguntaba cómo conseguir mucho dinero rápido. Hasta que encontré paston. Puedes olvidarte de tus preocupaciones financieras y hacer fluir tu adrenalina. Deja de malgastar tu vida pensando en ganar dinero. Entra y consigue tus ganancias.

    • #16969 Score: 0
      remoo
      Participant

      1. unpack()和pack()函数我个人的理解是为了增加数值精度而设置的,深度信息是一个连续的浮点数,它的范围和精度可能超出了一个8位通道(RGBA的A)所能提供的。直接将这样的深度值存储在一个8位通道中会导致大量的精度丢失,从而导致阴影效果不正确。因此我们可以充分利用其他的三个通道,也就是将深度值编码到多个通道中。存的时候用pack,用的时候unpack。

      另外助教发了个项目更正,pack()和unpack()函数的256改为255。

      2. PCF效果看起来有点脏?感觉是ShadowMap的大小不够大导致的。具体来说是textureSize太小了。没看代码不太清楚。

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