2014-10-20 64 views
0

我只是有一些关于延期着色的问题。我已经到了从多个渲染目标中获得颜色,位置,正常和纹理的地步。我的问题与我接下来要做的事有关。为了确保我从纹理中获得了正确的数据,我在屏幕上放置了一个平面并将纹理渲染到该平面上。我不明白的是如何操作这些纹理,以便最终的输出在光照下呈阴影。我是否需要渲染一个占用屏幕的平面或四边形,并将所有计算应用到该平面上?如果我这样做,我有点困惑,因为“飞机”将是一个可渲染的物体,所以我需要重新渲染飞机。我是否错误地想到了这一点?问题延期着色

+0

我刚想到这里,我作出最后的质地和做所有的计算到纹理?这很有道理......嗯,我会试试 – Devvy 2014-10-20 01:43:33

回答

1

您需要渲染一些几何图形来表示光线覆盖的区域。光的每个像素的照明术语被累积到目标渲染目标中。这给你你点燃的结果。

有多种方法可以做到这一点。要启动并运行,简单/简单(并且速度很慢)的方法是为每个灯渲染一个全屏四元组。

基本上:

  • 设置:渲染的所有对象转换为G-缓冲器,存储所述各对象属性(反照率,镜面,法线, 深度,你需要什么)
  • 照明:对于每一个光:
    • 渲染一些几何来表示的光被打算覆盖在屏幕上
    • 样品的g缓冲器你需要计算照明贡献数据的区域(可以使用VPOS寄存器吨Ø找到UV)
    • 积累照明术语到目标渲染目标(后备缓冲将简单的情况下做的很好)

一旦你得到了这个工作,有不同的方式负荷加快速度(剪刀直线,严格限制光线的网格,模板测试以避免阴影“浮动”区域,同时绘制多个灯光和更高级别的技术(如平铺))。

有一个关于延迟着色很多不同的斜面上的这些天,但原来的技术覆盖全面这里:http://http.download.nvidia.com/developer/presentations/2004/6800_Leagues/6800_Leagues_Deferred_Shading.pdf

+0

谢谢!我会接受这个答案。我问这个问题的主要原因是我似乎无法获得最终的渲染效果,我想知道是否我误解了如何达到这一点。当我试图渲染点光并计算数据时,发现我只是绑定了错误的顶点数据。谢天谢地,我想通了,并可以继续这一点,我不能相信我没有绑定绘图前的顶点数组 – Devvy 2014-10-20 02:46:33