3.4 KiB
论文与相关资料
寒霜的快速SSS
在GDCVault中搜索对应的演讲,之后就可以下载了。一些PPT比较大,可以直接去控件里找下载地址。
视频
https://www.gdcvault.com/play/1014536/Approximating-Translucency-for-a-Fast
因为视频是blob模式的,所以可以去下面的网站下载: http://downloadblob.com/
ppt
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
- 反转颜色最后渲染到贴图中
技术细节
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项,代表了始终存的各个方向的透射值。材质相关变量。
iLTPower
强度衰减项,直接透射强度。与视口相关。可以通过预计算进行优化。材质相关变量。
fLTDistortion
透射方向形变项,用于模拟光线传输的不规则的效果,类似于毛玻璃的效果。主要的功能是控制法线对于透射光方向的影响。与视口相关。材质相关变量。
fLTThickness
厚底项,预计算的Local坐标的表面厚度值。材质相关变量。
fLTScale
缩放项,用于缩放直接透射效果。视口相关。灯光相关变量。
最终效果
GBuffer设计
最低的要求是GBufer中使用8位位宽灰度贴图的方式来存储translucency。使用24位位宽以颜色贴图的方式,可以实现材质对于不同光谱的光线不同的散射效果。
技术缺点
因为是一种近似技术,所以只适合在凸物体上演示。这种技术对变形物体不起作用,因为需要烘焙厚度贴图。此外,我们可以使用实时AO算法配合倒置法线来计算厚度。
PS.该技术的详细描述可以在《GPU PRO2》中找到。