`

次表面散射

 
阅读更多

次表面散射是次时代游戏引擎的一个比较特征性的渲染技术,这项技术让半透明材质开始流行,人物最重要的组成部分皮肤的渲染也融入了复杂的次表面散射渲染。在网上找了很多相关的资料,大部分都是秀一些效果图,也看到了几篇不错的文章,这里写一下自己的理解。由于这个渲染效果,是多项渲染技术的综合运用,所以,作为菜鸟暂时只能谈理论 - -。

 

次表面散射(Subsurface Scattering):次表面散射简称3S,是光射入非金属材质后再内部发生次表面散射,最后射出物体并进入视野中产生的现象,是指光从表面进入物体经过内部散射,然后又通过物体表面的其他顶点出射的光线传递过程。

 

次表面散射的光学结构:(把光的来源划分为五种)

Lid :物体表面交互漫反射入射光。

Lis :物体表面交互镜面反射入射光。

Lir :折射光,这也是半透明的特色,有部分光能够通过折射的方式穿过模型。

Liss :局部高频光源在物体内部的单次散射入射光。

Lims :低频环境光源在物体内部的多次散射入射光。

上述五种是针对次表面散射而言比较特殊的光源,除这几种以外。还有三种常见光:1.镜面反射,2.漫反射,3.自发光。这三种按照常规的方式进行渲染即可。

 

非均匀分层半透明材质结构分析:(这是半透明材质中最复杂的一种,人体皮肤具备这种特征)

指标:

1.光照吸收系数 :由于每一层的材质不一样,所以每一层介质的吸光系数就不一样,系数越小光越不容易衰减。

2.材质的厚度 :厚度*吸收系数 = 光在穿过这一层的时候被衰减的值,如果衰减完了表明光穿不过去,Lir = 0。

3.光照散射系数 :这个是用来计算Liss 和Lims用的,只不过Liss 的光源是点光源,而Lims用的是环境光。

4.法向量 :这个不解释。

上述散射系数和吸收系数都用(R,G,B,A)表示,因为不同的材质会对吸收的光的类型不一样。

 

算法概述:(别人写的算法)

 

1.以立方图作为环境光源,从视点位置开始绘制,将三维模型在世界坐标下的顶点位置(EPosTex)、法向量(ENormTex)、纹理坐标(ETexcoordTex)、深度(EDepthTex)以及漫反射光照值(EDiffuseTex)分别绘制到5 张浮点纹理.其中,漫反射光照值是以滤波处理后的立方图作为环境光源计算得到的,并且可采用多渲染对象(multi rendering target,简称MRT)技术用一遍绘制来完成这些浮点纹理的生成。

2.从点光源位置开始绘制,将三维模型在世界坐标下顶点位置(LPosTex)、法向量(LNormTex)、纹理坐标度(LTexcoordTex)、镜面反射光照度(LSpecTex)分别绘制到4 张浮点纹理,也采用MRT 方式用一遍绘制完成。

3.基于延迟着色的思想,只绘制一个满屏的四边形,以EposTex,EnormTex,EtexcoordTex 这3 张浮点纹理以及第2 步得到的4 张浮点纹理作为输入,并使用材质浮点纹理,在图像空间进行单次散射的近似计算,将结果绘制到一张颜色纹理中,得到Liss;同时,采用MRT 的方法,将镜面反射光照值和折射光照值分别绘制到另外2 张颜色纹理,得到Lis 和Lir。

4.绘制一个满屏的四边形,以EDiffuseTex 浮点纹理作为像素光源,在对其进行重要性采样的基础上,使用EPosTex 浮点纹理,在图像空间进行多次散射的近似计算,并将结果绘制到一张颜色纹理中,得到Lims;

5.绘制一个满屏的四边形,使用EDiffuseTex 和EdepthTex 两张浮点纹理,采用SSAO 方法进行交互漫反射的近似计算,并将结果绘制到一张颜色纹理,得到Lid。

6.绘制一个满屏的四边形,以算法第3 步~第5 步所得到的颜色纹理作为输入,并使用公式(2)将各类光照分量进行叠加,得到最终的绘制效果。以上算法步骤一般在绘制循环的每一帧都要执行,因此可以满足动态物体的实时处理需要.虽然每帧需要执行6 遍绘制,但其中的第3 步~第6 步充分融入了延迟着色的思想,每遍只需绘制一个四边形而无须重绘三维模型,并且每像素处理可通过GPU 的并行计算来完成,因而算法可以较好地保证绘制的实时性。

 

其实是针对上述几种光路,分别算出每种光路对点的贡献值,最后把所有的加起来。

 

总结 :看着算法就知道还有很多的路要走,什么光线追踪,什么延迟渲染,什么并发计算,都得先会才能做这个。上述是看别人论文的总结,不一定对,要看原文下载附件。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics