Simone
云澹澹,水悠悠,一声横笛锁空楼
posts - 41,  comments - 70,  trackbacks - 1

人的皮肤之所以看上去比较柔和自然,主要是由于各层皮肤对光线的散射,通过实验测试表明,光线接触到皮肤时,有大约96%被皮肤各层散射了,只有大约4%被反射。下面就是光线经过皮肤散射和反射的示意图(摘录自Gary J. Katz的"Skin Rendering"):

这种皮肤各层对光的散射就是次表面散射效果(SubSurface Scattering),简称3S效果。这种效果的一种计算模型是Jensen的BSSRDF模型。BSSRDF中计算Rd的方程如下:

次表面散射分为2种:Single Scattering和Multiple Scattering,因为皮肤散射是以Multiple Scattering为主,所以这里我只计算皮肤的Multiple Scattering效果。我这里采用的方法是Carsten Dachsbacher和Marc Stamminger的论文"Translucent Shadow Maps"中描述的方法,就是以光源为视点来计算得到Irradiance Map, Depth Map和Normal Map,分别用来存储Incoming Irradiance , Depth和Normal(以光源为视点)。这里比较关键的是如何从Camera Space转换到Light Space,窃以为Paul's Project的关于空间转换的示意图很是经典,清晰明了,让人一看即明白,现摘录如下:


我这里使用OpenGL+GLSL来实现Translucent Shadow Maps,首先用FBO来渲染3张Texture:Irradiance Map, Depth Map和Normal Map,然后通过获取每个Fragment的Irradiance, Depth和Normal,根据上面所讲的公式来计算Rd,然后通过hierarchical filtering(通过MipMaps)来模拟Multiple Scattering,这里采用的是"Translucent Shadow Maps"论文中的21采样点过滤法,如下图所示:

最后的实现效果截图如下:



上图左边的3张图分别是:Depth Map, Irradiance Map和Normal Map(以光源为视点)。

下一步工作:

1。优化,提高效率;
2。支持纹理贴图;
3。支持动画。

欢迎广大同好交流、批评和指正,any comment will be welcomed!

---------------------------------------------------
Author: Skyman (吴俊)
版权所有,未经允许,不得转载
---------------------------------------------------
posted on 2008-04-21 03:24 Skyman 阅读(356) 评论(1)  编辑 收藏 所属分类: 研究

FeedBack:
2008-04-21 10:17 | [ IceSharK - PP.Poet ]      
顶!
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-21 10:03 编辑过
 
另存  打印
最新IT新闻:
· 56被关一月 危机的是整个视频业
· 李开复:中文搜索是谷歌战略核心
· 《星际争霸2》新图:黑暗圣堂武士Zeratul
· FriendFeed介绍
· 微软在台北发布新色鼠标产品
 


EMail:
jun.skyman2001'at'gmail.com
MSN:
skyman_2001@163.com

<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

与我联系

常用链接

留言簿(2)

我参与的团队

我的标签

随笔分类

随笔档案

Friends

  • LongGi
  • 一个搞Linux上的OGL的同志

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行