## 论文与相关资料 ### 寒霜的快速SSS 在GDCVault中搜索对应的演讲,之后就可以下载了。一些PPT比较大,可以直接去控件里找下载地址。 https://www.slideshare.net/colinbb/colin-barrebrisebois-gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurfacescattering-look-7170855 #### 视频 https://www.gdcvault.com/play/1014536/Approximating-Translucency-for-a-Fast 因为视频是blob模式的,所以可以去下面的网站下载: http://downloadblob.com/ #### ppt https://twvideo01.ubm-us.net/o1/vault/gdc2011/slides/Colin_BarreBrisebois_Programming_ApproximatingTranslucency.pptx ### SIGGRAPH2019ppt http://advances.realtimerendering.com/s2019/index.htm ## Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look ### 数据管理 数据可以分成材质相关与灯光类型相关。在寒霜中材质相关会使用GBuffer传递(UE4可以使用CustomData吧),光类型相关会在LightPass中传递。 ### 计算厚度值 通过AO的方式来计算厚度: - 反转表面法线 - 渲染AO - 反转颜色最后渲染到贴图中 ### 技术细节 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/DirectandTranslucencyLightingVectors.png) LT应该是Light Translucency的意思。v代表Vector,f代表float,i代表int。 ``` half3 vLTLight = vLight + vNormal * fLTDistortion; half fLTDot = pow(saturate(dot(vEye, -vLTLight)), iLTPower) * fLTScale; half3 fLT = fLightAttenuation * (fLTDot + fLTAmbient) * fLTThickness; outColor.rgb += cDiffuseAlbedo * cLightDiffuse * fLT; ``` #### fLTAmbient Ambient项,代表了始终存的各个方向的透射值。材质相关变量。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_AmbientTerm.png) #### iLTPower 强度衰减项,直接透射强度。与视口相关。可以通过预计算进行优化。材质相关变量。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_PowerTerm.png) #### fLTDistortion 透射方向形变项,用于模拟光线传输的不规则的效果,类似于毛玻璃的效果。主要的功能是控制法线对于透射光方向的影响。与视口相关。材质相关变量。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_DistortionTerm.png) #### fLTThickness 厚底项,预计算的Local坐标的表面厚度值。材质相关变量。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ThicknessTerm.png) #### fLTScale 缩放项,用于缩放直接透射效果。视口相关。灯光相关变量。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ScaleTerm.png) ### 最终效果 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_FinalyResult.png) ### GBuffer设计 最低的要求是GBufer中使用8位位宽灰度贴图的方式来存储translucency。使用24位位宽以颜色贴图的方式,可以实现材质对于不同光谱的光线不同的散射效果。 ### 技术缺点 因为是一种近似技术,所以只适合在凸物体上演示。这种技术对变形物体不起作用,因为需要烘焙厚度贴图。此外,我们可以使用实时AO算法配合倒置法线来计算厚度。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/FastSSS_ConcaveHull.png) PS.该技术的详细描述可以在《GPU PRO2》中找到。