Introduction to my galaxy engine 5: Differed Lighting

忙碌了好几天终于把deffered lighting做出了个雏形。其实关键就是局部灯光范围的检测。这里我是通过depth fail test和读写stencil value 来实现的。以下是每一步的截图:

这幅图是将场景物体的法向量渲染到第一个render target texture的RGB值

这幅图是将场景物体的projection depth渲染到第一个render target texture的Alpha值

这幅图是将场景物体的diffuse color渲染到第二个render target texture的RGB值,如果有specular color的话可以写到alpha值

之后就开始利用之前的两幅场景信息的texture来计算光照了,可以将之前的diffuse texture看做四边形渲染到back buffer,depth信息通过VS_Depth写入。normal 信息用于光照的计算。

下面这幅图是global ambiant light 和global directional light的效果图

这幅图保留了局部灯光的模型,除了全局的灯光,另外添加了4个local point lights 和4个local cone lights。将这些光照模型渲染到back buffer,关闭读写颜色和深度。做depth fail测试和写stencil buffer. 之后再读取back buffer,检测stencil buffer的值,如果大于一说明此像素受到光照影响并添加光照计算。

这幅则是最终的结果图

 Reference:

[1] ShaderX2 

[2] http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/deferred-rendering-demystified-r2746

[3] http://en.wikipedia.org/wiki/Deferred_shading

[4] http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter09.html

[5] http://www.gamerendering.com/2008/11/01/deferred-lightning/

[6] http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Deferred+Shading

[7] http://ftp.ambility.com/DeferredShading.pdf

[8] http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf

[9] http://developer.download.nvidia.com/assets/gamedev/docs/6800_Leagues_Deferred_Shading.pdf

原文地址:https://www.cnblogs.com/RobinG/p/2519266.html