• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
String Of Brilliant Blue
湛蓝之弦
博客园    首页    新随笔    联系   管理     

[翻译]延迟着色(2)

延迟光照的关键部分

全局光源
•一些影响整个场景的元素,比如太阳光和雾
•需要在整个屏幕上进行计算
•顶点坐标,法线,颜色以及材质的参数均以纹理的形式输入。
•光照计算在象素着色器中实现。
•计算输出先储存在一个中间的光照缓冲中。

局部光源
•局部光源的光照效果只影响到整个场景的一部分
•我们只计算受相关光源影响的象素。
•这需要将光源体投影到屏幕空间
•利用GPU很容易对象素按光源进行分类。
•在场景构造时,我们建立一个简单的网格来表示光源影响的空间区域,在游戏运行时,在3D空间中对这个网格包围的象素进行光照计算。

以下是延迟光照的关键部分,水平有限,如有错误还请谅解。延迟光照的关键点之一,如何找到光照体积网格中的象素。


 
首先渲染光源体积网格的背面,将Z比较设置为D3DCMP_GREATER,很显然红色粗线表示的几何体所覆盖的屏幕区域被标志出来,从上图中可以看到,红色区域部分只有位于红色三角形内的部分所覆盖的象素才需要进行光照计算。第二步我们需要进一步将青色部分选出来。这次渲染光源体积网格的正面,将Z比较设置为D3DCMP_LESS,这样就可以将光源体积外的象素给剔除掉了,原理和体积阴影计算一模一样。

posted @ 2008-02-03 10:31  effulgent  阅读(1613)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3