[gpu pro2]pre integrated skin shading

原创 2012年03月25日 12:30:49

一个讲皮肤渲染的paper,在gpu pro2和siggraph11的advance course会议上有提到。

先看个效果:TSD(texture space diffuse)是达到标杆效果的做法,但是效率比较低,右边是pre integrated做法,我们可以看出基本是同一级别的质量。

link:http://url.cn/VnHMEI



texture space diffuse


第一个把皮肤渲染的非常好的是《matrix》这个电影,比如smith哥,这里使用的就是在texture space做的blur来模拟scatering,效果很逼真。

顺着这个思路,随着时间的推移,开始有简单的gaussin blur/wrap lighting来模拟的(左数第三个)。

以及经典的nvidia的皮肤demo。

nv的这个可以说一直是标杆,但是就是需要做太多的blur,性能不够好。

但是这个过程一些积累成为本文的基石:

  • diffusion profile:这个描述光如何在skin这样的材质中扩散的,下面这个数据是从实际皮肤中扫描出来的:

  • texture space diffusion:把入射光存在texture space,然后做一些blur来模拟扩散
  • FastSubsurfaceScattering:就是用在uncharted2以及后来的皮肤技术,使用jittered kernel,对rgb用不同的weight
  • sssss(screen space subsurface scattering)是上面fast subsurface scattering的screenspace化
PreIntegratedSkinShading:
那么到本文,PreIntegratedSkin的优势就在于使用更高效的方法达到TextureSpaceDiffuse的效果。

这个算法主要分成3个部分:
  • 处理眉骨这种大的表面弯曲的情况(surface curvature)
  • 处理皮肤表面细节纹路的情况(small surface bump)
  • 阴影
处理surface curvature
处理surface curvature这里使用了类似BRDF的积分,然后得出(或者近似出)一个简化的function。

这个结果目前作者还没抽象出一个简化公式,所以就存到一个look up texture,计算时候通过sample这个texture来获得预计算的结果。



上面的公式和书中的差一项,分子的2sin(x/2)应该是2r*sin(x/x),同时D(theta)变成D(theta,r),这里r是曲率的意思。
这里曲率的计算:


处理bump normal:
这里由于diffusion profile在rgb上的不同,同样的normal分布在rgb下呈现不同的结果,图出来是这样:


这里需要这样理解,实际中是同样的皮肤表面的bump,在光照下,rgb三个颜色呈现上图中rendering这一column的结果,那么实际计算中我们为了简化和提升效率,就把用于rgb计算diffuse lighting的normal map做一个filter,然后用统一的计算公式来计算,这样也能达到同样的结果。
这里pre filter normal就是使用的diffuse profile,但是可以看到计算diffuse&specular lighting需要4张normal map这个就太费了,但是我们可以看到上图中red的normal map是最糊的,specular是最清晰的,那么我们可以做一个优化就是使用specular和red的normal map,然后插值出另外2个。

shadow。。。不太感兴趣,这部分不太具备通用性,略过



版权声明:本文为博主原创文章,未经博主允许不得转载。

GPU Pro 2.pdf

  • 2013年06月06日 13:25
  • 36.09MB
  • 下载

《GPUPro》笔记

10年出版的GPUPro,拿到手里也有段时间了,颇有含金量的一本书,但也有一些水文,700多页大部头都细读也是不合适,摘取部分做了些笔记:摘取原则是对游戏图形开发比较有实际意义的,或者在较近的“长远”...
  • ccanan
  • ccanan
  • 2013年02月16日 15:18
  • 5037

Alien Skin Exposure v6.x 最新通用完整版汉化补丁

完整汉化版说明:     我于2014-06-19上传的“Alien Skin Exposure 6.x 通用汉化补丁”,有些网友反映预设不能显示中文,调查了一下:预设能显示中文的,操作系统基本上是完...
  • xwm0008
  • xwm0008
  • 2014年06月30日 07:42
  • 4522

深入理解Libgdx中的Skin类

本文不是直接翻译。。。本文在Libgdx的官方wiki的基础上,加上一些自己的理解。所以,难免会一些甚至是很多的理解很片面的东西。写的不好,还请见谅。。。。其实其实,在LibGDX的官方文档对Skin...
  • caihongshijie6
  • caihongshijie6
  • 2014年07月08日 16:51
  • 3024

定制Android模拟器skin

Android模拟器提供了6个标准的skin供我们使用,分别对应HVGA(横屏/竖屏)、QVGA(横屏/竖屏)、WQVGA以及WVGA,我们只要在启动模拟器时使用 -skin 参数就可以载入相应的皮肤...
  • littlegirlya
  • littlegirlya
  • 2013年12月09日 13:37
  • 3069

MFC用skin++进行美化

1.
  • u012234115
  • u012234115
  • 2014年06月27日 17:19
  • 1223

Layui 学习整理

Layui 学习整理本文为作者本人对layui的实用向学习整理,仅作交流用。CSS组件图标字符Layui的字符采用的是Unicode字符。所有图标全部采用字体形式,这一点和bootstrap非常相似,...
  • Cabbaze
  • Cabbaze
  • 2017年01月24日 17:46
  • 5417

Flex4之皮肤定制【Skin类和Skin类】

第一、关于spark.skin.SparkSkin类的    1.SparkSkin介绍    (1)spark.skins,这个包里面只有一个class:SparkSkin,非美工的程...
  • w_y_loong
  • w_y_loong
  • 2013年03月18日 13:20
  • 579

全面拥抱 Qt 4.6 + 让Qt应用程序支持换肤(Skin)功能

转自:http://www.linuxidc.com/Linux/2010-12/30223p6.htm Qt程序一直给人的印象是正规的GUI程序的模样.在嵌入式Linux下,Qtopia的桌面看起...
  • jinhongdu
  • jinhongdu
  • 2014年01月11日 10:32
  • 1753

OpenGL ES 学习教程(十一) Skin Mesh (骨骼动画)

Skin Mesh (骨骼动画) 这个名字,多多少少让人产生误解。一开始我总以为要画出来几根骨头,然后再到骨头上去把顶点粘上去。 其实不是这样。事实上 是没有 骨骼 这个实体的,骨骼只是大家为了 形象...
  • cp790621656
  • cp790621656
  • 2016年02月24日 02:24
  • 4506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[gpu pro2]pre integrated skin shading
举报原因:
原因补充:

(最多只允许输入30个字)