皮肤的实时3S渲染(OpenGL + GLSL)
2008-04-21 03:24
274 查看
人的皮肤之所以看上去比较柔和自然,主要是由于各层皮肤对光线的散射,通过实验测试表明,光线接触到皮肤时,有大约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!
这种皮肤各层对光的散射就是次表面散射效果(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!
相关文章推荐
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 真实实时皮肤渲染
- OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 实时皮肤SSS效果渲染Demo的改进
- 【OpenGL】GLSL-双面渲染技术(Two-sided rendering)
- 渲染世界的OPENGL<9>GLSL编程-单位着色器
- 渲染世界的OPENGL<10>GLSL编程-着色器统一值
- 实时皮肤SSS效果渲染Demo
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- OpenGL 4.0 用GLSL实现双面渲染
- 游戏中人体皮肤实时渲染第一弹
- 视频实时OpenGL渲染并保存渲染结果合成MP4
- OpenGl中使用着色器的基本步骤及GLSL渲染简单示例
- [置顶] 基于iOS的网络音视频实时传输系统(六)- AudioQueue播放音频,OpenGL渲染显示图像
- OpenGL-非实时渲染与实时混合使用(有图有真相)
- OpenGL 4.0 GLSL 延迟渲染 Deferred shading
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形