延迟着色与正向着色

290 阅读1分钟

原文

  • 正向着色(Forward Shading):遍历光源->接着遍历物体->光照和物体几何数据进行计算。
  • 主要业务逻辑
    • 获取灯光位置的深度值的贴图
    • 把深度值贴图和灯光位置传入mesh中
    • 根据灯光的位置获取所有顶点的深度值,如果改顶点位置大于深度值位置,颜色变暗
foreach light {
  foreach mesh {
    if (light volume intersects mesh) {
      render using this material/light shader;
      accumulate in framebuffer using additive blending;
    }
  }
}
  • 延迟着色(Deferred Shading)就是将计算量大的渲染光照部分延迟(Defer)到后期进行处理
    • 几何处理阶段(Geometry Pass) 是将对象的各种几何信息(位置/颜色/法向)进行渲染并储存在叫做G缓冲(G-buffer)的纹理中。
    • 光照处理阶段(Lighting Pass) 是对G缓冲中的几何数据的每一个片段进行光照计算。光照处理阶段不是直接将每个对象从顶点着色器带到片段着色器,而是对G缓冲中的每个像素进行迭代,从对应的G缓冲纹理获取输入变量。
// g-buffer pass
foreach visible mesh {
  write material properties to g-buffer;
}

// light accumulation pass
foreach light {
  compute light by reading g-buffer;
  accumulate in framebuffer;
}