BlueRoseNote/03-UnrealEngine/Rendering/Shader/Effect/Ocean/海洋SSS效果论文笔记.md
2023-06-29 11:55:02 +08:00

3.4 KiB
Raw Blame History

论文与相关资料

寒霜的快速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
  • 反转颜色最后渲染到贴图中

技术细节

LT应该是Light Translucency的意思。v代表Vectorf代表floati代表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》中找到。